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

 

结果

 

posted @   v迷糊v  阅读(306)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示