LEFT JOIN保留左表所有行,右表无匹配时填NULL;RIGHT JOIN反之,保留右表所有行,左表无匹配时填NULL;两者功能对称,但LEFT JOIN更常用,因习惯以左表为主表,RIGHT JOIN可通过调换表序用LEFT JOIN实现,实践中为统一风格常只用LEFT JOIN。

SQL的
LEFT JOIN
RIGHT JOIN
LEFT JOIN
RIGHT JOIN
在SQL的世界里,连接(JOIN)操作是数据整合的基石,而
LEFT JOIN
RIGHT JOIN
LEFT JOIN(左连接)
LEFT JOIN
NULL
这在实际应用中非常有用。比如,你可能想查看所有客户的信息,以及他们下过的所有订单。即使有些客户从未下过订单,你仍然希望在结果中看到他们,只是他们的订单信息会是空的。
示例:
假设我们有两个表:
Customers
CustomerID
CustomerName
Orders
OrderID
CustomerID
OrderDate
SELECT
c.CustomerID,
c.CustomerName,
o.OrderID,
o.OrderDate
FROM
Customers c
LEFT JOIN
Orders o ON c.CustomerID = o.CustomerID;这个查询会列出所有客户,包括那些没有下过订单的客户。对于没有订单的客户,
OrderID
OrderDate
NULL
RIGHT JOIN(右连接)
RIGHT JOIN
LEFT JOIN
NULL
虽然功能上与
LEFT JOIN
RIGHT JOIN
FROM
LEFT JOIN
示例:
继续使用上面的
Customers
Orders
SELECT
c.CustomerID,
c.CustomerName,
o.OrderID,
o.OrderDate
FROM
Customers c
RIGHT JOIN
Orders o ON c.CustomerID = o.CustomerID;这个查询会列出所有订单,包括那些可能没有对应客户信息的订单(这通常意味着数据异常或数据录入错误)。对于没有对应客户的订单,
CustomerID
CustomerName
NULL
这其实是个很有趣的现象,我个人觉得它更多地反映了人类的思维习惯和阅读流程。我们习惯从左到右阅读,在编写SQL查询时,自然而然地会将我们认为“主要”或“起始”的表放在
FROM
LEFT JOIN
RIGHT JOIN
LEFT JOIN
FROM
JOIN
RIGHT JOIN
LEFT JOIN
-- 原始 RIGHT JOIN SELECT * FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id; -- 等价的 LEFT JOIN SELECT * FROM TableB LEFT JOIN TableA ON TableA.id = TableB.id;
所以,
RIGHT JOIN
LEFT JOIN
RIGHT JOIN
LEFT JOIN
选择正确的
JOIN
明确你的“主”数据集: 问自己,我希望以哪个表的数据为基础?哪个表的数据是无论如何都不能丢弃的?一旦确定了这个“主”表,它通常就是你
FROM
LEFT JOIN
Products
LEFT JOIN
Sales
理解连接条件:
ON
避免数据丢失(不完整的结果):
LEFT JOIN
RIGHT JOIN
LEFT JOIN
INNER JOIN
INNER JOIN
避免数据冗余(重复的结果):
JOIN
JOIN
JOIN
DISTINCT
SELECT DISTINCT c.CustomerID, c.CustomerName FROM ...
COUNT(o.OrderID)
GROUP BY c.CustomerID
JOIN
ON
ON
总而言之,选择
JOIN
JOIN
JOIN
SQL的连接类型远不止
LEFT JOIN
RIGHT JOIN
1. INNER JOIN(内连接)
这是最常用也最基本的连接类型。
INNER JOIN
SELECT
c.CustomerName,
o.OrderID
FROM
Customers c
INNER JOIN
Orders o ON c.CustomerID = o.CustomerID;这个查询只会返回那些既在
Customers
Orders
2. FULL OUTER JOIN(全外连接)
FULL OUTER JOIN
LEFT JOIN
RIGHT JOIN
NULL
SELECT
c.CustomerName,
o.OrderID
FROM
Customers c
FULL OUTER JOIN
Orders o ON c.CustomerID = o.CustomerID;这个查询会列出所有客户(无论是否有订单)和所有订单(无论是否有对应客户)。如果客户没有订单,
OrderID
NULL
CustomerName
NULL
3. CROSS JOIN(交叉连接)
CROSS JOIN
CROSS JOIN
ON
SELECT
p.ProductName,
s.SizeName
FROM
Products p
CROSS JOIN
Sizes s;如果
Products
Sizes
4. SELF JOIN(自连接)
SELF JOIN
JOIN
SELECT
e1.EmployeeName AS Employee,
e2.EmployeeName AS Manager
FROM
Employees e1
INNER JOIN
Employees e2 ON e1.ManagerID = e2.EmployeeID;这个查询会列出每个员工及其对应的经理,假设
Employees
ManagerID
EmployeeID
理解这些不同的
JOIN
以上就是SQL的LEFTJOIN与RIGHTJOIN有何区别?连接类型的解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号