在简单的项目中使用的一般就是内连接,可是在实际系统级项目中外连接就非经常见了。在外连接的使用中,本人发现有一个非常多人都弄不清楚的问题,关于外连接中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语句运行顺序)

最新文章

  1. 面试题-Stack的最小值o(1)
  2. 使用Linux碎解三_CentOS7搭建Lamp环境安装zabbix遇到的问题
  3. 【自动化测试】关于UI自动化的疑问(记录ing)
  4. USB设备不能用。提示Windows 无法启动这个硬件设备。 (代码 19)
  5. 1.7.4.1 Function Queries-函数查询
  6. 统计学习导论:基于R应用——第二章习题
  7. ubuntu sublime安装及配置
  8. C++中初始化和定义对象的语法,带括号与不带括号的区别
  9. 在应用程序中使用Xml文件
  10. 修改 Sublime 按快捷键 ctrl+s 自动格式化(reindent lines)的问题
  11. 3.Flask-SQLAlchemy
  12. Android 开发工具类 18_NetWorkUtil
  13. es6的正则扩展笔记之修饰符
  14. 小学四则运算APP 第一个冲刺 第八天
  15. Python 文件夹及文件操作
  16. Github Issues
  17. python 中变量引用问题
  18. VS Code 中文注释显示乱码 解决方法
  19. zookeeper 的日常管理
  20. 联想服务器X3850 X6 配置RAID5

热门文章

  1. [HTML5] 新标签解释及用法
  2. 从有约束条件下的凸优化角度思考神经网络训练过程中的L2正则化
  3. 跨域解决方案之JSONP,通过借助调用百度搜索的API了解跨域案例
  4. Linux下JDK Tomcat MySQL基本环境搭建
  5. B - Guess a number!
  6. mysql和eclipse连接jdbc驱动配置
  7. GoogleMap 获取自己的数字证书API key的步骤
  8. Ubuntu14.04引导菜单修复
  9. 杭电2053 WA
  10. 团体程序设计天梯赛-练习集-L1-024. 后天