zoukankan      html  css  js  c++  java
  • 浅谈外连接中的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语句运行顺序)

  • 相关阅读:
    iOS开发——C篇&数组与指针
    iOS开发——C篇&动态内存分配
    助教工作总结
    助教周报(第二轮)— 王茹瑶,林泽龙,范青青
    助教周报(第一轮)---王茹瑶
    UML总结--熊熊的奇幻旅程
    今天是一个睡前的小故事(是谁要给的大饼)
    我与oracle的爱恨情仇(第一章)
    第三次结对作业(王茹瑶+柯智腾)
    第二次结对作业(王茹瑶+柯智腾)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7083310.html
Copyright © 2011-2022 走看看