乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      數(shù)據(jù)庫(kù)常見(jiàn)的三種join方式

       bigyellowdoc 2012-08-16


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

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


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

      inner join

      格式:select * from 部門 inner join 組織 on 部門.組織編號(hào) = 組織.編號(hào)

      目的:將兩表中符合on條件的所有記錄都找出來(lái)。

      規(guī)律:

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

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

      備注:inner join 是默認(rèn)的連接方式,可縮寫為join。

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

      select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào)

      left outter join

      格式: select * from 部門 left join 組織 on 部門.組織編號(hào) = 組織.編號(hào)

      格式: select * from 組織 left join 部門 on 組織.編號(hào) = 部門.組織編號(hào)

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

      規(guī)律:

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

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

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

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

      select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào)


      right outter join

      格式: select * from 部門 right join 組織 on 部門.組織編號(hào) = 組織.編號(hào)

      格式: select * from 組織 right join 部門 on 部門.組織編號(hào) = 組織.編號(hào)

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

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

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

      select * from 組織 right join 部門 on 部門.組織編號(hào) = 組織.編號(hào)

      select * from 部門 left join 組織 on 部門.組織編號(hào) = 組織.編號(hào)
      的效果一樣

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

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

      select * from 部門, 組織 where 部門.組織編號(hào) = 組織.編號(hào)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多