SQL中 EXISTS 的用法简介

EXISTS 作用是判断某个对象是否存在,常用于判断表或在WHERE子句等条件中使用,分别介绍如下:

1,可以判断某个表或某对象是否存在

if exists(select * from sys.tables where name = 'xTable')
print '表 xTable 存在'
else
print '表 xTable 不存在'
go

2, exists 在WHERE子句中使用

注意在 WHERE 子句中 EXISTS 之前没有关联字段,可以同时还有其它的条件,如:

...WHERE EXISTS(...) 或 WHERE c1 = v1 AND [ c2 > v2  AND...] AND EXISTS ( ... ) 


一个例子:
一个表记录会议的相关内容,一个表记录参与对应会议的人员表,量表通过会议ID进行关联,先要求查处某个用户某个时间段内参与过的所有会议记录查出来;

--会议信息记录表
create table meeting(
[refid] int identity(1,1) not null,	--记录ID
[promoterId] varchar(50) not null,	--会议发起者
[meetingURL] varchar(50) not null,	--会议ID
[beginTime] datetime null default getdate(),	--会议起始时间
[endTime] datetime null,			--会议结束时间
[endType] varchar(1) default '0'	--会议结束类型,0=正常结束,1=超时退出,2=网络中断退出
primary key([refid])
)

--会议参与人员表
create table meetingUser(
[refid] int identity(1,1) not null,	--记录ID
[meetingId] varchar(50) not null,	-- = meeting.refid
[userId] varchar(50) not null,		--参与会议的人员ID
[addTime] datetime null default getdate(),	--加入会议时间
primary key([refid])
)
现在要查询某个用户某个时间段所有参与过的会议记录信息,分析:
通过 meetingUser 表查找该用户所有参与过的会议ID,然后再根据得到的会议ID,在 meeting 表中查找相关记录,这可以用 in 关键字,但 in 的个数有限制[Oracle是0 ~ 1000,SQL SERVER的范围忘了],在有限范围内是可以的,但是超出部分就不可以了;所以最好的方法是用 exists 关键字,不受范围限制,此外在加个时间范围即可;

--有限范围的 in 用法
select * from meeting 
where beginTime >= '2012-06-12' and beginTime <= '2013-02-01' 
	and refid in (select meetingId from meetingUser where userId = 'xxUserId')

--exists 用法[推荐]
select * from meeting 
where beginTime >= '2012-06-12' and beginTime <= '2013-02-01' 
	and exists (select * from meetingUser where userId = 'xxUserId')

注意: 与之相关的是 IN 关键字,但 IN 需要与某字段关联, 如:

...WHERE c1 in (...) 或 WHERE c1 in (...)  AND c2 = v2 [ AND c3 = v3 ... ]  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值