SQL LEFT JOIN
根据一个共同的列连接两个表。它会选择这些列中具有匹配值的记录,以及左表中剩余的行。
示例
-- left join Customers and Orders tables based on their shared customer_id columns
-- Customers is the left table
-- Orders is the right table
SELECT Customers.customer_id, Customers.first_name, Orders.item
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id;
在这里,代码根据两个表共有的 customer_id 左连接了 Customers
和 Orders
表。
SQL LEFT JOIN 语法
SELECT columns_from_both_tables
FROM table1
LEFT JOIN table2
ON table1.column1 = table2.column2
这里,
- table1 是要连接的左表
- table2 是要连接的右表
- column1 和 column2 是两个表中的共同列
示例:SQL LEFT JOIN
-- left join the Customers and Orders tables
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer;
此代码的工作原理如下

这里,SQL 命令组合了 Customers
和 Orders
表中的数据。
查询从 Customers
表中选择 customer_id
和 first_name
,并从 Orders
表中选择 amount
。
因此,结果包括 Customers
中的 customer_id
与 Orders
中的客户匹配的行。
更多关于 SQL LEFT JOIN 的信息
我们可以在 LEFT JOIN
内部使用 AS 别名,使我们的查询简短清晰。例如:
-- use alias C for Categories table
-- use alias P for Products table
SELECT C.cat_name, P.prod_title
FROM Categories AS C
LEFT JOIN Products AS P
ON C.cat_id= P.cat_id;
在这里,该命令左连接了 Categories
和 Products
表,并分别给它们分配了别名 C 和 P。
执行 LEFT JOIN
时,右表中没有与左表匹配行的行,在结果集中遇到 NULL
值是很常见的。
为了处理这些 NULL
值,我们可以使用 COALESCE()
函数。例如:
-- display order status for each customer, handling NULL values
SELECT c.customer_id, COALESCE(s.status, 'No Orders') AS order_status
FROM Customers c
LEFT JOIN Shippings s ON c.customer_id = s.customer
ORDER BY c.customer_id;
在此命令中,我们将 Customers 表与 Shippings 表连接。COALESCE()
函数确保如果 status 列为 NULL
,则显示 No Orders。
这样,我们每个客户都始终有一个订单状态。
要了解更多信息,请访问 SQL COALESCE() 函数。
我们可以将 LEFT JOIN
语句与可选的 WHERE 子句一起使用。例如:
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer
WHERE Orders.amount >= 500;
在这里,SQL 命令连接了 Customers
和 Orders
表,并选择 amount 大于或等于 500 的行。
我们还可以使用 LEFT JOIN
来组合两个以上的表。
-- join Customers, Orders, and Shippings tables
SELECT C.customer_id, C.first_name, O.amount, S.status
FROM Customers C
LEFT JOIN Orders O
ON C.customer_id = O.customer_id
LEFT JOIN Shippings S
ON C.customer_id = S.customer;
此命令将连接三个表,并为每个客户返回一行,包括他们的订单金额和发货状态(如果可用)。
注意:要了解有关连接多个表的更多信息,请访问 SQL JOIN 多个表。
另请阅读