子查询
用一条语句的查询结果作为另一个循环的条件,即嵌套在主查询中的查询,可以嵌套在主查询中所有位置,包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。
select *from emp where sal>=(select max(sal) from emp);//条件为≥最大工资
select *from emp where sal>=(select avg(sal) from emp);//条件为≥平均工资
select *from emp where sal>=(select min(sal) from emp);//条件为≥最小工资
子查询谓词运算符
ALL/ANY/SOME
- 返回单值可单独使用比较运算符
例如查询Tom的同班同学中年龄比Tom大的:
select *from student WHERE age>(select age from student WHERE name='Tom')
- 但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词的时候必须同时使用比较运算符。例如>ALL,<=ANY
例如查询Tom的同班同学中年龄最大的人:
select *from student
WHERE age>ALL(select age from student //嵌套最外层,找到满足age>all的同学,即为年龄最大的同学
WHERE class_id=(select class_id from student //嵌套第二层,找到所有同班同学的年龄大小
WHERE name='Tom'))//嵌套最内层,找到Tom的同班同学
IN/NOT IN
在嵌套查询中,子查询的结构往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。
NOT IN是<> ALL(或!=ALL)的别名,表意相同。
例如,查询Tom的同班同学可用以下方式:
select *from student WHERE class_id IN(select class_id from student WHERE name='Tom')
而查询Tom以外班级的同学可以用NOT IN实现:
select *from student WHERE class_id NOT IN(select class_id from student WHERE name='Tom')
EXISTS/NOT EXISTS
可以理解为“∃”,不返回任何数据,只产生逻辑真值“true”或逻辑假值"false"。判断是否满足跨表的某个条件,格式为WHERE EXISTS(条件)。
1019

被折叠的 条评论
为什么被折叠?



