左连接条件与where条件的区别

Sql 查询语句应用左连接时的链接条件中经常加一些常量值在里面如:

“On a.id= b.id and b.is_del =0 and b.is_old =1” 这种条件如果加在表与表之间连接后的where条件中时有什么不一样呢?

答:其实仔细想想我们都能想到,左连接的目的是要取左边的所有数据,如果条件中右边表中的字段与左边表中的字段是一对一关系,那连接时要保证右边数据不为null,只能让”a.id = b.id and b.is_del =0,b.is_old=1”;否则即使a.id=b.id 满足条件同样右边的数据只能用null来补全,这种情况下如果左边有10条数据,右边只有7条数据完全符合条件,那结果就是有10条数据显示出来只不过有三条数据右边表中的数据是null;如果将此b.is_del = 0 and b.is_old =1 放在where后面那么就会发现结果中一共有7条数据那三条空数据已经被删除了,这就是区别。

总结一下规律:

放在on里面就是先筛选后连接,保证连接左边数据完整;放在where中就得先连接后筛选。

如果使用INNER JOIN 效果是一样的所以建议同一放在where 条件后面。

时间: 2024-10-16 04:52:31

左连接条件与where条件的区别的相关文章

数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别

join on 与 where 条件的执行先后顺序: join on 条件先执行,where条件后执行:join on的条件在连接表时过滤,而where则是在生成中间表后对临时表过滤 left join.right join.full join.inner join区别: left join:以左表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对左表无效 right join:以右表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对右表无效 full join:以左表为基准

数据库中的左连接(left join)和右连接(right join)区别

Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID 左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据. 简言之 Left Join影响到的是右边的表 Right Join select * from tbl1 Rig

mysql多表查询方法(left join(左连接),right join (右连接),inner join (内连接)的区别)

表A记录如下:  aID aNum  1 a20050111  2 a20050112  3 a20050113  4 a20050114  5 a20050115  表B记录如下:  bID bName  1 2006032401  2 2006032402  3 2006032403  4 2006032404  8 2006032408  创建这两个表SQL语句如下:  CREATE TABLE a  aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,  a

inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)区别

sql中的连接查询有inner join(内连接).left join(左连接).right join(右连接).full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同.例如我们有两张表: Orders表通过外键Id_P和Persons表进行关联. 1.inner join(内连接),在两张表进行连接查询时,只保留两张表中完全匹配的结果集. 我们使用inner join对两张表进行连接查询,sql如下: SELECT p.LastName, p.First

数据库中内连接和左连接和右连接的区别

假设有两张表: A表有四行四列数据;B表有两行两列数据;它们之间通过ID关联;假设它们之间的ID有两个相同; 则: select * from A a left (outer)  join B  b  on a.bid=b.id; 显示为:A表的四行四列全部显示,而B表满足条件的两条数据则全部显示; A. 1                A.2                      A.3                 A.4                 B.1          

左连接和右链接的区别?

左连接只影响右表,右链接只影响左表. 左连接   (left join) select *  from table1 left join tbale2 on table1.id=table2.id 这条sql语句返回结果   table1表中的数据全部返回   table2表中的数据只返回满足where条件的 右链接   (right join) select * from table1 right join table2 on table1.id=table2.id 这条sql语句返回结果  

左连接与右连接的区别

左连接只影响右表,右连接只影响左表.左连接返回左表中的全部数据,只返回右表中满足where条件的,右连接返回右表的全部数据,只返回左表满足where条件的. 左连接 (left join) select * from table1 left join tbale2 on table1.id=table2.id 这条sql语句返回结果 table1表中的数据全部返回 table2表中的数据只返回满足where条件的 右链接 (right join) select * from table1 rig

mysql之内连接,外连接(左连接,右连接),union,union all的区别

内连接,外连接,左连接,右连接,全连接 测试数据: CREATE TABLE `a_table` ( `a_id` int(11) DEFAULT NULL, `a_name` varchar(10) DEFAULT NULL, `a_part` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into a_table values(1,"老潘","总裁部"),(2,&quo

浅谈外连接中的on条件字句

在简单的项目中使用的一般就是内连接,可是在实际系统级项目中外连接就非经常见了.在外连接的使用中,本人发现有一个非常多人都弄不清楚的问题,关于外连接中on的带值条件字句的作用. 当在内连接查询中增加条件是,不管是将它增加到join子句.还是增加到where子句,其效果是全然一样的.但对于外连接情况就不同了.当把条件增加到join子句时.SQL Server.Informix会返回外连接表的所有行,然后使用指定的条件返回第二个表的行.假设将条件放到where子句中,SQL Server将会首先进行连