Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          sql之left join、right join、inner join的區別

          內連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的行。這種連接形式在許多情況下是非常有用的。外連接只能用于兩個表中。
          在 Ansi 語法形式中,包含下列三種外連接關鍵字:

            ◆Left Outer Join 包含了左表中的全部行(表達式中第一個表)

            ◆Right Outer Join 包括了右表中的全部行(表達式中第二個表)

            ◆Full Outer Join 包括了左表和右表中所有不滿足條件的行

            在 SQL Server 連接語法形式中,包括下列兩種外連接運算符:

            ◆* = 包含了左表中的全部行(表達式中第一個表)

            ◆= * 包括了右表中的全部行(表達式中第二個表)

            左外連接和右連接都可以產生同樣的結果,關鍵是看表達式中出現的前后順序。
          舉例如下:
          --------------------------------------------
          表A記錄如下:
          aID     aNum
          1     a20050111
          2     a20050112
          3     a20050113
          4     a20050114
          5     a20050115

          表B記錄如下:
          bID     bName
          1     2006032401
          2     2006032402
          3     2006032403
          4     2006032404
          8     2006032408

          --------------------------------------------
          1.left join
          sql語句如下:
          select * from A
          left join B
          on A.aID = B.bID

          結果如下:
          aID     aNum     bID     bName
          1     a20050111    1     2006032401
          2     a20050112    2     2006032402
          3     a20050113    3     2006032403
          4     a20050114    4     2006032404
          5     a20050115    NULL     NULL

          (所影響的行數為 5 行)
          結果說明:
          left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
          換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).
          B表記錄不足的地方均為NULL.
          --------------------------------------------
          2.right join
          sql語句如下:
          select * from A
          right join B
          on A.aID = B.bID

          結果如下:
          aID     aNum     bID     bName
          1     a20050111    1     2006032401
          2     a20050112    2     2006032402
          3     a20050113    3     2006032403
          4     a20050114    4     2006032404
          NULL     NULL     8     2006032408

          (所影響的行數為 5 行)
          結果說明:
          仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.
          --------------------------------------------
          3.inner join
          sql語句如下:
          select * from A
          innerjoin B
          on A.aID = B.bID

          結果如下:
          aID     aNum     bID     bName
          1     a20050111    1     2006032401
          2     a20050112    2     2006032402
          3     a20050113    3     2006032403
          4     a20050114    4     2006032404

          結果說明:
          很明顯,這里只顯示出了 A.aID = B.bID的記錄.這說明inner join并不以誰為基礎,它只顯示符合條件的記錄.
          --------------------------------------------
          注:
          LEFT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中并沒有相符

          posted on 2009-10-21 13:50 找個美女做老婆 閱讀(1116) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 罗平县| 江口县| 德令哈市| 商城县| 宁德市| 卓尼县| 徐州市| 镇远县| 耿马| 莱芜市| 泸西县| 崇文区| 宝丰县| 德江县| 兴安盟| 莱芜市| 高青县| 荣成市| 会昌县| 修水县| 克什克腾旗| 云安县| 汉阴县| 黄平县| 龙门县| 长汀县| 峨边| 渝中区| 荣昌县| 汝城县| 获嘉县| 绥滨县| 德令哈市| 芜湖县| 井研县| 定州市| 临邑县| 新龙县| 阿合奇县| 灵石县| 南昌县|