返回
数据珍藏家:左外连接的秘密——让右表缺失数据的左表列现身
后端
2023-09-05 00:49:28
左外连接:深入解析右表缺失数据查询的秘密
什么是左外连接?
左外连接是一种神奇的数据库连接方式,它允许你从右表中查询到左表中缺失的数据。不同于内连接会过滤掉右表中没有匹配数据的左表行,左外连接会保留这些行,并用 NULL 值填充右表中的缺失数据。
左外连接的语法
使用左外连接的语法很简单,就像这样:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
其中,table1
和 table2
是要连接的两个表,column_name
是连接的列,=
是连接条件。
左外连接的示例
为了更好地理解左外连接,我们举个例子。假设我们有两个表,letter_data
和 branch
,如下所示:
letter_data
+----+------------+----------+
| id | branch_id | letter_id |
+----+------------+----------+
| 1 | 1 | 100 |
| 2 | 2 | 200 |
| 3 | 3 | 300 |
| 4 | 4 | 400 |
| 5 | NULL | 500 |
branch
+----+---------+
| id | name |
+----+---------+
| 1 | Branch A |
| 2 | Branch B |
| 3 | Branch C |
现在,我们想要查询 letter_data
中每个分支机构收到的信件数量,并通过 branch
表连接查询分支机构的名称。我们可以使用左外连接来完成这个查询,如下所示:
SELECT ld.branch_id, b.name, COUNT(ld.letter_id) AS letter_count
FROM letter_data ld
LEFT JOIN branch b
ON ld.branch_id = b.id
GROUP BY ld.branch_id, b.name;
查询结果如下:
+------------+---------+-------------+
| branch_id | name | letter_count |
+------------+---------+-------------+
| 1 | Branch A | 1 |
| 2 | Branch B | 1 |
| 3 | Branch C | 1 |
| NULL | NULL | 1 |
+------------+---------+-------------+
可以看到,即使 letter_data
表中 branch_id
为 NULL 的行没有与 branch
表中的任何行匹配,它仍然显示在结果集中,并用 NULL 值填充 name
列。
左外连接的应用场景
左外连接在实际应用中十分常见,这里列出一些常见的场景:
- 查找右表中缺失数据的左表记录
- 汇总左表和右表中的数据
- 在左表和右表之间建立一对多的关系
- 查询左表和右表中的交集或差集
常见问题解答
-
左外连接和内连接有什么区别?
内连接只返回两个表中都有匹配数据的行,而左外连接返回左表中的所有行,即使右表中没有匹配数据。 -
左外连接可以返回哪些值?
左外连接可以返回左表和右表中的值,如果右表中没有匹配数据,则返回 NULL 值。 -
什么时候应该使用左外连接?
当你想查询左表中的所有记录,即使右表中没有匹配数据时,可以使用左外连接。 -
左外连接的语法是什么?
左外连接的语法是:SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
-
左外连接有什么优势?
左外连接的一个主要优势是可以查询右表中缺失数据的左表记录。