SQL Server进阶(4):cross join、inner join、left join、right jion、union、union all
测试数据脚本

CREATE TABLE Atable ( S# INT, Sname nvarchar(32), Sage INT, Sfrom nvarchar(8) ) insert into Atable select 1,N'李四',18,N'A' union all select 2,N'tom',19, N'A' union all select 3,N'刘一',17,N'A' union all select 4,N'jack',18,N'A' CREATE TABLE Btable ( S# INT, Sname nvarchar(32), Sage INT, Sfrom nvarchar(8) ) insert into Btable select 1,N'刘一',18,N'B' union all select 2,N'钱二',19,N'B' union all select 3,N'张三',17,N'B' union all select 4,N'李四',18,N'B'
数据表
1.cross join
交叉连接不需要任何连接条件。两个表的的数据直接进行笛卡尔积运算。如果一个表有m行,而另一个表有n行,将得到m*n的结果集。
1 | SELECT * FROM Atable as A cross join Btable as B order by A.S# |
2.inner join == join
内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。
对两个输入表进行笛卡尔积,然后根据指定的谓词对结果行进行过滤。
怎么理解内联接:
理解内联接最容易的方法是认为A表中每一行同C表中的所有行进行比较,如果A表中的id和C表中的id相等,则匹配成功。
另外一种更正式的方法是在关系代数的基础上来考虑内联接,联接运算首先对两个表求笛卡尔积(4行A记录*5行C记录=20行记录),然后根据条件C.id=A.id对行进行过滤,最终返回16行。
1 | SELECT * FROM Atable as A INNER JOIN Btable as B ON A.Sname = B.Sname |
3.left outer join == left join
产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。
1 | SELECT * FROM Atable as A left outer join Btable as B ON A.Sname = B.Sname |
4.right outer join == right jion
产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
1 | SELECT * FROM Atable as A right outer join Btable as B ON A.Sname = B.Sname |
5.full outer join == full join
产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
1 | SELECT * FROM Atable as A full join Btable as B ON A.Sname = B.Sname |
6.union与union all
区别就是联合查询的时候union会去重,union all不会去重
1 | 通过 UNION 运算符来将两张表纵向联接,基本方式为: |
1 2 3 4 5 6 7 | SELECT 列1 , 列2 FROM 表1 UNION SELECT 列3 , 列4 FROM 表2; UNION ALL 为保留重复行: SELECT 列1 , 列2 FROM 表1 UNION ALL SELECT 列3 , 列4 FROM 表2; |
1 2 | SELECT Sname FROM Atable UNION SELECT Sname FROM Btable SELECT Sname FROM Atable UNION ALL SELECT Sname FROM Btable |
CROSS JOIN--自交叉联接
对同一个表进行联接,就是自联接。交叉联接、内联接、外联接都支持自联接。
SELECT A1.a,A2.a FROM A AS A1 CROSS JOIN A AS A2
A表有4行,查询会生成一个包含4*4=16行的数据的结果集。
在自联接中,必须为表起别名。如果不为表指定别名,联接结果中的列名就会有歧义。
比如在本例中,别名为A1,A2。
小结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-01-15 设计模式的艺术
2017-01-15 高并发数据库之MySql性能优化实战总结