數據庫關聯

面試時對於關聯的提問是必不可少的,下面就簡單梳理一下關聯,希望能夠幫助大家。

關聯的類型:

Left Join (左連接):左邊爲主表,根據關聯條件匹配右表,取不到右表的記錄則右表相關字段爲null,左表全部返回

Right Join(右鏈接):右邊爲主表,根據關聯條件匹配左表,取不到左表的記錄則左表相關字段爲null,左表全部返回

Inner Join(內鏈接):取兩張表的交集,能關聯上則返回

Full Join(全鏈接):兩張表的記錄全部返回,類似於左表關聯合並右表關聯,然後去重。

Cross Join(笛卡爾積):一張表的每一條記錄都和另一張表的每條記錄關聯

上圖:

Table_A       Table_B  
ID NAME GENDER   ID AMT
A001 Tony M   A001 1000
A002 Abby F   A002 500
A003 Alice F   A003 200
A004 John M   B001 700

Left Join (左連接):

   SELECT  A.ID
                  ,A.NAME
                   ,A.GENDER
                   ,B.AMT
       FROM  TABLE_A A
LEFT JOIN  TABLE_B B
             ON  A.ID=B.ID   

ID NAME GENDER AMT
A001 Tony M 1000
A002 Abby F 500
A003 Alice F 200
A004 John M  

Right Join(右鏈接)

     SELECT  B.ID
                    ,A.NAME
                     ,A.GENDER
                     ,B.AMT
         FROM  TABLE_A A
RIGHT JOIN  TABLE_B B
               ON  A.ID=B.ID

ID NAME GENDER AMT
A001 Tony M 1000
A002 Abby F 500
A003 Alice F 200
B001     700

 

Inner Join(內鏈接):

     SELECT  A.ID
                    ,A.NAME
                     ,A.GENDER
                     ,B.AMT
         FROM  TABLE_A A
INNER JOIN  TABLE_B B
               ON  A.ID=B.ID

ID NAME GENDER AMT
A001 Tony M 1000
A002 Abby F 500
A003 Alice F 200


Full Join(全鏈接):

     SELECT  A.ID
                    ,A.NAME
                     ,A.GENDER
                    , B.ID
                    ,B.AMT
         FROM  TABLE_A A
   Full JOIN  TABLE_B B
             ON  A.ID=B.ID

ID NAME GENDER ID AMT
A001 Tony M A001 1000
A002 Abby F A002 500
A003 Alice F A003 200
A004 John M    
      B001 700

 

Cross Join(笛卡爾積):不用寫關聯條件

     SELECT  B.ID
                    ,A.NAME
                     ,A.GENDER
                     ,B.AMT
         FROM  TABLE_A A
CROSS JOIN  TABLE_B B

ID NAME GENDER ID AMT
A001 Tony M A001 1000
A001 Tony M A002 500
A001 Tony M A003 200
A001 Tony M B001 700
A002 Abby F A001 1000
A002 Abby F A002 500
A002 Abby F A003 200
A002 Abby F B001 700
A003 Alice F A001 1000
A003 Alice F A002 500
A003 Alice F A003 200
A003 Alice F B001 700
A004 John M A001 1000
A004 John M A002 500
A004 John M A003 200
A004 John M B001 700

當左聯接或右鏈接的關聯條件爲恆成立比如 ON 1=1時,那麼此時它們和笛卡爾積效果是一樣的。

面試題來了:

Q1:表A爲2行3列,表B爲3行2列,做笛卡爾積生成幾行幾列(列出所有字段)?

A1:做CROSS JOIN時,生成的結構爲行數相乘列數相加,所以生成6行5列。

Q2:表A爲M行,表B爲N行,做左聯接生成幾行?

A2:首先要看關聯條件,若右表的關聯條件爲主鍵時,則生成M行,若右表的關聯條件爲非主鍵時,則生成最少爲M行,最多爲M*N行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章