<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tbwshc

    SQL的內連接、外連接、左連接、右連接、全連接【轉】

    從兩個或更多個表中組合數(shù)據(jù)的過程稱為連接表。數(shù)據(jù)庫管理程序從指定的表中形成行的所有組合。對于每個組合,它都測試連接條件。連接條件是帶有一些約束的搜索條件。有關約束的列表,參考 SQL Reference。
      

      注意:連接條件涉及的列的數(shù)據(jù)類型不必相同;然而,這些數(shù)據(jù)類型必須相容。計算連接條件的方式與計算其他搜索條件的方式相同,并且使用相同的比較規(guī)則。
      
      如果未指定連接條件,則返回在 FROM 子句中列出的表中行的所有組合,即使這些行可能完全不相關。該結果稱為這兩個表的交叉積。
      
      本節(jié)中的示例基于下面兩個表。這兩個表只是樣本數(shù)據(jù)庫中表的簡化形式,在樣本數(shù)據(jù)庫中并不存在。這tb兩個表一般用來概述關于連接的重點。 SAMP_STAFF 列出未作為合同工雇用的雇員的姓名以及這些雇員的職務說明,而 SAMP_PROJECT 則列出雇員(合同工和全職人員)的姓名以及這些雇員所參與的項目。
      
      這些表如下:
      
      圖 5. SAMP_PROJECT 表
      
       sql入門:連接(圖一)
      
      圖 6. SAMP_STAFF 表
      
       sql入門:連接(圖二)
      
      下列示例產(chǎn)生兩個表的交叉積。因未指定連接條件,所以給出了行的所有組合:
      
       SELECT SAMP_PROJECT.NAME,
          SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT, SAMP_STAFF
      
      此語句產(chǎn)生下列結果:
      
       sql入門:連接(圖三)
      
      兩個主要的連接類型是內連接和外連接。到目前為止,所有示例中使用的都是內連接。tb內連接只保留交叉積中滿足連接條件的那些行。如果某行在一個表中存在,但在另一個表中不存在,則結果表中不包括該信息。
      
      下列示例產(chǎn)生兩個表的內連接。該內連接列出分配給某個項目的全職雇員信息:
      
       SELECT SAMP_PROJECT.NAME,
          SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT, SAMP_STAFF
        WHERE SAMP_STAFF.NAME = SAMP_PROJECT.NAME
      
      或者,也可以指定如下內連接:
      
       SELECT SAMP_PROJECT.NAME,
          SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT INNER JOIN SAMP_STAFF
         ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
      
      結果是:
      
       sql入門:連接(圖四)
      
      注意:該內連接的結果由右表和左表中姓名列的值匹配的行組成- 'Haas' 和 'Thompson' 都包括在列出所有全職雇員的 SAMP_STAFF 表中以及列出分配給某個項目的專職和合同雇員的 SAMP_PROJECT 表中。
      
      外連接是內連接和左表和/或右表中未包括內連接中的那些行的并置。當對兩個表執(zhí)行外連接時,可任意將一個表指定為左表而將另一個表指定為右表。外連接有三種類型:
      
      
      左外連接包括內連接和左表中未包括在內連接中的那些行。
      
      右外連接包括內連接和右表中未包括在內連接中的那些行。
      
      全外連接包括內連接以及左表和右表中未包括在內連接中的行。
      使用 SELECT 語句來指定要顯示的列。在 FROM 子句中,列出后跟關鍵字 LEFT OUTER JOIN、RIGHT OUTER JOIN 或 FULL OUTER JOIN 的第一個表的名稱。接著需要指定后跟 ON 關鍵字的第二個表。在 ON 關鍵字后面,指定表示要連接的表之間關系的連接條件。
      
      在下列示例中,將 SAMP_STAFF 指定為右表,而 SAMP_PROJECT 則被指定為左表。通過使用 LEFT OUTER JOIN,列出所有全職和合同雇員(在 SAMP_PROJECT 中列出)的姓名和項目編號,如果是全職雇員(在 SAMP_STAFF 中列出),還列出這些雇員的職位:
      
       SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
          SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT LEFT OUTER JOIN SAMP_STAFF
         ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
      
      此語句產(chǎn)生下列結果:
      
       sql入門:連接(圖五)
      
      所有列中都具有值的那些行是該內連接的結果。這些都是滿足連接條件的行: 'Haas' 和 'Thompson' 既在 SAMP_PROJECT(左表)中列出又在 SAMP_STAFF(右表)中列出。對于不滿足連接條件的行,右表的列上出現(xiàn)空值: 'Lutz' 和 'Walker' 都是在 SAMP_PROJECT 表中列出的合同雇員,因而未在 SAMP_STAFF 表中列出。注意:左表中的所有行都包括在結果集中。
      
      在下一個示例中,將 SAMP_STAFF 指定為右表而 SAMP_PROJECT 則被指定為左表。通過使用 RIGHT OUTER JOIN 列出所有專職雇員(在 SAMP_STAFF 中列出)的姓名和工作職位,如果將這些雇員分配給了某個項目(在 SAMP_PROJECT 中列出),還列出他們的項目編號:
      
       SELECT SAMP_PROJECT.NAME,
          SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT RIGHT OUTER JOIN SAMP_STAFF
         ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
      
      結果為:
      
       sql入門:連接(圖六)
      
      象在左外連接中一樣,所有列中都具有值的那些行是內連接的結果。這些都是滿足連接條件的行: 'Haas'和'Thompson'既在 SAMP_PROJECT(左表)中列出又在 SAMP_STAFF(右表)中列出。對于不滿足連接條件的行,右表的列上出現(xiàn)空值: 'Lucchessi'和'Nicholls'都是未分配項目的專職雇員。雖然他們在 SAMP_STAFF 中列出,但未在 SAMP_PROJECT 中列出。注意:右表中的所有行都包括在結果集中。
      
      下一個示例對 SAMP_PROJECT 表和 SAMP_STAFF 表使用 FULL OUTER JOIN。該示例列出所有專職雇員(包括未分配項目的雇員)和合同雇員的姓名:
      
       SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
          SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT FULL OUTER JOIN SAMP_STAFF
         ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
      
      結果為:
      
      sql入門:連接(圖七)
      
      此結果包括左外連接、右外連接以及內連接。列出所有專職雇員和合同雇員。正如左外連接和右外連接一樣,對于不滿足連接條件的值,相應列中出現(xiàn)空值。 SAMP_STAFF 和 SAMP_PROJECT 中的每一行都包括在結果集中。

    SQL語句實例:
    (1) 右連接

         select * from ry_jbxx, ry_rxzp where ry_jbxx.gmsfhm(+) = ry_rxzp.gmsfhm

         等價

         select * from ry_jbxx right OUTER JOIN ry_rxzp on ry_jbxx.gmsfhm = ry_rxzp.gmsfhm

    (2) 左連接

          select * from ry_jbxx, ry_rxzp where ry_jbxx.gmsfhm = ry_rxzp.gmsfhm(+)

          等價

         select * from ry_jbxx LEFT OUTER JOIN ry_rxzp on ry_jbxx.gmsfhm = ry_rxzp.gmsfhm

    posted on 2012-06-29 13:44 chen11-1 閱讀(4840) 評論(0)  編輯  收藏


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲一级毛片中文字幕| 亚洲精品自产拍在线观看动漫| 亚洲欧洲另类春色校园网站| 日韩午夜理论免费TV影院| 久久精品国产亚洲AV麻豆不卡| 中文字幕免费播放| 亚洲夜夜欢A∨一区二区三区| 中文字幕久无码免费久久| 亚洲色中文字幕无码AV| 久久久久免费看黄a级试看| 无码欧精品亚洲日韩一区| 69xx免费观看视频| 亚洲欧洲无码一区二区三区| 国产一区二区三区在线观看免费 | 亚洲中文无码a∨在线观看| 95免费观看体验区视频| 亚洲一区在线免费观看| 成年女人午夜毛片免费视频 | 亚洲欧美日韩综合久久久| 狠狠久久永久免费观看| 美女隐私免费视频看| 亚洲美女精品视频| 免费看黄视频网站| 久久精品亚洲日本波多野结衣 | 午夜老司机永久免费看片| 91亚洲精品自在在线观看| 超pen个人视频国产免费观看| 人妻仑乱A级毛片免费看| 毛片视频免费观看| 成人精品国产亚洲欧洲| 亚洲最大激情中文字幕| 亚洲视频在线免费看| 亚洲欧洲在线观看| 全免费a级毛片免费看无码| 一个人看的www免费高清| 97久久精品亚洲中文字幕无码| 女人18毛片特级一级免费视频| 亚洲日韩在线观看免费视频| 亚洲福利电影在线观看| 亚洲精品一级无码鲁丝片| 国产在线观看麻豆91精品免费|