赞
踩
score表:
结论:不管on后面是什么条件,都会返回左表所有行数据,然后再根据on 后面的条件视情况返回右表字段的数据。
举栗:
2.1)and 1= 1,这个条件为真,所以返回左表所有数据,右表返回所有满足条件的数据。
2.2)and 1=0,这个条件为否,但是不影响返回左表所有的值,只不过右表全部返回NULL
2.3)即使少了连接条件,左表也返回所有数据
2.4)限定左表字段条件。先左表返回所有数据,连接右表的时候,左表先过滤class_name=语文的数据,然后和右表关联,然后右表返回满足条件的数据。
2.5)限定右表字段条件。左表返回所有数据,右表先过滤出Score=65的数据,再与左表关联
3)使用on过滤数据和在where里面过滤数据区别
- 在on后面加过滤条件
- 使用where过滤条件
可以看出区别:
使用on过滤数据:先返回左表所有数据(因为左连接要返回左表所有数据),然后过滤A.class_name=语文的数据,最后再用过滤后的左表数据与右边进行关联。也即先过滤数据,再关联。
使用where过滤数据:是先关联查询,然后再对结果进行过滤。
4)重复数据现象
关联字段,左右表存在1对多的情况的时候,特别注意重复数据,如下图:class_id 在右表有两条数据的class_id都等于1。
此时关联查询结果,左表部分会有重复数据,如下图:
| 三 . 右连接RIGHT JOIN RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表没有匹配到,那么左表的字段返回NULL。 | 四 . 全连接FULL JOIN FULL JOIN 返回左右表所有数据。如果其中一个表的数据行在另一个表中没有匹配的行,那么字段返回NULL。 | 五 . 内连接INNER JOIN INNER JOIN返回的是左右表交集部分的数据(ps:如果JOIN 前面不加LEFT、RIGHT这些,那么JOIN 等于INNER JOIN)参考资料
https://www.cnblogs.com/abclife/p/9559658.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。