天天看點

SQL 内連接配接,左外連接配接,右外連接配接,全連接配接

連接配接條件可在   FROM   或   WHERE   子句中指定,建議在   FROM   子句中指定連接配接條件。WHERE   和   HAVING   子句也可以包含搜尋條件,以進一步篩選連接配接條件所選的行。   

連接配接可分為以下幾類:     

内連接配接(典型的連接配接運算,使用像   =   或   <>   之類的比較運算符)。包括相等連接配接和自然連接配接。    

内連接配接使用比較運算符根據每個表共有的列的值比對兩個表中的行。例如,檢索   students   和   courses   表中學生辨別号相同的所有行。   

外連接配接。外連接配接可以是左向外連接配接、右向外連接配接或完整外部連接配接。    

在   FROM   子句中指定外連接配接時,可以由下列幾組關鍵字中的一組指定:   

LEFT   JOIN   或   LEFT   OUTER   JOIN。    

左向外連接配接的結果集包括   LEFT   OUTER   子句中指定的左表的所有行,而不僅僅是連接配接列所比對的行。如果左表的某行在右表中沒有比對行,則在相關聯的結果集行中右表的所有選擇清單列均為空值。   

RIGHT   JOIN   或   RIGHT   OUTER   JOIN。    

右向外連接配接是左向外連接配接的反向連接配接。将傳回右表的所有行。如果右表的某行在左表中沒有比對行,則将為左表傳回空值。   

FULL   JOIN   或   FULL   OUTER   JOIN。    

完整外部連接配接傳回左表和右表中的所有行。當某行在另一個表中沒有比對行時,則另一個表的選擇清單列包含空值。如果表之間有比對行,則整個結果集行包含基表的資料值。   

交叉連接配接。    

交叉連接配接傳回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉連接配接也稱作笛卡爾積。   

例如,下面的内連接配接檢索與某個出版商居住在相同州和城市的作者:  

  USE   pubs  

  SELECT   a.au_fname,   a.au_lname,   p.pub_name  

  FROM   authors   AS   a   INNER   JOIN   publishers   AS   p  

        ON   a.city   =   p.city  

        AND   a.state   =   p.state  

  ORDER   BY   a.au_lname   ASC,   a.au_fname   ASC   

FROM   子句中的表或視圖可通過内連接配接或完整外部連接配接按任意順序指定;但是,用左或右向外連接配接指定表或視圖時,表或視圖的順序很重要。有關使用左或右向外連接配接排清單的更多資訊,請參見使用外連接配接。     

例子:  

  a表     id   name     b表     id   job   parent_id  

              1   張3                   1     23     1  

              2   李四                 2     34     2  

              3   王武                 3     34     4  

  a.id同parent_id   存在關系  

  内連接配接  

  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id  

  結果是    

  1   張3                   1     23     1  

  2   李四                2     34     2  

  左連接配接   

  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id  

  結果是    

  1   張3                   1     23     1  

  2   李四                 2     34     2  

  3   王武                 null   

  右連接配接  

  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id  

  結果是    

  1   張3                   1     23     1  

  2   李四                 2     34     2  

  null                 3     34     4  

  完全連接配接   

  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  結果是    

  1   張3                   1     23     1  

  2   李四                 2     34     2  

  null                 3     34     4  

  3   王武                 null