数据库查询左连接:轻松搞定两张表的数据匹配

什么是左连接

在处理数据时,经常需要把两个表里的数据拼在一起看。比如你有一张用户表,记录了所有注册用户的姓名和ID,还有一张订单表,记录了每笔订单属于哪个用户。你想知道每个用户有没有下单,这时候就得用到“左连接”(LEFT JOIN)。

左连接的意思是:以左边的表为基础,不管右边的表有没有匹配上,左边表的数据都会完整保留。如果右边有对应的记录,就拼在一起;没有的话,对应字段就显示为空。

一个实际场景

假设你在运营一个小网店,有两张表:

users 表

user_id | name
--------|-------
1 | 小明
2 | 小红
3 | 小刚

orders 表

order_id | user_id | amount
---------|---------|-------
101 | 1 | 99.5
102 | 1 | 30.0
103 | 2 | 150.0

现在你想查出每个用户下了多少单,包括那些没下过单的。用左连接最合适不过。

写一条 LEFT JOIN 查询

SQL 这么写:

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

执行结果会是:

name | amount
-----|-------
小明 | 99.5
小明 | 30.0
小红 | 150.0
小刚 | NULL

看到没?小刚没下单,amount 是 NULL,但他依然出现在结果里。这就是左连接的关键——不丢左边的数据。

和内连接的区别

如果你用 INNER JOIN,结果只会留下两边都能匹配上的记录。上面的例子中,小刚就不会出现。但有时候你就是想看看谁还没行动,比如催一下沉睡用户,那 LEFT JOIN 就不可替代。

还能怎么用

你可以结合 COUNT 或 SUM 做统计。比如统计每个用户的订单总数,包括零次的:

SELECT users.name, COUNT(orders.order_id) AS order_count
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id
GROUP BY users.user_id, users.name;

结果:

name | order_count
-----|------------
小明 | 2
小红 | 1
小刚 | 0

这样一眼就能看出小刚还没开张,适合做用户运营分析。

左连接不是花架子,它是日常查数据最实用的工具之一。只要记住:左表为主,右表补位,缺的填空,不丢记录。