zoukankan      html  css  js  c++  java
  • 转!!left join on and 与 left join on where的区别

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

          在使用left jion时,on和where条件的区别如下:

    1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

           假设有两张表:

    表1 tab1:

    id size

    1 10

    2 20

    3 30

    表2 tab2:

    size name

    10 AAA

    20 BBB

    20 CCC


    两条SQL:
    1、select * formtab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
    2、select * formtab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

    第一条SQL的过程:

    1、中间表
    on条件: 
    tab1.size = tab2.size

    tab1.id    tab1.size   tab2.size     tab2.name

    1              10                  10              AAA

    2             20                    20             BBB

    2            20                     20              CCC

    3            30                   (null)             (null)

    2、再对中间表过滤
    where 条件:
    tab2.name=’AAA’

    tab1.id      tab1.size       tab2.size     tab2.name

    1                 10                 10             AAA

    第二条SQL的过程:

    1、中间表
    on条件: 
    tab1.size = tab2.size and tab2.name=’AAA’
    (条件不为真也会返回左表中的记录)

    tab1.id      tab1.size        tab2.size       tab2.name

    1              10                    10                  AAA

    2              20                  (null)              (null)

    3              30                   (null)                (null)

         其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/wuyun-blog/p/6231965.html
Copyright © 2011-2022 走看看