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

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

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

    數(shù)據(jù)庫常見的三種join方式(收藏)

    數(shù)據(jù)庫常見的join方式有三種:inner join, left outter join, right outter join(還有一種full join,因不常用,本文不討論)。這三種連接方式都是將兩個以上的表通過on條件語句,拼成一個大表。以下是它們的共同點:

    ? 1. 關(guān)于左右表的概念。左表指的是在SQL語句中排在left join左邊的表,右表指的是排在left join右邊的表。
    ? 2. 在拼成的大表中,左表排在左邊,右表排在右邊。
    ? 3. on條件語句最好用=號對兩表相應(yīng)的主外鍵進行連接。當(dāng)然,也可以用其他操作符,如>, <, 來連接兩表的任一字段,此時的關(guān)系將非常復(fù)雜,連接后的記錄數(shù)也隨之而變得不確定。如果在一些特殊的場合中需要用到這種方式,必須通過簡單的實例加以確認,否則,連接結(jié)果很可能不是我們所想要的!
    ? 4. on條件語句不能省略。
    ? 5. 可以連鎖使用join,每次使用join都令另一表與當(dāng)前的表或連接的結(jié)果相連接。


    在下文中,用到了兩個表,"部門"表與"組織"表,其中,"部門"表有一名為"組織編號"的外鍵,指向"組織"表中的主鍵"編號"。

    inner join

    ? 格式:select * from 部門 inner join 組織 on 部門.組織編號 = 組織.編號

    ? 目的:將兩表中符合on條件的所有記錄都找出來。

    ? 規(guī)律:

    ??? 1. 拼出的大表記錄不會增加。
    ??? 2. 如果左邊與右表的關(guān)系是一對多的關(guān)系,在選出的任一記錄中,假若右表有多個記錄與其對應(yīng),那么,連接后的左表,主鍵將不再唯一。

    ? 典型應(yīng)用:將存在多關(guān)系的引用表放在左表,將存在一關(guān)系的被引用表放在右表,通過=號將主外鍵進行連接,通過對右表設(shè)定過濾條件,選出相應(yīng)的且主鍵唯一的左表記錄。

    ? 備注:inner join 是默認的連接方式,可縮寫為join。

    ? 轉(zhuǎn)化為where子句:

    ??? select * from 部門, 組織 where 部門.組織編號 = 組織.編號

    ?

    left outter join

    ? 格式: select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號

    ? 格式: select * from 組織 left join 部門 on 組織.編號 = 部門.組織編號

    ? 目的:將左表的所有記錄列出,右表中只要符合on條件的,與左表記錄相拼合,不符合條件的,填以null值。

    ? 規(guī)律:

    ??? 1. 選出所有符合條件的左表,如果左邊與右表的關(guān)系是一對一的關(guān)系,則拼成的大表記錄不會改變。
    ?????? 如果左邊與右表的關(guān)系是多對一的關(guān)系,則拼成的大表記錄也不會改變。
    ?????? 如果左邊與右表的關(guān)系是一對多的關(guān)系,則拼成的大表記錄會增加。對于每一具有一對多關(guān)系的左表記錄,如果左表1:N與右表對應(yīng),那么會多出N-1條記錄。例如,如果左表第一條記錄1:3對應(yīng)于右表,多出2條記錄。如果左表第二條記錄1:2對應(yīng)于右表,則再多出1條記錄。這樣,總共多出3條記錄。其他類推。
    ??? 2. 如果左邊與右表的關(guān)系是一對多的關(guān)系,在選出的任一記錄中,假若右表有多個記錄與其對應(yīng),那么,連接后的左表,主鍵將不再唯一。
    ??? 3. 如果左邊與右表的關(guān)系是一對多的關(guān)系,對于左表任一記錄,如果右表沒有記錄與其相對應(yīng),則全部填以null值。

    ? 典型應(yīng)用:將存在多關(guān)系的引用表放在左表,將存在一關(guān)系的被引用表放在右表,通過對右表設(shè)定過濾條件,選出相應(yīng)的且主鍵唯一的左表記錄。

    ? 備注:left outter join可用left join代替。在有些數(shù)據(jù)庫中,如HSqlDb, 只能使用left join而不能使用left outter join。

    ? 轉(zhuǎn)化為where子句:

    ??? select * from 部門, 組織 where 部門.組織編號 = 組織.編號


    right outter join

    ? 格式: select * from 部門 right join 組織 on 部門.組織編號 = 組織.編號

    ? 格式: select * from 組織 right join 部門 on 部門.組織編號 = 組織.編號

    ? 目的:將右表的所有記錄列出,左表中只要符合on條件的,與右表記錄相拼合,不符合條件的,填以null值。

    ? 規(guī)律:(與left outter join相反)

    ? 典型應(yīng)用:可轉(zhuǎn)化成left outter join。例如

    ??? select * from 組織 right join 部門 on 部門.組織編號 = 組織.編號
    ??? 與
    ??? select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號
    ??? 的效果一樣

    ? 備注:right outter join可用right join代替。在有些數(shù)據(jù)庫中,如HSqlDb, 沒有實現(xiàn)right join功能。

    ? 轉(zhuǎn)化為where子句:

    ??? select * from 部門, 組織 where 部門.組織編號 = 組織.編號

    posted on 2006-05-18 09:43 beyondduke 閱讀(5855) 評論(1)  編輯  收藏 所屬分類: 編程隨筆

    評論

    # re: 數(shù)據(jù)庫常見的三種join方式(收藏) 2007-02-12 12:28 曲奇

    好像只有第一種才能轉(zhuǎn)為where子句的條件吧
    left 和 right都不可以  回復(fù)  更多評論   

    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導(dǎo)航

    統(tǒng)計

    公告


    MSN聯(lián)系

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    我的連接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品WWW久久久久久| 国产精品久久久久久久久久免费| 国产免费看插插插视频| 亚洲精品无码aⅴ中文字幕蜜桃| 天天影视色香欲综合免费| 亚洲综合久久1区2区3区| 久久国产色AV免费看| 久久丫精品国产亚洲av不卡 | 又大又硬又粗又黄的视频免费看| 暖暖在线日本免费中文| 色多多免费视频观看区一区| 免费人成在线观看网站视频| 在线观看免费亚洲| 亚洲精品天堂成人片?V在线播放| 丁香六月婷婷精品免费观看| 国产亚洲色婷婷久久99精品| 免费无码成人AV在线播放不卡 | 中文有码亚洲制服av片| 欧洲精品免费一区二区三区| 亚洲av色香蕉一区二区三区蜜桃| 免费国产a国产片高清网站| 一级毛片在线免费播放| 久久久久无码精品亚洲日韩| 中国xxxxx高清免费看视频| 中文字幕乱码亚洲无线三区| 免费夜色污私人影院在线观看| a级在线免费观看| 亚洲国产精品久久网午夜| 超pen个人视频国产免费观看| 人妻巨大乳hd免费看| 亚洲狠狠综合久久| 成人在线免费观看| 最新久久免费视频| 亚洲一区电影在线观看| 国产一区二区三区免费视频| 在线观看免费无码专区| 亚洲 日韩 色 图网站| 亚洲无线码一区二区三区| 免费国产成人高清在线观看网站| 老司机午夜免费视频| 亚洲国产精品lv|