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

浅谈外连接中的on条件字句的更多相关文章

  1. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  2. 转:浅谈C/C++中的指针和数组(一)

    再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...

  3. 转: 浅谈C/C++中的指针和数组(二)

    转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组 ...

  4. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  5. 浅谈人脸识别中的loss 损失函数

    浅谈人脸识别中的loss 损失函数 2019-04-17 17:57:33 liguiyuan112 阅读数 641更多 分类专栏: AI 人脸识别   版权声明:本文为博主原创文章,遵循CC 4.0 ...

  6. 浅谈C++11中的多线程(三)

    摘要 本篇文章围绕以下几个问题展开: 进程和线程的区别 何为并发?C++中如何解决并发问题?C++中多线程的基本操作 浅谈C++11中的多线程(一) - 唯有自己强大 - 博客园 (cnblogs.c ...

  7. 浅谈C++11中的多线程(二)

    摘要 本篇文章围绕以下几个问题展开: 进程和线程的区别 何为并发?C++中如何解决并发问题?C++中多线程的基本操作 浅谈C++11中的多线程(一) - 唯有自己强大 - 博客园 (cnblogs.c ...

  8. 转载 浅谈C/C++中的static和extern关键字

    浅谈C/C++中的static和extern关键字 2011-04-21 16:57 海子 博客园 字号:T | T   static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.ext ...

  9. 【sql注入】浅谈sql注入中的Post注入

    [sql注入]浅谈sql注入中的Post注入 本文来源:i春秋学院 00x01在许多交流群中,我看见很多朋友对于post注入很是迷茫,曾几何,我也是这样,因为我们都被复杂化了,想的太辅助了所以导致现在 ...

随机推荐

  1. Redis位图法记录在线用户的状态

    Redis位图法记录在线用户的状态 位图 Redis官方文档对于位图的介绍如下: 位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合.由于字符串类型是二进制安全的二进制大对象,并且 ...

  2. 23. Merge k Sorted Lists[H]合并k个排序链表

    题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  3. mysql基础知识点梳理

    ##本单元目标 一.为什么要学习数据库 二.数据库的相关概念DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍MySQL产品的安装 ★MySQL服务的启动和停止 ...

  4. Super超级ERP系统---(2)基础信息管理

    这一节我我们来了解下super系统的基础信息模块有哪些功能以及怎么实现.任何功能再强大的系统,也需要基本信息来支撑.超级erp系统的基础信息主要有供应商管理,品牌管理,分类管理,商品管理几个模块构成. ...

  5. ItemArray DataRow对象的RowState和DataRowVersion属性特点

    DataTable.Rows[i].ItemArray DataTable.Rows表示所有行的集合DataTable.Rows[i]加上下标表示其中某一行DataTable.Rows[i].Item ...

  6. 爱,死亡和机器人 第十四集 齐马蓝 中文字幕(Python处理utf8文件获取想要的内容)

    处理代码 file = "a.srt" fi = open(file, mode='r') a = fi.readline() i = 1 while len(str(a)) != ...

  7. 数组、ArrayList、HashTable

    相同点:都可以存储一组数据 不同点: 1)数组,必须要先分配空间,存储数据固定 2)ArrayList,存储数据可以自由扩展 3)HashTable与ArrayList一样,但是它是有意义的,键值对形 ...

  8. Laravel 查询某天数据 whereDate

  9. Windows批量查找文件

    for /r 目录名 %i in (匹配模式1,匹配模式2) do @echo %i for /r SATA %i in (*.txt) do @echo %i D:\REY\test>for ...

  10. Maven安装和eclipse里面的配置

    一 . Maven简单介绍 Apache Maven是个项目管理和自动构建工具,基于项目对象模型(POM)的概念.       作用:完成项目的相关操作,如:编译,构建,单元测试,安装,网站生成和基于 ...