mysql七种Join理论

 

2018年06月04日 20:48:29

阅读数:29 编辑

在sql99语法中,增加了 join这中关联表的查询,具体有left join ,right join ,inner join。这几种查询方式组合起来大概有一下七种查询方式,如图:

mysql七种Join理论

这里用手机–>所属公司来具体实践一下,先查看一下表的内容:

 
  1. 手机数据表: 所属公司数据表:

  2. ----------------------------------| ----------------------------------|

  3. id phoneName price companyId id companyName

  4. 1 vivoX9 2000 1 1 vivo科技股份有限公司

  5. 2 vivoX20 3200 1 2 美国apple股份有限公司

  6. 3 vivoXPlay 4500 1 3 小米科技股份有限公司

  7. 4 iphone7 6000 2 4 华为科技股份有限公司

  8. 5 ipone8 7000 2

  9. 6 ipone9 8800 2 ------------------------------------|

  10. 7 小米8 3000 3

  11. 8 坚果R1 3000 null

  12. 9 oppoR11 3000 null

  13. 10 一加5 3500 null

  14. ------------------------------------

首先有上向下,从左向右一个一个逐步进行分析

1.A表作为主表,B表作为从表,不管A表的内容是否在B表有关联对象,查询的结果是A表的所有内容都会显示,具体:

 
  1. select phoneName ,price,companyName from phone LEFT JOIN company on phone.companyId = company.id;

  2. 结果:

  3. vivoX9 2000 vivo科技股份有限公司

  4. vivoX20 3200 vivo科技股份有限公司

  5. vivoXPlay 4500 vivo科技股份有限公司

  6. iphone7 6000 美国apple股份有限公司

  7. ipone8 7000 美国apple股份有限公司

  8. ipone9 8800 美国apple股份有限公司

  9. 小米8 3000 小米科技股份有限公司

  10. 坚果R1 3000 null

  11. oppoR11 3000 null

  12. 一加5 3500 null

2.B表作为主表,A表作为从表,不管B表的内容是否在A表有关联对象,查询的结果是B表的所有内容都会显示

 
  1. select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id;

  2. 结果:

  3. vivoX9 2000 vivo科技股份有限公司

  4. vivoX20 3200 vivo科技股份有限公司

  5. vivoXPlay 4500 vivo科技股份有限公司

  6. iphone7 6000 美国apple股份有限公司

  7. ipone8 7000 美国apple股份有限公司

  8. ipone9 8800 美国apple股份有限公司

  9. 小米8 3000 小米科技股份有限公司

  10. null null 华为科技股份有限公司

3.查询出A表与B表的交集,也就是仅仅查询出A表与B表有关联记录的那几条数据

 
  1. select phoneName ,price,companyName from phone inner JOIN company on phone.companyId =company.id;

  2. 结果:

  3. vivoX9 2000 vivo科技股份有限公司

  4. vivoX20 3200 vivo科技股份有限公司

  5. vivoXPlay 4500 vivo科技股份有限公司

  6. iphone7 6000 美国apple股份有限公司

  7. ipone8 7000 美国apple股份有限公司

  8. ipone9 8800 美国apple股份有限公司

  9. 小米8 3000 小米科技股份有限公司

4.A表作为主表,B表作为从表,仅仅查询出A表在B表没有关联的那几条记录

 
  1. select phoneName ,price,companyName from phone left JOIN company on phone.companyId =company.id where company.id is null;

  2. 结果:

  3. 坚果R1 3000 null

  4. oppoR11 3000 null

  5. 一加5 3500 null

5.B表作为主表,A表作为从表,仅仅查询出B表在B表没有关联的那几条记录

 
  1. select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id where phone.companyId is null;

  2. 结果:

  3. null null 华为科技股份有限公司

6.A表与B表的并集,也就是将A表与B表的记录加起来

 
  1. select phoneName ,price,companyName from phone LEFT JOIN company on phone.companyId = company.id UNION

  2. select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id;

  3. 结果:

  4. vivoX9 2000 vivo科技股份有限公司

  5. vivoX20 3200 vivo科技股份有限公司

  6. vivoXPlay 4500 vivo科技股份有限公司

  7. iphone7 6000 美国apple股份有限公司

  8. ipone8 7000 美国apple股份有限公司

  9. ipone9 8800 美国apple股份有限公司

  10. 小米8 3000 小米科技股份有限公司

  11. 坚果R1 3000 null

  12. oppoR11 3000 null

  13. 一加5 3500 null

  14. null null 华为科技股份有限公司

7.A表与B表的并集,但是除去他们共有的部分:

 
  1. select phoneName ,price,companyName from phone left JOIN company on phone.companyId =company.id where company.id is null

  2. union

  3. select phoneName ,price,companyName from phone RIGHT JOIN company on phone.companyId =company.id where phone.companyId is null;

  4. 结果:

  5. 坚果R1 3000 null

  6. oppoR11 3000 null

  7. 一加5 3500 null

  8. null null 华为科技股份有限公