UNION 和 外部連接
有些時候,你可以想一起看多個查詢的結果、組合它們的輸出,你可以使用UNION關鍵字。為了合並以下兩個查詢的輸出:顯示所有買方的ID和已經有定貨的顧客,你可以使用以下語句:
SELECT BUYERID
FROM ANTIQUEOWNERS
UNION
SELECT OWNERID
FROM ORDERS;
這裡要注意SQL要求SELECT的列表必須匹配,即列於數據類型匹配。在本例子中,BuyerID 和OwnerID都是相同的數據類型,同為Interger(整型)。同時還有一提的是,SQL但使用UNION的使用會進行自動復制排除。而在單一的查詢中,你就必須使用DISTINCT。
Outer Join(外部連接)通常是在JOIN查詢被聯合,而行沒有包括到JOIN中的時候使用,特別是在常量文本"flags"被包括的時候尤為有用。下面我們看看這個查詢先:
SELECT OWNERID, 'is in both Orders & Antiques'
FROM ORDERS, ANTIQUES
WHERE OWNERID = BUYERID
UNION
SELECT BUYERID, 'is in Antiques only'
FROM ANTIQUES
WHERE BUYERID NOT IN
(SELECT OWNERID
FROM ORDERS);
第一個查詢做了一個連接以列出兩個表中的每個owener,並且在ID後面放置一個標記線來重復引用。這個UNION合並了這個列表以及以下第二個的列表。第二個列表是列出不是在Orders 表的ID,這樣就產生了在JOIN查詢之外的ID列表,它是利用引用標簽列出的。這可能是一種最容易的方法來產生這個列表。
這個概念對於主鍵跟外碼有關的狀況是很有用的,但是有些主鍵的外碼值是NULL。比如,在一個表中,主鍵是salesperson,而在其它的表中主鍵是customers,並且它們的salesperson列在相同的行。然而,如果salesperson沒有customers的時候,這個人的名字就不會出現在customer表中。如果所有salespersons的列表要顯示出來,那麼就要外部連接了。