MySQL-join查询

先建个表

最好的学习编程方式就是实践,这里有建表语句和插入数据语句,可以在数据库执行一遍。下面的例子都是以这个表为主。

#部门表
create table `tb_dept` (
`id` int(11) not null auto_increment,
`name` varchar(30) default null,
`storey` varchar(40) default null,
primary key(`id`)
)  engine = innodb auto_increment=1 default charset=utf8;
#员工表
create table `tb_emp` (
`id` int(11) not null auto_increment,
`name` varchar(30) default null,
`dept_id` int(11) default null,
primary key(`id`),
key `idx_dept_id`(`dept_id`)
#, constraint `fk_dept_id` foregign key(`dept_id`) references `tb_dept` (`id`)
)  engine = innodb auto_increment=1 default charset=utf8;
#部门数据
insert into `tb_dept`(`id`, `name`, `storey`) values('1', 'RD', '11');
insert into `tb_dept`(`id`, `name`, `storey`) values('2', 'HR', '12');
insert into `tb_dept`(`id`, `name`, `storey`) values('3', 'MK', '13');
insert into `tb_dept`(`id`, `name`, `storey`) values('4', 'MIS', '14');
insert into `tb_dept`(`id`, `name`, `storey`) values('5', 'FD', '15');

#员工数据
insert into `tb_emp`(`name`, `dept_id`) values('z3', 1);
insert into `tb_emp`(`name`, `dept_id`) values('z4', 1);
insert into `tb_emp`(`name`, `dept_id`) values('z5', 1);

insert into `tb_emp`(`name`, `dept_id`) values('w5', 2);
insert into `tb_emp`(`name`, `dept_id`) values('w6', 2);

insert into `tb_emp`(`name`, `dept_id`) values('s7', 3);
insert into `tb_emp`(`name`, `dept_id`) values('s8', 4);

三种join

join查询就是将两张表用一个字段链接起来,组成一张表,然后对这张表进行查询。

比如下面两个表,一个是员工表(左),一个是职位表(右),他们就可以用职位id来链接,两表取得相同的id,左表dept_id和右表id相等的是一条数据。

但是这样就会存在也许左边的表有的数据右边表找不到又或者右边表的数据左边表找不到的情况,所以就衍生出了三种查询:inner joinleft join right join

inner join 

就是取交集,会取两个表都存在的行 

select * from tb_emp inner join tb_dept on tb_emp.dept_id = tb_dept.id;

left join 

以左边的表为主,取所有左表的数据,当右表数据不存在的时候补null

select * from tb_emp left join tb_dept on tb_emp.dept_id = tb_dept.id ;

right join 

以右边的表为主,取所有右表的数据,当左表数据不存在的时候补null 

select * from tb_emp right join tb_dept on tb_emp.dept_id = tb_dept.id;

 与子查询的区别

或许你觉得子查询也可以解决上述问题,那么它和子查询有什么区别呢?

1、子查询与join查询思路不一样

  • 子查询是通过先查一条数据,再根据这条数据去其他表中查询
  • join查询是根据某个字段拼接成一个表,然后在这张表中直接查询

2、子查询和join查询性能不一样

  • 相对而言,join查询比子查询效率要高。因为在MySQL中进行子查询要建立一张临时表,在查询后要删除临时表,这样的操作非常影响效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值