風(fēng)雨無(wú)阻

          為什么要使用“外連接”

          之前我們看到的左連接 (left join),又稱(chēng)內(nèi)部連接 (inner join)。在這個(gè)情況下,要兩個(gè)表格內(nèi)都有同樣的值,那一筆資料才會(huì)被選出。那如果我們想要列出一個(gè)表格中每一筆的資料,無(wú)論它的值在另一個(gè)表格中有沒(méi)有出現(xiàn),那該怎么辦呢?在這個(gè)時(shí)候,我們就需要用到 SQL OUTER JOIN (外部連接) 的指令。

          外部連接的語(yǔ)法是依數(shù)據(jù)庫(kù)的不同而有所不同的。舉例來(lái)說(shuō),在 Oracle 上,我們會(huì)在 WHERE 子句中要選出所有資料的那個(gè)表格之后加上一個(gè) "(+)" 來(lái)代表說(shuō)這個(gè)表格中的所有資料我們都要。

          假設(shè)我們有以下的兩個(gè)表格:

          Store_Information 表格
          store_name Sales Date
          Los Angeles $1500 Jan-05-1999
          San Diego $250 Jan-07-1999
          Los Angeles $300 Jan-08-1999
          Boston $700 Jan-08-1999

          Geography 表格
          region_name store_name
          East Boston
          East New York
          West Los Angeles
          West San Diego

          我們需要知道每一間店的營(yíng)業(yè)額。如果我們用一個(gè)普通的連接,我們將會(huì)漏失掉 'New York'這個(gè)店,因?yàn)樗⒉淮嬖谟?Store_Information 這個(gè)表格。所以,在這個(gè)情況下,我們需要用外部連接來(lái)串聯(lián)這兩個(gè)表格:

          SELECT A1.store_name, SUM(A2.Sales) SALES
          FROM Georgraphy A1, Store_Information A2
          WHERE A1.store_name = A2.store_name (+)
          GROUP BY A1.store_name

          我們?cè)谶@里是使用了 Oracle 的外部連接語(yǔ)法。

          如果換成了Mysql:
          select a1.store_name,sum(a2.sales) from geography a1 left join store_information a2
          on a1.store_name=a2.store_name group by a1.store_name;


          結(jié)果:

          store_name SALES
          Boston $700
          New York
          Los Angeles $1800
          San Diego $250

          請(qǐng)注意: 當(dāng)?shù)诙€(gè)表格沒(méi)有相對(duì)的資料時(shí),SQL 會(huì)傳回 NULL 值。在這一個(gè)例子中, 'New York' 并不存在于 Store_Information 表格,所以它的 "SALES" 欄位是 NULL。

          posted on 2008-03-20 20:07 秋楓故事 閱讀(619) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆分類(lèi)

          隨筆檔案

          新聞檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 诸暨市| 武穴市| 福清市| 阿瓦提县| 重庆市| 应城市| 勐海县| 抚宁县| 锡林浩特市| 普陀区| 电白县| 揭阳市| 北海市| 长武县| 澄城县| 白河县| 巴中市| 弥渡县| 修武县| 龙江县| 黄骅市| 开原市| 卓尼县| 新乡县| 泽库县| 铜梁县| 南安市| 泸西县| 射阳县| 花垣县| 迁安市| 永城市| 呈贡县| 巴林右旗| 大竹县| 新竹县| 平顺县| 津南区| 朝阳市| 晋城| 嘉荫县|