专栏首页Java探索之路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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Oracle中的基本SQL知识

    a) SQL, Structured Query Language, 结构化查询语言 b) SQL 是最重要的关系数据库操作语言,是所有关系数据库 管理系统...

    时间静止不是简史
  • SQL92、SQL99中的多表连接查询区别

    left [outer] join, 表示左外连接, 可以显示左表中不满足 连接条件的数据

    时间静止不是简史
  • Oracle数据库相关函数解析

    在 Oracle 中, 提供了一个虚拟表格, 叫 dual, 专门用于进行测试, 可以从daul 中查询任何数据

    时间静止不是简史
  • MySQL数据库(良心资料)

    我们所说的数据库泛指“关系型数据库管理系统(RDBMS-Relational database management system)”,即“数据库服务器”。

    阮键
  • Oracle数据库之第一篇

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    海仔
  • Oracle - 函数及多表关联

    函数一般是在数据上执行的,它给数据的转换和处理提供了方便。只是将取出的数据进行处理,不会改变数据库中的值。函数根据处理的数据分为单行函数和聚合函数(组函数),组...

    Carlos Ouyang
  • Mysql进阶

    1) 内连接 select a.*,b.* from a inner join b on a.id=b.parent_i...

    李智
  • Oracle数据库(二)常用关键字以及函数

    常用关键字 insert into---插入数据 delete---删除数据 update---更新一条数据 select---实际工作中尽量不要写...

    二十三年蝉
  • day3 sql语句

    sqlplus / as sysdba startup sqlplus scott/tiger vi .bash_profile 容宽不够 set lines ...

    98k
  • 数据库相关

    代码改变世界-coding

扫码关注云+社区

领取腾讯云代金券