EXISTS 指定一个子查询,检测行的存在。
语法: EXISTS subquery
参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。
结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。
例表A:TableIn | 例表B:TableEx |
![]() | ![]() |
(一). 在子查询中使用 NULL 仍然返回结果集
select * from TableIn where exists(select null)
等同于: select * from TableIn
(二). 比较使用 EXISTS 和 IN 的查询。注意两个查询返回结果不同。
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME) //因为exists返回结果为true,所以会从TableIn中查出所有的数据
select * from TableIn where ANAME in(select BNAME from TableEx)
(三). 比较使用 EXISTS 和 = ANY 的查询。注意两个查询返回结果不相同。
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME=ANY(select BNAME from TableEx)
(四).NOT EXISTS 的作用与 EXISTS 正好相反。如果子查询没有返回行,则满足了 NOT EXISTS 中的 WHERE 子句。
select * from TableIn where not exists(select BID from TableEx where BNAME=TableIn.ANAME) 结果为空集
虽然为转载的,但是修正了原文章错误的地方。
原文地址:http://www.cnblogs.com/netserver/archive/2008/12/25/1362615.html