数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表: 表1 tab1: id size 1 10 2 20 3 30 表2 tab2: size name 10 AAA 20 BBB 20 CCC 两条SQL: 1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’ 2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’) 第一条SQL的过程: 1、中间表 on条件: tab1.size = tab2.size tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA 2 20 20 BBB 2 20 20 CCC 3 30 (null) (null) 2、再对中间表过滤 where 条件: tab2.name=’AAA’ tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA 第二条SQL的过程: 1、中间表 on条件: tab1.size = tab2.size and tab2.name=’AAA’ (条件不为真也会返回左表中的记录) tab1.id tab1.size tab2.size tab2.name 1 10 10 AAA 2 20 (null) (null) 3 30 (null) (null) 其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
REFS:https://blog.csdn.net/u010368749/article/details/59482870
相关推荐
left_join_on_and与left_join_on_where的区别
Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;
本篇文章是对Oracle的left join中on和where的区别进行了详细的分析介绍,需要的朋友参考下
left join 过滤条件写在on后面和写在where 后面的区别
主要给大家介绍了关于MySQL left join操作中on和where放置条件的区别的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
inner join、 left join 、right join、 outer join之间的区别
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1....
left join right join inner join 区别和联系
SQL语句left join/right join/inner join 的用法比较 SQL语句left join/right join/inner join 的用法比较
ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行。 如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据 在匹配阶段 WHERE 子句的条件都不会被使用...
比较实用的方法,已经用到项目里,很好用的一个方法
主要介绍了mysql中left join设置条件在on与where时的用法区别,结合实例形式分析了mysql中left join设置条件在on与where时的相关用法区别与操作注意事项,需要的朋友可以参考下
SQL中的left outer join,inner join,right outer join用法详解
LINQ to datable实现Left join right join full join VB2010源码
Left join优化规则的研究 一、概述 对于left join的优化,是应用开发人员、数据库内核开发人员关注的问题之一。 应用开发人员关注是因为:并不是每个数据库的内核都支持left join的内部转化,这时候需要应用...
(Left join , Right Join, Inner Join)用法详解,对Left join , Right Join, Inner Join完全掌握,由浅入深,真正领悟。
from 多张表 等于 left join 其他表.