--带有any(some)或者all谓词的子查询--子查询返回单值时可以使用比较运算符,但返回多个值时要用any(有的系统使用some)或者all谓词--而使用any(some)或者all谓词时则必须同时使用比较运算符-->any 大于子查询结果中的某个值-->all 大于子查询结果中的所有值--<any 小于子查询结果中的某个值--<all 小于子查询结果中的所有值-->=any 大于或者等于子查询结果中的某个值-->=all 大于或者等于子查询结果中的所有值--<=any 小于或者等于子查询结果中的某个值--<=all 小于或者等于子查询结果中的所有值--=any 等于子查询结果中的的某个值--=all 等于子查询结果中的所有值--!=/<>any 不等于子查询结果中的某个值--!=/<>all 不等于子查询结果中的所有值--查询非计算机系中比计算机系任意一个学生年龄小的学生姓名和年龄--比计算机系任意一个学生年龄小即可,那么说明只需要比计算机系年龄最大的那个学生的年龄小即可--那么就意味着存在一个非计算机系的学生,他的年龄比计算机系中所有学生中某一个学生的年龄要小--至少是比计算机系年龄最大的那个学生的年龄要小--所有计算机系学生的最大的年龄selectmax(Sage)
from Student
where Sdept='CS';--->Max(Sage)=20--查询出非计算机系学生中比计算机系学生中最大的年龄20小的学生姓名,年龄select Sname,Sage
from Student
where Sage<20and Sdept<>'CS';--将上面的两条SQL简单查询语句合并成一条嵌套查询--方式一:本查询也可以使用聚集函数来实现,首先使用子查询查找出CS系中的年龄最大值,--然后在父查询中查找出每个非CS系并且年龄小于20岁的学生姓名和年龄(该方法效率更高)select Sname,Sage
from Student
where Sage<(
selectmax(Sage)
from Student
)
and Sdept<>'CS';--查询非计算机系中比计算机系任意一个学生年龄小的学生姓名和年龄--方式二(使用any谓词和比较运算符组合连接父查询和子查询)select Sname,Sage
from Student
where Sage<any
(select Sage
from Student
where Sdept='CS'
)
and Sdept<>'CS';--将any换成some,也是可以执行成功的,说明oracle数据库支持any/some--(使用some谓词和比较运算符组合连接内层查询和外层查询)select Sname,Sage
from Student
where Sage<some
(select Sage
from Student
where Sdept='CS'
)
and Sdept<>'CS';--关系数据库管理系统在执行此查询时,首先处理子查询,找出计算机系中所有学生的年龄--构成一个单值的集合;然后处理父查询,找出所有非计算机系学生并且年龄小于20或者19的学生--查询非计算机系中比计算机科学系所有学生年龄都要小的学生姓名和年龄--方式一:(使用all谓词和比较运算符组合连接子查询和父查询)select Sname,Sage
from Student
where Sdept<>'CS'and
Sage<all
(select Sage
from Student
where Sdept='CS'
);--方式二:(使用聚集函数来实现)--查询非计算机系中比计算机科学系所有学生年龄都要小的学生姓名和年龄--比计算机系的所有学生的年龄都要小,<==>这时候只需要比计算机系的所有学生年龄最小的--那个学生的年龄小即可select Sname,Sage
from Student
where Sage<
(selectmin(Sage)
from Student
where Sdept='CS'
)
and Sdept<>'CS';--事实上,使用聚集函数实现子查询通常比直接使用any(some)或者all查询效率要高.