SQL SERVER表联接查询的各种写法

本文详细解析了SQL中的联接方式,包括内联接、左联接、右联接、全联接以及in、exists查询的区别,并通过实例演示了如何在不同场景下灵活运用这些联接方式。

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

经常在网络上看到各种的联接写法,经常接触到full,outer join ,inner join ,left join,right join,in,exists等。一直不是很清楚各种关键字的意思;今天总结下,一自己解惑,二分享给享给同样疑惑的朋友.


1、用","区分表,系统自动用inner join 方式连接

select * from Inventory a,InventoryClass b,bas_part c 
where a.cInvCCode=b.cInvCCode and a.cInvCode=c.InvCode
 
2、内联接 inner join 
select * from Inventory a inner join InventoryClass b on a.cInvCCode=b.cInvCCode
inner join  bas_part c on a.cInvCode=c.InvCode
 
3、in查找方式,系统自动用inner join方式配匹
select * from Inventory a where a.cInvCCode in(select b.cInvCCode from InventoryClass b)
and cInvCode in(select c.InvCode from bas_part c)
注:结果集比较大的情况下则用join的效率高于用in。ps来源网络
in多表查询“执行计划”显示优于inner join ,但查询结集只返回a表的数据。
作用不相同比较速度是没意义的。
 
4、隐式join,系统自动用inner join(效果同inner join)
SELECT TOP 10 * FROM inventory a join InventoryClass b on a.cInvCCode=b.cInvCCode
 
5、left join左联接,左表记录全部显示
SELECT  * FROM inventory a left outer join InventoryClass b on a.cInvCCode=b.cInvCCode
 
6、right join右联接,右表记录全部显示
SELECT  * FROM inventory a right outer join InventoryClass b on a.cInvCCode=b.cInvCCode
 
7、两表外联接 full join或full outer join,两种写法都一样。两表记录全部显示
select  * from Inventory a full outer join InventoryClass b on a.cInvCCode=b.cInvCCode
select  * from Inventory a full join InventoryClass b on a.cInvCCode=b.cInvCCode

联接查询可使用多条件。
例如:
select * from Inventory a,InventoryClass b where a.cInvCCode=b.cInvCCode and a.cInvName=b.cInvCName
或:select * from Inventory a inner join InventoryClass b on a.cInvCCode=b.cInvCCode and  a.cInvName=b.cInvCName




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值