本文章摘抄自数据库系统概论
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词时则必须同时使用比较运算符
【例】查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄select Sname,Sage from student where Sage < ANY(select Sage from student where Sdept = "CS") AND Sdept <> "CS";
在处理执行此查询的时候,首先处理子查询,找出CS系中所有学生的年龄,构成集合,然后处理父查询,找所有不是CS系且年龄小于20或19的学生。
本查询也可以使用聚集函数来实现
Select Sage,Sname from student where Sage < (select MAX(Sage) from Student where Sdept= ‘CS’) AND Sdept != ‘CS’
【例】查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名和年龄select Sname,Sage from student where Sage < ALL (select Sage from student where Sdept = "CS") AND Sdept <> "CS";改写成Select Sage,Sname from student where Sage < (select MIN(Sage) from Student where Sdept= 'CS') AND Sdept != 'CS'
在处理执行此查询的时候,首先处理子查询,找出CS系中所有学生的年龄,构成集合,然后处理父查询,找所有不是CS系且年龄小于20和19的学生。
用聚集函数查是要比用ALL和ANY的效率要高。