SQL中JOIN的用法

SELECT a.symbol , a.sname , b.tdate , b.tclose

FROM a , b

WHERE a.symbol = b.symbol

 

 

上面的代碼用WHERE關鍵詞指明瞭兩個表之間的聯合關係。

如果改寫爲JOIN關鍵字,那麼代碼如下:

 

SELECT a.symbol , a.sname , b.tdate , b.tclose

FROM securitycode a

      JOIN dayquote b

     ON a.symbol = b.symbol

 

 現在對JOIN的用法應該有個大概瞭解了,JOIN的具體用法和語法介紹如下:

 先假設有表ab如下:

           a                                                             b

----------------------                     --------------------------------

|  symbol  |  sname  |                 |   symbol  |  tdate  |  tclose  |

--------------------------                 -------------------------------------

|       A     |      B     |                 |       A      |     C    |     D      |

|       G     |      H     |                 |       X      |     E    |     F      |

--------------------------                 ------------------------------------

 

內聯接:

 

SELECT a.symbol , a.sname , b.tdate , b.tclose

FROM a

      INNER JOIN b

     ON a.symbol = b.symbol

其中INNER關鍵字可以省略。

此語句只有在表ab中都有匹配行時,才返回。

所以本例中返回結果爲:

            symbol   sname   tdate   tclose

                A          B          C        D        --這一行即滿足a.symbol = b.symbol

 

外聯接:

SELECT a.symbol , a.sname , b.tdate , b.tclose

FROM a

      RIGHT | LEFT | FULL OUTER JOIN b

     ON a.symbol = b.symbol

其中OUTER關鍵詞可以省略。

RIGHT JOIN:當右表格(即表b)中的行在左表中沒有匹配行時,也返回。返回的記錄中,選擇的左表的列的內容爲NULL

    所以本例中返回結果爲:

          symbol   sname   tdate   tclose

               A          B          C        D        --這一行即滿足a.symbol = b.symbol

              null       null         E        F        --這一行裏,對應的b.symbol沒有在表a中找到相同的a.symbol

 

LEFT JOIN:當左表格(即表a)中的行在右表中沒有匹配行時,也返回。返回的記錄中,選擇的右表的列的內容爲NULL

    所以本例中返回結果爲:

         symbol   sname   tdate   tclose

               A          B          C       D        --這一行即滿足a.symbol = b.symbol

               G          H         null    null       --這一行裏,對應的a.symbol沒有在表b中找到相同的b.symbol

 

FULL JOIN:可以把它理解爲LFETRIGHT的集合,某表中某一行在另一表中無匹配行,則相應列的內容爲NULL

    所以本例中返回結果爲:

         symbol   sname   tdate   tclose

               A          B          C       D        --這一行即滿足a.symbol = b.symbol

               G          H         null    null       --這一行裏,對應的a.symbol沒有在表b中找到相同的b.symbol

              null       null         E        F       --這一行裏,對應的b.symbol沒有在表a中找到相同的a.symbol

               A          B          C        D        --這一行即滿足a.symbol = b.symbol

 

 

交叉聯接:

SELECT a.*,b.*

FROM a

      CROSS JOIN b

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

也就是相當於兩個表中的所有行進行排列組合。

若表aX行,表bY行,則將返回XY行記錄。

    所以本例中返回結果爲:

         symbol   sname   tdate   tclose

               A          B          C       D

               G          H          C       D

               A          B          E       F

               G          H          E       F

 

僅供參考,如果有不對的地方,請指出。

 

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