SQL Server 数据库的连接查询

本文详细介绍了SQLServer中的连接查询,包括内连接、外连接、全连接和交叉查询的概念及用法,并通过实例展示了如何进行多表查询和自连接查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习了SQL Server 的连接查询,来记录一下。

什么是连接查询呢?

就是同时查询多张表,有内连接查询,外连接查询,交叉查询。而外连接查询又分左外连接查询、右外连接查询和全外连接查询,但是连接查询也可以查询一张表叫自连接查询。

INNER JOIN:表示内连接,INNER可以省略只写JOIN

ON:给出连接的条件

JOIN ... ON ...)等同于 (,... where...)


先准备2张用来查询的表 Table01,Table02:

                  Table01


                                                         Table02



那么,首先就来说一下多张表的内连接查询

select Table01.SID ,SName,CID,CContact,CPhone

from Table01 JOIN Table02

ON Table01.SID=Table02.SID

在多表连接查询时若连接的表中有相同的字段,则在引用时必须在其前面加上表的前缀(查询Table01中的SID就要写Table01.SID),若查询字段在多个表中是唯一的,则可以不加表名前缀。

查询结果:



接着说一下查询一张表的自连接查询吧,其实可以看成是一种另类的内连接。

自连接查询必须将表指定两个别名,其实就是复制一张自己的表,使其变成两张表了。

select S1.SID,S1.SName,S1.SDID,s1.SPostID

from Table01 AS S1 JOIN Table01 AS S2

ON S1.SDID!=S2.SDID and S1.SPostID=S2.SPostID

Table 定义别名 S1和S2

查询结果:



下面说一下外链接查询,有左连接查询(LEFT OUTER JOIN),右连接查询(RIGHT OUTER JOIN)和全连接查询(FULL OUTER JOIN)。 OUTER 可以省略

先准备2张表,Table01,Table02:

                           Table01                                                         Table02

        


1、左外连接查询也称左连接查询(LEFT OUTER JOIN)

概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则右表中所对应的的行为空值。

select * from  Table01 left join Table02

on Table01.classId = Table02.classId

查询结果:



2、右外连接查询也称右连接查询(RIGHT OUTER JOIN)

 概念:与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则左表中所对应的的行为空值

select * from  Table01 right join Table02

on Table01.classId = Table02.classId

查询结果:



3、全外连接查询也称全连接查询(FULL OUTER JOIN)

概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表行为空值(先根据左表查右表,查不到的话,右表的行为空值,等查好后右表剩下的全展示,左表行全为空值)

select * from  Table01 full join Table02

on Table01.classId = Table02.classId

查询结果:



最后一种就是交叉查询 (CROSS JOIN)也叫笛卡尔积,查询表使用外链接的两张表Table01,Table02

概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,就是左表的每一行分别于右表的每一行组合,返回结果的行数等于两个表行数的乘积(例如:Table01t和Table02,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数

1、不带 WHERE:

select * from  Table01 cross join Table02也可以写成select * from  Table01,Table02

查询结果 :



2、带WHERE 子句,先将2个表乘积组合,再根据条件查询

注:交叉带条件查询必须使用 WHERE,不能使用ON

select * from  Table01 CROSS join Table02

WHERE Table01.classId = Table02.classId

查询结果:



总算写完了,连接查询就这些了,看了之后是不是觉得很简单呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值