exists

来源:互联网 发布:win7 网络 0对象 编辑:程序博客网 时间:2024/04/29 20:24

A. 在子查询中使用 NULL 仍然返回结果集
这个例子在子查询中指定 NULL,并返回结果集,通过使用 EXISTS 仍取值为 TRUE。

select * from student where exists (select null) order by age asc

select * from student order by age asc
这两者返回的结果一样。


B. 比较使用 EXISTS 和 IN 的查询
这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。

select sname from student where exists (select * from grade where sid=grade.sid and sname='aa')
select distinct sname from student where sid in (select sid from grade where sname='aa')

C.比较使用 EXISTS 和 = ANY 的查询
本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 = ANY,第二种方法使用 EXISTS。注意这两种方法返回相同的信息。
SELECT au_lname, au_fnameFROM authorsWHERE exists(SELECT * FROM publishers WHERE authors.city = publishers.city)
SELECT au_lname, au_fname FROM authorsWHERE city = ANY (SELECT city FROM publishers)

select sname from student where sid=any(select sid from grade)
select sname from student where exists (select * from grade where student.sid=grade.sid)
select sname from student inner join grade on student.sid=grade.sid


D. 使用 NOT EXISTS
NOT EXISTS 的作用与 EXISTS 正相反。如果子查询没有返回行,则满足 NOT EXISTS 中的 WHERE 子句。

select * from student where not exists (select * from grade where student.sid=grade.sid)