Oracle子查询
1、子查询(也叫嵌套查询):查多次,多个select嵌套出现,第一次的查询结果可以作为第二次的查询条件或表名。
2、子查询可以根据查询结果的行数的多少,可以区分为单行子查询和多行子查询。
- 单行子查询:子查询返回一行结果的查询。
- 多行子查询:子查询返回多行结果的查询。
单行子查询
单行子查询是利用where条件“=”关联查询结果的,如果单行子查询返回多行会报错:ORA-01427: 单行子查询返回多个行
案例:查询学生信息表(stuinfo)和班级表(class)中班级为“信息科学2班(18)”的所有学生信息
----在一些没有关联关系的时候利用子查询
select *
from stuinfo t
where t.classno in (select b.classno
from class b
where b.classname = '信息科学2班(18)');
结果如下:
多行子查询
Oracle多行子查询则需要利用IN关键字来接收子查询的多行结果。也可以用量化关键字ANY(SOME)、ALL和关系运算符>、>=、=、<、<=来组合使用。
-
IN关键字:表示子查询当中的所有结果。
-
ANY关键字(同SOME):表示子查询结果当中的任意一个。假如:>ANY(子查询),表示:只要大于子查询当中的任意一个值,这个条件就满足。
-
ALL关键字:表示子查询中的所有结果。假如:>ALL(子查询),表示:必须大于子查询当中的所有结果才能满足这个条件。
案例:查询班级表中所有班级的学生信息
select * from stuinfo t where t.classno in (select b.classno from class b);
结果如下:
案例:ANY关键字案例展示
--年龄只要大于当中子查询的最小值26岁即可
select * from stuinfo t where t.age>any(26,27,28);
结果如下:
案例:ALL关键字案例展示
--年龄必须大于子查询当中的最大值28岁才可以
select * from stuinfo t where t.age>all(26,27,28);
结果如下: