SQL JOIN 中 on 与 where 的区别
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL JOIN 中 on 与 where 的区别相关的知识,希望对你有一定的参考价值。
常用的join
- left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
- right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
- inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
- full join : 外连接,返回两个表中的行:left join + right join。
- cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
查询demo
先复习下,sql的执行顺序
from .. on.. join.. where .. group by .. having ..select distinct ...order by .. limit..
在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
比如使用left join
在join on
条件中我们下意识的会认为,会先通过on
去筛选各自表里的数据,但是当使用left join
的时候,左表的筛选条件会发现不起作用,右表的筛选条件才会生效,不过右表筛选后结果集和左表对不上的时候,因为left join
会导致左表连接的右表的值都是null
,如上图中第三个sql的结果.
而where
条件是对生成的临时表做筛选,即对临时表结果集做筛选,所以在使用left join
的时候即使在join on
里带上了左表的条件,在where
中还是需要再写一遍条件,因为左表的on
条件是不会生效的.
right join
也是一样的原理
以上是关于SQL JOIN 中 on 与 where 的区别的主要内容,如果未能解决你的问题,请参考以下文章
sql中 INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN 中 ON与Where的区别
sql中 INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN 中 ON与Where的区别