当前位置:   article > 正文

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

left join 和 子查询的效率
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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/793013
推荐阅读
相关标签
  

闽ICP备14008679号