SQL语句之EXSITS谓词

SQL语句十分重要,然而在我SQL语句的学习过程中始终有一篇雷区--EXSITS谓词。一直没有理解到EXISTS谓词的使用方法。今天终于弄懂了一点,所以记在了这里。

先来看一看教材上的说法:带有EXISTS谓词的子查询不反回任何数据,只产生逻辑真值“true”或逻辑假值“false”。使用存在量词EXISTS后,若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。

看完后还是不懂,究竟这个返回的真值假值对于我外层的查询有个什么约束呢?

举个例子:

现在有一个学生表,和一个选课表。非常常见的表了,所以表里面的字段就不一一赘述了。

来看需求:查询所有选修了1号课程的学生姓名。

这个需求平时我会很快地想到连接查询很快搞定:

SELECT student.name

FROM student,sc

WHERE stu.sno=sc.sno

AND sc.cno='1'; 

还可以用嵌套查询:

SELECT name 

FROM student

WHERE sno IN(

SELECT sno FROM sc WHERE cno='1'

)

这样写确实也能查出结果,但是我们都知道连接查询在性能上来说是很差的,会给数据库带来很大的压力。

而使用EXISTS效率比IN要好,它门的作用都差不多:

SELECT student.name

FROM student

WHERE ESXITS(

SELECT * FROM sc WHERE

sno=student.sno AND cno='1'

)

EXISTS的作用是什么呢?

可以将sql查询理解成一条一条地查询的,对于每一条记录的查询,只要EXISTS字句有结果返回,那么这一个条件就成立了。

以上纯属个人理解,欢迎指正!

猜你喜欢

转载自www.cnblogs.com/zhihow/p/9059570.html