Home >> Blog >> SQL Server LEFT JOIN 左外部連接簡介
執行SEO搜尋引擎優化案件的同時也讓我們學習一些業界的新知識。
SQL Server LEFT JOIN 左外部連接簡介
這LEFT JOIN是 SELECT 語句的子句。該LEFT JOIN子句允許您從多個表中查詢數據。
返回左表中的LEFT JOIN所有行和右表中的匹配行。如果在右表中沒有找到匹配的行,NULL 則使用。
下面說明如何使用LEFT JOIN子句連接兩個表 T1 和 T2:
SELECT
select_list
FROM
T1
LEFT JOIN T2 ON
join_predicate;
在此語法中,T1 和 T2 分別是左表和右表。
對於 T1 表中的每一行,查詢將其與 T2 表中的所有行進行比較。如果一對行導致連接謂詞計算為TRUE,則這些行中的列值將組合成一個新行,然後將其包含在結果集中。
如果左表 (T1) 中的行沒有 T2 表中的任何匹配行,則查詢將左表中的行的NULL 列值與右表中的每一列值組合起來。
簡而言之,該LEFT JOIN子句返回左表 (T1) 中的所有行以及NULL右表 (T2) 中的匹配行或值。
下面說明LEFT JOIN兩個表 T1(1,2,3) 和 T2(A,B,C)。將LEFT JOIN使用模式將 T1 表中的行與 T2 表中的行匹配:
在此圖中,T2 表中沒有任何行與 T1 表中的第 1 行匹配;因此,使用 NULL。T1 表中的第 2 行和第 3 行分別與 T2 表中的 A 行和 B 行匹配。
SQL ServerLEFT JOIN示例
請參閱以下內容products和order_items表格:
每個銷售訂單項目包括一個產品。order_items和products表之間的鏈接是product_id列。
以下語句使用該LEFT JOIN子句從productsandorder_items表中查詢數據:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
從結果集中可以清楚地看到,列NULL 中的列表order_id表示相應的產品尚未出售給任何客戶。
可以使用該WHERE子句來限制結果集。以下查詢返回未出現在任何銷售訂單中的產品:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
與往常一樣,SQL Server 在WHERE子句之後處理LEFT JOIN子句。
以下示例顯示如何連接三個表:production.products、sales.orders和sales.order_items使用LEFT JOIN子句:
SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i
ON i.product_id = p.product_id
LEFT JOIN sales.orders o
ON o.order_id = i.order_id
ORDER BY
order_id;
SQL Server LEFT JOIN:ONvsWHERE子句中的條件
以下查詢查找屬於訂單 id 100 的產品:
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o
ON o.product_id = p.product_id
WHERE order_id = 100
ORDER BY
order_id;
讓我們將條件order_id = 100移至ON子句:
SELECT
p.product_id,
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o
ON o.product_id = p.product_id AND
o.order_id = 100
ORDER BY
order_id DESC;
該查詢返回了所有產品,但只有 id 為 100 的訂單具有關聯產品的資訊。