mysql七种Join理论

本文详细介绍了SQL99标准中的Join查询方式,包括Left Join、Right Join和Inner Join等,并通过实例展示了如何使用这些查询方式获取不同类型的关联数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

2018年06月04日 20:48:29

阅读数:29 编辑

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

46bc7724769e4c22a80e64b38bc39f75-join.png

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

 
  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 华为科技股份有限公

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值