NATURAL 和 FULL JOIN

已完成

FULL OUTER JOIN

FULL OUTER JOIN,也稱為FULL JOIN,結合了LEFT JOINRIGHT JOIN的特性,結果集中包括這兩個數據表中的所有數據行。
如果資料表之間根據 ON 子句有相符的資料列,則會填入這兩個資料表中的資料行。 不過,如果某個數據表中的數據行在其他數據表中沒有匹配,則不相符的數據表中相應的列會顯示 Null 值。

SELECT customers.customer_name, orders.order_id
FROM sales.customers AS customers
FULL OUTER JOIN sales.orders AS orders ON customers.customer_id = orders.customer_id;

此查詢會結合sales.customerssales.orders兩個數據表中的所有行,確保不會從任一端排除任何數據。 ON 子句透過匹配 customer_id 欄位來建立兩個數據表之間的關聯性。
如果一個數據表中的某一列在其他數據表中沒有對應的相符列,則不相符的列會傳回 Null 值。
您可以使用此方法全面檢視所有的客戶和訂單,包括彼此之間沒有相互關聯記錄的案例。

NATURAL JOIN(自然連接)

NATURAL JOIN 是一種 SQL 聯結類型,可藉由從這兩個數據表自動比對具有相同名稱和相容數據類型的數據行,來簡化合併數據表的程式。 不同於明確聯結,其中數據表之間的關聯性是使用 ON 子句來定義, NATURAL JOIN 依賴數據行名稱來識別共用屬性。 它確保結果集中只包含匹配的列中具有相同值的數據行,有效地篩選掉不相符的項目。

當聯結的數據表具有清楚定義的關聯性和相符的數據行名稱時,這個方法很有用,因為它可減少手動指定聯結條件的需求。
不過,用戶必須謹慎行事,因為如果數據表包含具有相同名稱但不相關的數據行,則純粹依賴數據行名稱可能會導致非預期的結果。

SELECT c.customer_name, o.order_id
FROM sales.customers AS c
NATURAL JOIN sales.orders AS o;

此查詢自動比對具有相同名稱和相容資料類型的欄位,如sales.customers,以結合sales.orderscustomer_id資料表。