在 SQL 中,JOIN
(内连接)和LEFT JOIN
(左连接)既有联系又有区别。
一、联系
- 目的相同
- 两者都是为了将两个或多个表中的数据根据特定的条件进行合并,以便从多个数据源中获取更完整的信息。
- 语法结构相似
- 它们在语法上都使用
ON
关键字来指定连接条件。例如:SELECT * FROM table1 [JOIN/LEFT JOIN] table2 ON table1.column = table2.column;
- 它们在语法上都使用
二、区别
- 结果集范围不同
JOIN
(内连接)只返回两个表中满足连接条件的行,即结果集中的每一行在两个表中都有对应的匹配行。LEFT JOIN
以左表为基础,返回左表中的所有行以及右表中与左表匹配的行。如果右表中没有匹配的行,则相应的列将填充为NULL
。
- 数据完整性考量不同
JOIN
更注重数据的精确匹配,确保结果集中的数据在两个表中都存在对应关系,适合在需要严格一致性的场景下使用。LEFT JOIN
则更侧重于保留左表的完整性,即使右表中没有匹配的数据,也会将左表中的行包含在结果集中,适用于需要以一个表为主要依据,同时获取与之相关的其他表信息的情况。
例如,有两个表Customers
(客户表)和Orders
(订单表)。
Customers
表:
CustomerID | CustomerName |
1 | Alice |
2 | Bob |
3 | Carol |
Orders
表:
OrderID | CustomerID | OrderAmount |
1 | 1 | 100 |
2 | 2 | 150 |
如果使用JOIN
:
sql:
SELECT c.CustomerName, o.OrderAmount
FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID;
结果为:
CustomerName | OrderAmount |
Alice | 100 |
Bob | 150 |
如果使用LEFT JOIN
:
sql:
SELECT c.CustomerName, o.OrderAmount
FROM Customers c LEFTJOIN Orders o ON c.CustomerID = o.CustomerID;
结果为:
CustomerName | OrderAmount |
Alice | 100 |
Bob | 150 |
Carol | NULL |