風雨無阻

          為什么要使用“外連接”

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

          外部連接的語法是依數據庫的不同而有所不同的。舉例來說,在 Oracle 上,我們會在 WHERE 子句中要選出所有資料的那個表格之后加上一個 "(+)" 來代表說這個表格中的所有資料我們都要。

          假設我們有以下的兩個表格:

          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

          我們需要知道每一間店的營業額。如果我們用一個普通的連接,我們將會漏失掉 'New York'這個店,因為它并不存在于 Store_Information 這個表格。所以,在這個情況下,我們需要用外部連接來串聯這兩個表格:

          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

          我們在這里是使用了 Oracle 的外部連接語法。

          如果換成了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;


          結果:

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

          請注意: 當第二個表格沒有相對的資料時,SQL 會傳回 NULL 值。在這一個例子中, 'New York' 并不存在于 Store_Information 表格,所以它的 "SALES" 欄位是 NULL。

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


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


          網站導航:
           
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          新聞檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 壤塘县| 民权县| 哈密市| 福海县| 藁城市| 德惠市| 千阳县| 肇州县| 怀集县| 新竹市| 彩票| 怀宁县| 大兴区| 安化县| 大渡口区| 东莞市| 登封市| 偃师市| 周宁县| 盐山县| 京山县| 长寿区| 望江县| 沙田区| 泌阳县| 延寿县| 盈江县| 荆门市| 屏边| 衡山县| 芮城县| 宁城县| 沐川县| 社旗县| 乌兰察布市| 抚远县| 蕲春县| 绥宁县| 彭州市| 湄潭县| 赞皇县|