关于exists运算符的理解

 

exists运算符是用来检查每一行是否匹配子查询,也可以这么认为exists就是用来测试子查询的结果是否为空,如果结果集为空则匹配结果为False,否则匹配结果为True。

下面我通过oracle表举几个例子,下面我给出三张表,T_Book,T_Category,T_Reader。

T_Book的字段: FId,FName,FYearPublished,FCategoryId

T_Category的字段: FId,FName

T_Reader的字段: FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin

查询条件:测试是否存在山东省的读者

select * from T_Book where exists
(
   select * from T_Reader where fprovince='ShanDong'
)

这句SQL语句对T_Book表中的每行数据进行匹配,测试是否存在山东省的读者!如果匹配则返回数据,不过不匹配则不返还数据!

 执行结果如下:

 

其实上面这个列子在实际中并不常用,EXISTS运算符只有和相关子查询一起使用才更有意义,在相关的子查询中引用外部查询中的这个字段,这样在匹配外部

子查询中的每行数据的时候,相关子查询就会根据当前行的信息来进行匹配判读,这样就可以实现丰富的功能。

条件:检索在1950年以前出版的图书的图书类别:

select * from T_Category a where exists
(
   select * from T_Book  where a.fid=T_Book.Fcategoryid
   and T_Book.Fyearpublished<1950
   
)

这句SQL对T_Category表中的每一行数据进行匹配,测试T_Book表中是否在FCategoryId字段值等于当前类别主键值且出版年份在1950年之前的书籍。

结果:

 

 

转载于:https://www.cnblogs.com/tangdengzhou/archive/2012/11/28/2792313.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值