sql中左连接,右连接,内连接,全连接之间的区别?
定义
1. INNER JOIN
INNER JOIN 返回两个表中具有匹配值的行。如果某行在其中一个表中没有匹配,则该行不会出现在结果集中。
2. LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN 返回左表的所有行,即使右表中没有匹配的行。如果没有匹配,则结果中的右表列包含 NULL。
3. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN 返回右表的所有行,即使左表中没有匹配的行。如果没有匹配,则结果中的左表列包含 NULL。
4. FULL JOIN (FULL OUTER JOIN)
FULL JOIN 返回左表和右表中所有匹配和不匹配的行。对于左表和右表中不匹配的部分,分别填充 NULL。
注意
在某些数据库系统中,如 MySQL,FULL JOIN
不是默认支持的,你可能需要用 UNION
或者 LEFT JOIN
和 RIGHT JOIN
来模拟 FULL JOIN
的行为。
实操
首先,我们需要创建两个表:Customers
和 Orders
。
创建表
CREATE TABLE Customers ( CustomerID INT PRIMARY KEY, Name VARCHAR(50) ); CREATE TABLE Orders ( OrderNumber INT PRIMARY KEY, CustomerID INT );
插入数据
接下来,我们向这两个表中插入一些示例数据:
INSERT INTO Customers (CustomerID, Name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'); INSERT INTO Orders (OrderNumber, CustomerID) VALUES (101, 1), (102, 2), (103, NULL); -- 添加一个没有客户 ID 的订单
各种 JOIN 的 SQL 语句
INNER JOIN
SELECT Customers.Name, Orders.OrderNumber FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
LEFT JOIN (LEFT OUTER JOIN)
SELECT Customers.Name, Orders.OrderNumber FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
RIGHT JOIN (RIGHT OUTER JOIN)
SELECT Customers.Name, Orders.OrderNumber FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
FULL JOIN (FULL OUTER JOIN)
在 SQL Server 中,你可以使用 FULL OUTER JOIN
直接写出:
SELECT Customers.Name, Orders.OrderNumber FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2023-09-03 asp.net restful ef core sqlite 自定义包的位置
2023-09-03 sqlite 触发器 c#
2023-09-03 EF Core 的基本使用
2017-09-03 独立按键