Oracle子查询详解

简介: 详细介绍Oracle子查询相关知识点(值得一看)

子查询

用于当一次查询的结果是另一次查询所需要的时候, 可以使
用子查询

1 单行子查询

子查询的返回结果是单行数据.

a) 查询所有比“CLARK”工资高的员工的信息

select * from emp 
where sal > (select sal from emp where  ename='CLARK'); 

b) 查询工资高于平均工资的雇员名字和工资

select ename, sal from emp
where sal>(select avg(sal) from emp); 

c) 查询和 SCOTT 同一部门且比他工资低的雇员名字和工资

select ename, sal, deptno 
from emp 
where deptno=(select deptno from emp where 
ename='SCOTT') 
and sal<(select sal from emp where ename='SCOTT'); 

d) 查询职务和 SCOTT 相同,比 SCOTT 雇佣时间早的雇员信息

select * 
from emp 
where job=(select job from emp where ename='SCOTT') 
and hiredate<(select hiredate from emp where 
ename='SCOTT'); 

2 多行子查询

子查询的返回结果是多行数据. 此时, 不能再使用普通的比较运算符了.
多行记录比较运算符:
ANY: 跟结果中的任何一个数据进行比较

查询工资低于任何一个“CLERK”的工资的雇员信息

select * from emp where sal<ANY(select sal from emp 
where job='CLERK') and job<>'CLERK'; 
ALL: 跟结果中的所有数据进行比较

查询工资比所有的“SALESMAN”都高的雇员的编号、名字和
工资

select empno, ename, sal 
from emp 
where sal>ALL(select sal from emp where 
job='SALESMAN'); 
IN: 等于结果中的任何一个

查询部门 20 中职务同部门 10 的雇员一样的雇员信息

select * 
from emp 
where job in (select job from emp where deptno=10) 
and deptno=20; 

select * 
from emp 
where job =any (select job from emp where deptno=10) 
and deptno=20;

3 相关子查询和不相关子查询

不相关子查询: 子查询不会用到外查询的数据, 子查询可以独立运行.

相关子查询: 子查询会用到外查询的数据, 子查询不能独立运行.

查询本部门最高工资的员工
a) 不相关子查询的实现方式

select * 
from emp e 
where (e.deptno, e.sal) in (select deptno, max(sal) 
from emp group by deptno); 

b) 相关子查询的实现方式
查询最高工资的部门号

select * 
from emp e 
where sal=
(select max(sal) from emp where deptno=e.deptno); 

4 子查询可以作为一张表格进行多表连接查询 

查询每个部门平均薪水的等级

select t.deptno, t.avg_sal, s.grade 
from salgrade s 
join ( 
     select deptno, avg(sal) avg_sal from emp group 
by deptno 
) t 
on t.avg_sal between s.losal and s.hisal 
order by t.deptno;


相关文章
|
7月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
113 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
Oracle-高级子查询
Oracle-高级子查询
51 0
|
SQL 机器学习/深度学习 移动开发
Oracle多表查询,子查询,分页查询
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
341 0
Oracle多表查询,子查询,分页查询
|
SQL Oracle 关系型数据库
Oracle中的分组查询、子查询、多表连接
Oracle中的分组查询、子查询、多表连接
274 0
Oracle中的分组查询、子查询、多表连接
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库
oracle学习60-oracle之高级子查询2
oracle学习60-oracle之高级子查询2
95 0
oracle学习60-oracle之高级子查询2
|
Oracle 关系型数据库
oracle学习61-oracle之高级子查询1
oracle学习61-oracle之高级子查询1
80 0
oracle学习61-oracle之高级子查询1
|
Oracle 关系型数据库
oracle学习59-oracle之高级子查询之课后练习
oracle学习59-oracle之高级子查询之课后练习
56 0
oracle学习59-oracle之高级子查询之课后练习
|
SQL 移动开发 Oracle
6-5 Oracle表复杂查询 -子查询
子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询。
218 0
|
Oracle 关系型数据库
oracle学习72-oracle之单行函数之子查询课后练习2
oracle学习72-oracle之单行函数之子查询课后练习2
109 0