左聯接(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 location fk_bk_loc = books bk_id
該查詢從BOOKS表中請求所有記錄 另外還包含LOCATION表中不匹配的數據行 剛才新插入的記錄(BOOKS表中的最後壹條記錄)在書架上並沒有對應的位置 因此在返回的結果集中將它的位置信息填充為NULL值 如果以INNER JOIN方式來運行該查詢 由於第 條記錄沒有匹配的項 因此INNER JOIN將簡單地將其排除在結果集之外 表 列出了該LEFT OUTERJOIN查詢的結果
表 LEFT OUTER JOIN查詢返回的結果
現在 至少我們知道了哪些圖書還沒有放置到書櫃中 如果使用INNER JOIN的話 該圖書的記錄就不會顯示出來
? 返回目錄 SQL實戰新手入門
? 編輯推薦
? Oracle索引技術
? 高性能MySQL
lishixinzhi/Article/program/SQL/201311/16471