sqlserver(二):sql 左外连接on条件和where条件处细节(包括99语法和92语法数据对比)

sql 左外连接on条件和where条件处细节(包括99语法和92语法数据对比)

转载2015-04-15 13:10:42

标签:sql左外连接on和where

前提:测试用的两张表的名称分别为temp99和temp999,表结果相同,两张表的数据不同,如下图所示:​

表结构

temp99

temp999

1、select * from temp99 a left join temp999 b on

a.t_itemcode=b.t_itemcode

and a.t_yearmonth=b.t_yearmonth and a.t_yearmonth='201403';

结果集1

 

2、select * from temp99 a left join temp999 b on

a.t_itemcode=b.t_itemcode

and a.t_yearmonth=b.t_yearmonth where a.t_yearmonth='201403';

注:查询1和查询2的结果集不同,差别只是在于加红色的部分不同,对于第一种情况,加红色and后面的条件,仍然属于左外连接的范畴。简言之,对于左外连接,从on后面的条件开始一直到where子句出现之前之间的连接条件,左表不管连接条件是什么都全部显示,右表只显示符合连接条件的记录,对左表的记录在右表中没有符合连接条件的记录,右表予以补空。可是,一旦连接条件on连接条件结束,从where子句开始后的过滤条件,就不再遵循左表全部显示,右表没有符合的补空显示的规则。where子句后的条件是过滤条件,是在整个左外连接的结果集基础上进行再次过滤,此时已经和左外连接无关。(以上都是个人理解,偏差之处,望请指正!)

 

3、select * from temp99 a,temp999 b where 1=1

and a.t_itemcode=b.t_itemcode(+)

and a.t_yearmonth=b.t_yearmonth(+)

and a.t_yearmonth='201403'

结果集3

注:结果集3和结果集2相同,两个sql作用等效。只不过,结果集3使用的是92语法的左外连接。

转载自:http://blog.sina.com.cn/s/blog_9d12d07f0102vk4r.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值