浅谈外连接中的on条件字句
在简单的项目中使用的一般就是内连接,可是在实际系统级项目中外连接就非经常见了。在外连接的使用中,本人发现有一个非常多人都弄不清楚的问题,关于外连接中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语句运行顺序)
最新文章
- 面试题-Stack的最小值o(1)
- 使用Linux碎解三_CentOS7搭建Lamp环境安装zabbix遇到的问题
- 【自动化测试】关于UI自动化的疑问(记录ing)
- USB设备不能用。提示Windows 无法启动这个硬件设备。 (代码 19)
- 1.7.4.1 Function Queries-函数查询
- 统计学习导论:基于R应用——第二章习题
- ubuntu sublime安装及配置
- C++中初始化和定义对象的语法,带括号与不带括号的区别
- 在应用程序中使用Xml文件
- 修改 Sublime 按快捷键 ctrl+s 自动格式化(reindent lines)的问题
- 3.Flask-SQLAlchemy
- Android 开发工具类 18_NetWorkUtil
- es6的正则扩展笔记之修饰符
- 小学四则运算APP 第一个冲刺 第八天
- Python 文件夹及文件操作
- Github Issues
- python 中变量引用问题
- VS Code 中文注释显示乱码 解决方法
- zookeeper 的日常管理
- 联想服务器X3850 X6 配置RAID5