Sql server基础使用(三):多表联查
对所学Sqlserver知识进行一下记录总结,某些用法之间还可以关联使用,欢迎补充和讨论。本人比较懒,结果的截图暂时就先不传了,什么时候想起来再说吧~~
这个东西,以我语文不及格的嘴,还真是不太解释的清楚~~
虽然嘴残,但还是大概的以我的理解说一下吧。
首先,多表联查 一般包括:LEFT JOIN / LEFT OUTER JOIN、RIGHT JOIN / RIGHT OUTER JOIN、INNER JOIN、FULL JOIN ,打个比方:可以看成将多个表 “横向关联”
中间有没有 OUTER 效果是一样的,INNER JOIN 也可以简写成 JOIN
在我的理解中,LEFT JOIN 和 RIGHT JOIN 其实就是一种东西,区别只是以前面的表为主表进行连接还是以后面的表进行连接。
1.左/右 连接 (LEFT JOIN / LEFT OUTER JOIN、RIGHT JOIN / RIGHT OUTER JOIN)
以前面的表为主表,后面的所有表为子表(不一定只 left join 一个表,可以多个),主表的数据会完全被查出,子表中只有符合关联条件(on a.aaa=b.bbb)的数据会被查出,主表有但子表没有的会显示 NULL
(右连接知识把左连接反过来,这里就省略了)
实在是有点解释不清啊,还是上图吧
这是表A 这是表B
----以表A为主表 以表A中的AID和表B中的AID进行关联 SELECT * FROM dbo.Table_A LEFT OUTER JOIN dbo.Table_B ON Table_A.AID=Table_B.AID
显示结果
----以表B为主表 SELECT * FROM dbo.Table_B LEFT OUTER JOIN dbo.Table_A ON Table_A.AID=Table_B.AID
显示结果
2.INNER JOIN
关于这里,我感觉可以做一个比较形象的比喻
上学时应该都学过集合,我们将表A当作集合A,表B当作集合B,inner join 就是将集合A和集合B重合的一部分数据取出来~就好比下图,关联后查出的数据就是“交集”部分,也就是箭头指向的部分。
表A inner join 表B 和 表B inner join 表A ,结果是一样的
SELECT * FROM dbo.Table_B INNER JOIN dbo.Table_A ON Table_A.AID=Table_B.AID SELECT * FROM dbo.Table_A INNER JOIN dbo.Table_B ON Table_A.AID=Table_B.AID
结果 只显示A和B有交集的部分
3.FULL JOIN
也可以勉强套用上面的比喻,只是显示的结果不同,现在的结果会包含 交集 部分,和AB中未交集的部分,只是未交集的部分会显示 NULL,如下图所示。(表A full join 表B 和 表B full join 表A ,结果是一样的)
SELECT * FROM dbo.Table_A FULL JOIN dbo.Table_B ON Table_A.AID=Table_B.AID
4.我把 UNION / UNION ALL 也放到这里了
UNION ALL 可以看成将多个表的 “纵向累加”,也就是将多个表,按相同的结构,将数据累加到一起,比如A表有4条数据,B表有4条数据,UNION ALL 后将变成8条数据
需要注意的是,UNION 和 UNION ALL 有一定的区别,UNION ALL 是粗暴的将全部数据累加,不考虑重复,UNION 有时候会将完全相同的两行或多行数据省略成一行,这里就不作演示了
SELECT AID, AAA,NULL BBB FROM Table_A UNION ALL SELECT AID, NULL AAA,BBB FROM Table_B
结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!