left join 和子查询效率_SQL总结连接查询

SQL查询语句,连接查询知识总结。 5894625ec0fbb75b9565d77aa81d8f36.png |  一 . 有哪些连接查询 连接查询包括外连接:LEFT JOIN、RIGHT JOIN、FULL JOIN,以及内连接:INNER JOIN。本文重点总结LEFT JOIN,其他连接查询不一一举例。 |  二 . 左连接LEFT JOIN 1)原理: LEFT JOIN返回左表的全部行右表满足ON条件的行,如果左表的数据在右表没有匹配到,那么右表字段返回NULL。

3041d90c8476849d0b78a88a60de41d2.png

2)测试举例: class表:

d7fd78ad5fb6e6f3313cafb1bd901763.png

score表:

39fe4db69e45e9e4c3384c32559e8b51.png

结论:不管on后面是什么条件,都会返回左表所有行数据,然后再根据on 后面的条件视情况返回右表字段的数据。

举栗:

2.1)and 1= 1,这个条件为真,所以返回左表所有数据,右表返回所有满足条件的数据。

4dcfd0c42bcd07afb2123adf12d7684b.png

2.2)and 1=0,这个条件为否,但是不影响返回左表所有的值,只不过右表全部返回NULL

169bf6a86f865e0907ba65beb8f2df59.png

2.3)即使少了连接条件,左表也返回所有数据

1175e8f36b2300cd818809c2a590dee6.png

2.4)限定左表字段条件。先左表返回所有数据,连接右表的时候,左表先过滤class_name=语文的数据,然后和右表关联,然后右表返回满足条件的数据。

c8ea4ea07020e2103b3452e5251cc31b.png

2.5)限定右表字段条件。左表返回所有数据,右表先过滤出Score=65的数据,再与左表关联

891d22c52bd75d9787851a832bc4c063.png

3)使用on过滤数据和在where里面过滤数据区别

- 在on后面加过滤条件

09973b1caf34da4e564d39c929eb9054.png

- 使用where过滤条件

f846c3af0ba54479c2ed8ad10973d883.png

可以看出区别:

  • 使用on过滤数据:先返回左表所有数据(因为左连接要返回左表所有数据),然后过滤A.class_name=语文的数据,最后再用过滤后的左表数据与右边进行关联。也即先过滤数据,再关联

  • 使用where过滤数据:是先关联查询,然后再对结果进行过滤

4)重复数据现象

关联字段,左右表存在1对多的情况的时候,特别注意重复数据,如下图:class_id 在右表有两条数据的class_id都等于1。

cadb7e5eec328cd918b5241ee26ced91.png

此时关联查询结果,左表部分会有重复数据,如下图:

9b0cf31148774a7013d938097accad50.png

|  三 . 右连接RIGHT JOIN RIGHT JOIN返回右表的全部行左表满足ON条件的行,如果右表的行在左表没有匹配到,那么左表的字段返回NULL。

0d87da5b485da9b2efccbd9e5460c3fd.png

|  四 . 全连接FULL JOIN FULL JOIN 返回左右表所有数据。如果其中一个表的数据行在另一个表中没有匹配的行,那么字段返回NULL。

a62150f92f41fd1183292e92521ebf43.png

|  五 . 内连接INNER JOIN INNER JOIN返回的是左右表交集部分的数据(ps:如果JOIN 前面不加LEFT、RIGHT这些,那么JOIN 等于INNER JOIN)

2958d057889cc89f3d9fe199e30efb4b.png

参考资料

https://www.cnblogs.com/abclife/p/9559658.html

fa117a6ff10119c37076d63dc7d3cc1b.png
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值