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的区别

SQL文摘:sql(join中on与where区别)

SQL JOIN 中 on 与 where 的区别

SQL JOIN 中 on 与 where 的区别

在 SQL/MySQL 中,join 语句中的“ON”和“WHERE”有啥区别?