SQL LEFT JOIN

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 左连接了 CustomersOrders 表。


SQL LEFT JOIN 语法

SELECT columns_from_both_tables
FROM table1
LEFT JOIN table2
ON table1.column1 = table2.column2

这里,

  • table1 是要连接的左表
  • table2 是要连接的右表
  • column1column2 是两个表中的共同列

示例: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;

此代码的工作原理如下

How to use LEFT JOIN in SQL
示例:SQL LEFT JOIN

这里,SQL 命令组合了 CustomersOrders 表中的数据。

查询从 Customers 表中选择 customer_idfirst_name,并从 Orders 表中选择 amount

因此,结果包括 Customers 中的 customer_idOrders 中的客户匹配的行。


更多关于 SQL LEFT JOIN 的信息

使用 AS 别名进行 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;

在这里,该命令左连接了 CategoriesProducts 表,并分别给它们分配了别名 CP

LEFT JOIN 中的 NULL 值

执行 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() 函数

带 WHERE 子句的 LEFT JOIN

我们可以将 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 命令连接了 CustomersOrders 表,并选择 amount 大于或等于 500 的行。

LEFT JOIN 多个表

我们还可以使用 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 多个表


另请阅读

在结束之前,让我们测试一下你对 SQL LEFT JOIN 的了解!你能解决以下挑战吗?

挑战

编写一个 SQL 查询来检索为 ABC 公司工作的每个销售人员的信息。

你是 ABC 公司的销售经理,负责管理 SalespersonsAddress 表,这些表通过 salesperson_id 列链接。以下是这些表的架构:

Salespersons

列名

数据类型

salesperson_id

int

first_name

varchar(100)

last_name

varchar(100)

Address

列名

数据类型

address_id

int

salesperson_id

int

city

varchar(100)

state

varchar(100)

country

varchar(100)

你的任务是编写一个 SQL 查询,检索每个销售人员的名字、姓氏、城市和州。


如果销售人员的地址未在地址表中列出,则将城市和州字段留空。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战