小王最近在做一个报表,需要从订单表和客户表中提取数据,他写了个简单的JOIN
查询,结果发现有些客户明明存在,却没有出现在查询结果里,同事看了一眼说:“你是不是用了内连接?试试外连接吧!” 小王一头雾水:内连接和外连接到底有什么区别?
今天我们就来聊聊SQL Server中这两种最常用的连接方式,帮你彻底搞懂它们的区别和应用场景。
核心特点:只有当两个表中都存在匹配的记录时,才会返回结果。
SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
通俗理解:就像相亲大会,只有双方都看对眼(匹配)的人才会配对成功。
适用场景:
注意:如果某条记录在其中一个表中没有对应项,它就不会出现在结果中,这就是小王遇到的问题——没有订单的客户被“过滤”掉了。
外连接分为三种类型,每种都有不同的保留方向:
核心特点:保留左表所有记录,右表无匹配则显示NULL
SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
适用场景:
核心特点:保留右表所有记录,左表无匹配则显示NULL
SELECT Orders.OrderID, Customers.CustomerName FROM Orders RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
注意:实际开发中RIGHT JOIN用得较少,因为通过调整表顺序用LEFT JOIN也能实现同样效果。
核心特点:左右表记录都保留,无匹配部分显示NULL
SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
适用场景:
特性 | 内连接 | 左外连接 | 右外连接 | 全外连接 |
---|---|---|---|---|
匹配记录 | 只返回匹配行 | 左表全保留 | 右表全保留 | 两表都全保留 |
不匹配记录 | 不显示 | 右表字段为NULL | 左表字段为NULL | 不匹配侧为NULL |
结果集大小 | 最小 | 左表行数 | 右表行数 | 两表行数并集 |
性能 | 通常最快 | 次之 | 次之 | 通常最慢 |
❌ “外连接比内连接高级” → 只是适用场景不同
❌ “LEFT JOIN和RIGHT JOIN可以互换” → 需要同时调换表位置和连接类型
❌ “FULL JOIN很常用” → 实际业务中其实较少使用
现在你应该明白为什么小王的查询会丢失数据了,下次写JOIN时,不妨先问自己:我需要保留没有匹配的记录吗?这个简单的问题就能帮你选对连接类型。
(本文基于2025年7月SQL Server最新文档整理,适用于SQL Server 2022及后续版本)
本文由 国令飒 于2025-07-31发表在【云服务器提供商】,文中图片由(国令飒)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/496825.html
发表评论