有两句sql语句:Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3 
from a left outer join b on a.c1=b.c1 and a.c2=b.c2

Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3 
from a left outer join b on a.c1=b.c1 
where a.c2=b.c2这两个sql语句执行的结果相同吗? 

解决方案 »

  1.   

    不相同的,第2句其实相当于 select * from (Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3  from a left outer join b on a.c1=b.c1) where a.c2=b.c2举个例子:
    SQL> select * from a;C1           C2 C3
    ---------- ---- ----------
    1             2 3
    2             3 4
    3             4 5
    4             5 6SQL> select * from b;C1         C2            C3
    ---------- ---------- -----
    3          4              5
    4          5              6
    7          8              9
    8          9              0SQL> 
    SQL> Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3
      2  from a left outer join b on a.c1=b.c1 and a.c2=b.c2
      3  /C1           C2 C3         C1         C2            C3
    ---------- ---- ---------- ---------- ---------- -----
    3             4 5          3          4              5
    4             5 6          4          5              6
    2             3 4                                
    1             2 3                                SQL> 
    SQL> Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3
      2  from a left outer join b on a.c1=b.c1
      3  where a.c2=b.c2
      4  /C1           C2 C3         C1         C2            C3
    ---------- ---- ---------- ---------- ---------- -----
    3             4 5          3          4              5
    4             5 6          4          5              6
      

  2.   

    前者是在全集中进行连接,而后者是在a.c2=b.c2的条件下进行连接。
      

  3.   

    1.
    Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3
    from a left outer join b on a.c1=b.c1 and a.c2=b.c2
    解答:这一句是表a中的所有满足a.c1=b.c1且a.c2=b.c2条件的记录进行左外连接2.
    Select a.c1,a.c2,a.c3,b.c1,b.c2,b.c3
    from a left outer join b on a.c1=b.c1
    where a.c2=b.c2而这一句则是对表a中的记录先筛选出a.c2=b.c2的记录,然后再按照a.c1=b.c1的记录作左外连接所以以上两句当然意思不同!!!