全聯接(FULL JOIN)
FULL JOIN是LEFT OUTER JOIN和RIGHT OUTER JOIN的組合如圖所示
圖
下面的查詢將給出包含所有圖書和所有書櫃位置的數據集其中一些圖書位於書架的同一層上該查詢與之前的查詢在結構上是相同的只是這裡使用了FULL JOIN查詢
SELECT
loc_shelf
loc_position_left
bk_title
FROM location FULL JOIN books
ON locationfk_bk_loc = booksbk_id
由於現在從左表和右表都返回記錄因此哪一個表作為左表哪一個表作為右邊已經不再重要表列出了該查詢結果中的變化
表 FULL JOIN查詢返回的結果
在上面的例子中由於參照完整性約束(關於參照完整性的詳細內容請參見第章)LOCATION表中不能存在不匹配的記錄因此必須交換左表和右表的位置並應用不同類型的聯接在很多情況下JOIN條件與主鍵/外鍵關系並不相同這時將獲得包含來自左右兩個表中匹配和不匹配記錄的數據集
例如如果在一個列上聯接兩個表而該列既不是主鍵也不是外鍵(例如BK_ID = LOC_POSITION_LEFT)那麼結果集中不匹配的LOCATION記錄將包含大量的NULL值因為LOC_POSITION_LEFT僅具有個不同的值而BK_ID具有個值(這將返回個NULL值)盡管這是一個有效的SQL操作但是從邏輯的角度來看該查詢並沒有太大的意義用它來演示OUTERJOIN的概念則再好不過
現在已經不再需要這條多余的記錄可以安全地將其從BOOKS表中刪除
DELETE books WHERE bk_id=;
在JOIN的例子中關鍵字OUTER是可選的也可以簡單地使用LEFTRIGHT或者FULL對於INNER JOIN也是如此RDBMS認為不帶任何限定符的JOIN是INNER JOIN類型然而使用限定符是一個良好的SQL實踐相對於不帶限定符的JOIN來說它使SQL代碼具有更好的可維護性
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16469.html