关闭

懒人摘抄(内容转自CSDN资源中教程)-数据查询08-带EXISTS测试的子查询

406人阅读 评论(0) 收藏 举报

EXISTS测试的子查询

   在子查询中,还可以使用EXISTS,它一般用在WHERE子句中,其后紧跟一个SQL子查询,从而构成一个条件,当该子查询至少存在一个返回值时,这个条件为真(.T.),否则为假(.F.)

注意:使用EXISTS引入的子查询在以下几方面与其它子查询略有不同:

·  EXISTS关键字前面没有列名、常量或其它表达式。

·  EXISTS引入的子查询的选择列表通常几乎都是由星号(*)组成。由于只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。

【例5.30查询所有任课教师的tnamedepart

SELECT tname,depart

FROM teacher a

WHERE EXISTS

   (SELECT *

     FROM course b

     WHERE a.tno=b.tno)

本例执行结果如下:

tname    depart    

-------- ----------

李诚       计算机系 

王萍       计算机系 

张旭       电子工程系

本例也有一个相关子查询,其执行过程是:从头到尾扫描teacher表的行,对于每个行,执行子查询,此时,a.tno是一个常量,子查询便是在course表中查找tno等于该常量的行,如果存在这样的行,EXISTS子句便返回真,主查询屏幕显示teacher表中的当前行;如果子查询未找到这样的行,EXISTS子句返回假,主查询不显示teacher表中的当前行。主查询继续查找teacher表的下一行,其过程与上述相同。

5.31查询所有未讲课的教师的tnamedepart

SELECT tname,depart

FROM teacher a

WHERE NOT EXISTS

(SELECT *

    FROM course b

    WHERE a.tno=b.tno)

本例执行结果如下:

tname    depart    

-------- ----------

刘冰       电子工程系

本例的执行过程与上例基本相同,只是将EXISTS子句的结果取反,当子查询找到了这样的行,WHERE条件为假;当子查询未找到这样的行,则WHERE条件为真,所示查询结果与上例正好相反。 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:438827次
    • 积分:6994
    • 等级:
    • 排名:第3379名
    • 原创:250篇
    • 转载:100篇
    • 译文:0篇
    • 评论:42条
    最新评论