左聯接(LEFT OUTER JOIN)
雖然先前沒有說明但總有兩個表相互聯接並符合我們人類的觀察方式我們可以將其想象成在左邊或者在右邊的聯接而無須考慮數據庫將其保存在何處以及如何保存表中的數據OUTERJOIN的想法正是來源於這種觀念例如LEFTOUTER JOIN用於這樣的情形我們想看到左表中感興趣的全部記錄列表以及右表中的一些項所具有的額外特性如果右表中沒有對應數據行則對於左表中不匹配的行在右側表中填充NULL值圖 描述了LEFT OUTER JOIN的概念
圖
例如假定列出書櫃中所有的書架位置並列出書櫃的書架中已經具有的圖書但是現在需要列出所有圖書甚至包括哪些還沒有放置到書架中的圖書由於所有圖書在書櫃中都已經各自具有一個正確的位置因此在BOOKS表中必須創建不匹配的行下面將創建一個BK_ID=的新行
INSERT INTO books (bk_id bk_title)
VALUES (LEFT JOIN EXAMPLE)
其余的列將被填充為默認值NULL
現在可以使用之前曾用過的關於圖書放置位置的查詢只需要將JOIN類型從INNER JOIN修改為LEFT OUTER JOIN:
SELECT
bk_title
loc_shelf
loc_position_left
FROM books LEFT OUTER JOIN location
ON locationfk_bk_loc = booksbk_id
該查詢從BOOKS表中請求所有記錄另外還包含LOCATION表中不匹配的數據行剛才新插入的記錄(BOOKS表中的最後一條記錄)在書架上並沒有對應的位置因此在返回的結果集中將它的位置信息填充為NULL值如果以INNER JOIN方式來運行該查詢由於第條記錄沒有匹配的項因此INNER JOIN將簡單地將其排除在結果集之外表列出了該LEFT OUTERJOIN查詢的結果
表 LEFT OUTER JOIN查詢返回的結果
現在至少我們知道了哪些圖書還沒有放置到書櫃中如果使用INNER JOIN的話該圖書的記錄就不會顯示出來
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16471.html