SQL JOIN 中 on 与 where 的区别

常用的join

  • left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
  • right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
  • inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
  • full join : 外连接,返回两个表中的行:left join + right join。
  • cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

查询demo
SQL JOIN 中 on 与 where 的区别_第1张图片

先复习下,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也是一样的原理

你可能感兴趣的:(Mysql)