设为首页 加入收藏

TOP

浅谈外连接中的on条件字句
2015-07-24 11:14:05 来源: 作者: 【 】 浏览:1
Tags:谈外 连接 条件 字句

在简单的项目中使用的一般就是内连接,但是在实际系统级项目中外连接就很常见了。在外连接的使用中,本人发现有一个很多人都弄不清楚的问题,关于外连接中on条件字句的作用。

当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:

条件在join子句:
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
结果是:
inst_no inst_name inst_no teller_no teller_name
5801 天河区 5801 0001 tom
5801 天河区 5801 0002 david
5802 越秀区
5803 白云区

条件在where子句:
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
结果是:
inst_no inst_name inst_no teller_no teller_name
5801 天河区 5801 0001 tom
5801 天河区 5801 0002 david


所以,在外连接中,on里的属性等于具体值的条件,当涉及到的属性是主表的时候,这个条件其实无法发挥筛选作用的。

或者用一种方式精确表达,对于外连接+on条件情况时,先用on里的条件筛选,再补on中条件中筛选掉的主表里的属性。(不懂的话可以看我的另一篇文章:sql语句执行顺序)

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇解决terminating the instance du.. 下一篇expdp备份缓慢问题分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)