欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

oracle 基本语句学习 (三)之子查询

程序员文章站 2024-04-04 09:24:29
...

1 子查询 ex: 查出 姓名, 其工资在平均工资之上 select ename,sal from emp where sal (select avg(sal) from emp) ; 2 见表子查询 查询每个部门中工资最高的人 . 直观方法 select ename,sal from emp where sal in (select max(sal) from emp group by dept

1 子查询

ex: 查出 姓名, 其工资在平均工资之上

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


2 见表子查询

查询每个部门中工资最高的人 .

直观方法 select ename,sal from emp where sal in (select max(sal) from emp group by deptno) ;

这样的查询方式会出现一个错误, 假如 A部门最高薪水5000, 而A部门的p员工薪水3000, 却等于B部门的最高薪水, 那么员工也将显示出来;


正确方法如下:

首先 , 可以发现 select max(sal) from emp group by deptno 能得到一张表 , 如下图所示

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询


那么 只要在emp中找到部门 和薪水都与此表一致的员工即可.


语句如下:

1 select ename ,sal from emp

2 join (select max(sal)max_sal, deptno from emp group by deptno) t //连接表

3 on( emp.sal=t.max_sal and emp.deptno=t.deptno) ; // 连接条件


oracle 基本语句学习 (三)之子查询


oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询

oracle 基本语句学习 (三)之子查询