聯結類型
聯結資料表時,您建立的聯結類型將影響結果集中的資料列。 您可以建立下列聯結類型:
內部聯結:該聯結僅顯示同時在兩個聯結資料表中都有相符項目的資料列 (這是查詢和檢視表設計工具中的預設聯結類型)。 例如,您可以聯結 titles 和 publishers 資料表,建立顯示每本書的發行者名稱的結果集。 在內部聯結中,結果集中不包含沒有發行者資訊的書籍,也不包含沒有書籍資訊的發行者。 這類聯結所產生的 SQL 將如下所示:
SELECT title, pub_name FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id
注意事項 當您建立內部聯結,含有 NULL 的資料行不符合任何值,因此不包含在結果集中。Null 值也不符合其他 Null 值。
外部聯結:該聯結包含資料列,即使聯結的資料表彼此沒有關聯的資料列。 您可以建立三種不同的外部聯結來指定您要包含的不相符資料列:
左外部聯結:包括第一個命名資料表 (即「左」資料表,在 JOIN 子句的最左邊) 的所有資料行。 右資料表中不相符的資料列將不會出現。 例如,下列 SQL 陳述式將說明 titles 和 publishers 資料表之間的左外部聯結,該聯結可包括所有書名,即使該書名並沒有發行者資訊:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles LEFT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
右外部聯結:包括第二個命名資料表 (即「右」資料表,在 JOIN 子句的最右邊) 的所有資料列。 左資料表中不相符的資料列將不會出現。 例如,titles 和 publishers 資料表間的右外部聯結將包括所有發行者,即使該發行者在 titles 資料表中並沒有書籍。 產生的 SQL 將如下所示:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles RIGHT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
完整外部聯結:包括所有聯結資料表的所有資料列,不論這些資料列是否相符。 例如,titles 和 publishers 之間的完整外部聯結將顯示所有書籍和所有發行者,即使其中一個資料表在另一個資料表中並沒有相符的項目。
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles FULL OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
注意事項 某些資料庫 (例如,Oracle) 不支援完整外部聯結。
交叉聯結:該聯結的結果集將出現一個資料列,該資料列中將包括兩個資料表中每一個可能的資料列組合。 例如,作者交叉聯結發行者將產生一個結果集,其中一個資料列將出現每一個可能的作者/發行者組合。 產生的 SQL 將如下所示:
SELECT * FROM authors CROSS JOIN publishers