mysql七种Join理论
2018年06月04日 20:48:29
阅读数:29 编辑
在sql99语法中,增加了 join这中关联表的查询,具体有left join ,right join ,inner join。这几种查询方式组合起来大概有一下七种查询方式,如图:
这里用手机–>所属公司来具体实践一下,先查看一下表的内容:
-
手机数据表: 所属公司数据表:
-
----------------------------------| ----------------------------------|
-
id phoneName price companyId id companyName
-
1 vivoX9 2000 1 1 vivo科技股份有限公司
-
2 vivoX20 3200 1 2 美国apple股份有限公司
-
3 vivoXPlay 4500 1 3 小米科技股份有限公司
-
4 iphone7 6000 2 4 华为科技股份有限公司
-
5 ipone8 7000 2
-
6 ipone9 8800 2 ------------------------------------|
-
7 小米8 3000 3
-
8 坚果R1 3000 null
-
9 oppoR11 3000 null
-
10 一加5 3500 null
-
------------------------------------
首先有上向下,从左向右一个一个逐步进行分析
1.A表作为主表,B表作为从表,不管A表的内容是否在B表有关联对象,查询的结果是A表的所有内容都会显示,具体:
-
select phoneName ,price,companyName from phone LEFT JOIN company on phone.companyId = company.id;
-
结果:
-
vivoX9 2000 vivo科技股份有限公司
-
vivoX20 3200 vivo科技股份有限公司
-
vivoXPlay 4500 vivo科技股份有限公司
-
iphone7 6000 美国apple股份有限公司
-
ipone8 7000 美国apple股份有限公司
-
ipone9 8800 美国apple股份有限公司
-
小米8 3000 小米科技股份有限公司
-
坚果R1 3000 null
-
oppoR11 3000 null
-
一加5 3500 null
2.B表作为主表,A表作为从表,不管B表的内容是否在A表有关联对象,查询的结果是B表的所有内容都会显示
-
select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id;
-
结果:
-
vivoX9 2000 vivo科技股份有限公司
-
vivoX20 3200 vivo科技股份有限公司
-
vivoXPlay 4500 vivo科技股份有限公司
-
iphone7 6000 美国apple股份有限公司
-
ipone8 7000 美国apple股份有限公司
-
ipone9 8800 美国apple股份有限公司
-
小米8 3000 小米科技股份有限公司
-
null null 华为科技股份有限公司
3.查询出A表与B表的交集,也就是仅仅查询出A表与B表有关联记录的那几条数据
-
select phoneName ,price,companyName from phone inner JOIN company on phone.companyId =company.id;
-
结果:
-
vivoX9 2000 vivo科技股份有限公司
-
vivoX20 3200 vivo科技股份有限公司
-
vivoXPlay 4500 vivo科技股份有限公司
-
iphone7 6000 美国apple股份有限公司
-
ipone8 7000 美国apple股份有限公司
-
ipone9 8800 美国apple股份有限公司
-
小米8 3000 小米科技股份有限公司
4.A表作为主表,B表作为从表,仅仅查询出A表在B表没有关联的那几条记录
-
select phoneName ,price,companyName from phone left JOIN company on phone.companyId =company.id where company.id is null;
-
结果:
-
坚果R1 3000 null
-
oppoR11 3000 null
-
一加5 3500 null
5.B表作为主表,A表作为从表,仅仅查询出B表在B表没有关联的那几条记录
-
select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id where phone.companyId is null;
-
结果:
-
null null 华为科技股份有限公司
6.A表与B表的并集,也就是将A表与B表的记录加起来
-
select phoneName ,price,companyName from phone LEFT JOIN company on phone.companyId = company.id UNION
-
select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id;
-
结果:
-
vivoX9 2000 vivo科技股份有限公司
-
vivoX20 3200 vivo科技股份有限公司
-
vivoXPlay 4500 vivo科技股份有限公司
-
iphone7 6000 美国apple股份有限公司
-
ipone8 7000 美国apple股份有限公司
-
ipone9 8800 美国apple股份有限公司
-
小米8 3000 小米科技股份有限公司
-
坚果R1 3000 null
-
oppoR11 3000 null
-
一加5 3500 null
-
null null 华为科技股份有限公司
7.A表与B表的并集,但是除去他们共有的部分:
-
select phoneName ,price,companyName from phone left JOIN company on phone.companyId =company.id where company.id is null
-
union
-
select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id where phone.companyId is null;
-
结果:
-
坚果R1 3000 null
-
oppoR11 3000 null
-
一加5 3500 null
-
null null 华为科技股份有限公