Mysql查询知识点-----where和on的区别

前言:

1、在内部连接时on和where的作用是可以认为是一样的
2、非内部连接中,on用来连接两个表,只的是连接的条件,在内部连接时,可以省略on,此时它表示的是两个表的笛卡尔积;使用on连接后,mysql会生成一张临时表,而where就是在临时表的基础上,根据where子句来筛选出符合条件的记录,因此where是用来筛选的

内部连接(inner join)

inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
说明:join默认为inner join,当为内部连接时,on和where的作用可以看做是一样的

select * from x   join y  on x.? = y.?;

select * from x ,y where x.? = y.?;

非内部连接(left join、right join、full join等)

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

关键字 on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用 left jion 时,on 和 where 条件的区别如下:
1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

select * from  t1 left join t2 on t1.x = t2.x where t2.x = 'x'';

案例

后续补充

猜你喜欢

转载自blog.csdn.net/weixin_43743711/article/details/128309057
今日推荐