sql left join on and 与 where
Posted 追杀秋刀鱼的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql left join on and 与 where相关的知识,希望对你有一定的参考价值。
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
ON...WHERE
select * from tb_students ts left join tb_class tc on ts.cid = tc.id where tc.classcode = \'1801\' order by ts.id
SQL执行过程:
- 生成临时表: ON条件: ts.cid = tc.id
2. 对临时表进行过滤: WHERE条件: tc.classcode = \'1801\'
ON...AND
select * from tb_students ts left join tb_class tc on ts.cid = tc.id and tc.classcode = \'1801\' order by ts.id
SQL执行过程:
- 生成临时表: ON条件: ts.cid = tc.id and tc.classcode = \'1801\' (条件不为真也会返回左表中的记录)
总结
使用LEFT JOIN时,ON...AND和ON...WHERE条件的区别如下:
- ON...WHERE:在临时表生成后,再对临时表的数据进行过滤,再返回左表。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
-
ON...AND:在临时表生成的过程时,ON中的条件不管是否为真,都将返回左表。
-
以上结果的关键原因就是LEFT JOIN,RIGHT JOIN,FULL JOIN的特殊性,不管ON上的条件是否为真都会返回LEFT或RIGHT表中的记录,FULL则具有LEFT和RIGHT的特性的并集。而INNER JOIN没这个特殊性,则条件放在ON中和WHERE中,返回的结果集是相同的。
以上是关于sql left join on and 与 where的主要内容,如果未能解决你的问题,请参考以下文章
sql中在使用left join 时 on and 和on where 的区别
LEFT JOIN ON AND 和LEFT JOIN ON WHERE区别
SQL语句中 LEFT JOIN 后 ON 和 WHERE 的区别