select A.*,B.NAME from a1 A left join b2 B ON (A.ID = B.ID)select A.*,B.NAME from a1 A,b1 B where (A.ID = B.ID)
这连两句有什么差别吗?

解决方案 »

  1.   

    左连接(left join),以符合where 条件的左右表为基础,从右表找出符合条件的记录与左表匹配,不管是否找得着,均不影响左表符合where条件的记录的输出。
    联合查询,可以视作join,左表和右表都均满足条件才会输出
    如上例的左查询,由于没有where条件过滤,那么将输出A表全部记录,B表无对应记录的为NULL
      

  2.   

    涉及到条件不匹配补空值的问题举个例子
    SQL> select * FROM a;        ID      VALUE
    ---------- ----------
             1        100
             2        200
             4        400
             5        500SQL> select * FROM b;        ID      VALUE
    ---------- ----------
             1        100
             2       1000
             3        500
             5        100
             6        600SQL> select a.*,b.value from a left join b on a.id=b.id;        ID      VALUE      VALUE
    ---------- ---------- ----------
             1        100        100
             2        200       1000
             5        500        100
             4        400 SQL> select a.*,b.value from a join b on a.id=b.id;        ID      VALUE      VALUE
    ---------- ---------- ----------
             1        100        100
             2        200       1000
             5        500        100SQL> 你可以查看Oracle的链接这一块,左右链接,内连接,自连接。。
      

  3.   

    select A.*,B.NAME from a1 A,b1 B where (A.ID = B.ID)
    等效于“内连接”
    select A.*,B.NAME from a1 A inner join b2 B ON (A.ID = B.ID)左连接与内连接的区别上面都讲了,不再赘述