oracle高级查询练习题
1、 列出员工表中每个部门的员工数和部门编号
Select deptno,count(*) from emp group by deptno;
补充1:列出员工表中,员工人数大于3的部门编号和员工人数
Select deptno,count(*) from emp group by deptno having count(*)>3;
补充2:列出员工表中,员工人数大于3的部门的部门编号,部门名称和部门位置
答案1:Select d.* from dept d,(select deptno,count(*) from emp group bydeptno having count(*)>3)x where d.deptno=x.deptno;
答案2:select * from dept where deptno in (select deptno from emp group bydeptno having count(*)>3);
补充3:列出员工表中,员工人数大于3的部门的部门编号,名称,位置和员工人数。
Select d.*,x.co from dept d,(selectdeptno,count(*) co from emp group by deptno having count(*)>3)x whered.deptno=x.deptno;(注意看聚合函数的处理方式)
2、 列出员工表中每个部门的员工数(员工数必须大于3),和部门名称
(1).先列出员工数大于3的部门号
Select deptno,count(*) from emp group by deptno having count(*)>3;
(2)列出员工表中每个部门的员工数(员工数必须大于3),和部门名称
Select x.co,d.dname from dept d,( Select deptno,count(*) cofrom emp group by deptno having count(*)>3)x where x.deptno=d.deptno ;
3、 找出工资比JONES多的员工
Select * from emp where sal>(select salfrom emp where ename=’JONES’);Select * from emp where sal>(select sal from emp where ename=’JONES’);
4、 列出所有员工的姓名和其上级的姓名(表的自连接)
Select e1.ename,e2.ename from emp e1,emp e2where e1.mgr=e2.empno;
5、 以职位分组,找出平均工资最高的两种职位
(1)先以职位分组并按平均工资降序排序
Select job,avg(sal)avg_sal from emp group by job order by avg_sal desc;
(2)找到前两位
Select x.* from (Select job,avg(sal) avg_sal from emp group by job order by avg_sal desc)x where rownum <= 2;
补充:查找出不在部门20,且比部门20中任何一个人工资都高的员工的姓名、部门名称
(1)先找出部门20的最高薪水
Select max(sal) from emp where deptno =20;
(2)再找到薪水比(1)高的且不在部门20
Select e.ename,d.dname from emp e,dept dwhere e.deptno=d.deptno and e.sal>( Select max(sal) from emp where deptno =20)and e.deptno!=20;
方法2: select e.ename,e.sal,d.dnamefrom emp e,dept d where e.deptno=d.deptno and e.deptno<>20 ande.sal>all(select sal from emp where deptno=20);
6、 得到平均工资大于2000的工作职种
Select job,avg(sal) from emp group by job havingavg(sal)>2000;
7、 分部门得到工资大于2000的所有员工的平均工资,并且平均工资还要大于2500
Select deptno,avg(sal) from emp where sal>2000 group bydeptno having avg(sal)>2500
8、 得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置
Select *from dept where deptno in(select x.deptno from (select deptno from emp group bydeptno order by sum(sal))x where rownum=1);
(1) 先按照工资总数升序排序
Select deptno from emp group bydeptno order by sum(sal); --x
(2) 找到第一位(即工资总数最少)
Select x.* from (Select deptnofrom emp group by deptno order by sum(sal))x where rownum=1;
(3) Select * from dept where deptno=( Select x.* from (Selectdeptno from emp group by deptno order by sum(sal))x where rownum=1);
9、 分部门得到平均工资等级为3级(等级表)的部门编号
思路:(1)获取到每个部门的平均工资x
Select deptno,avg(sal) avg_sal from emp group by deptno;
(2)获取到平均工资的等级。需要将x与salgrade做非等值连接。
select x.*,s.* fromx,salgrade s where x.avg_sal between s.losal and s.hisal;
(3) 将第二步中的x用(1)的语句替换 --最终结果
select x.*,s.* from (Selectdeptno,avg(sal) avg_sal from emp group by deptno)x,salgrade s where x.avg_salbetween s.losal and s.hisal and s.grade=3;
10、 查找出部门10和部门20中,工资最高第3名到第5名的员工的员工名字,部门名字,部门位置
(1)部门10和20按工资
Select * from emp where deptno in(10,20) order by sal desc;
(2)排名3-5
Select * from (Select rownum ro ,x.*from (Select * from emp wheredeptno in(10,20) order by sal desc)x )where ro>=3 and ro <=5;
3)员工名字,部门名字,部门
Select e.ename,d.dname,d.loc from (Select * from (Select rownum ro ,x.*from(Select * from emp where deptno in(10,20) order by sal desc)x )where ro>=3and ro <=5)e,dept d where e.deptno=d.deptno;
11、 查找出收入(工资加上奖金),下级比自己上级还高的员工编号,员工名字,员工收入
Select e1.empno,e1.ename,e1.sal+nvl(e1.comm,0)from emp e1,emp e2 where e1.mgr=e2.empno and e1.sal+nvl(e1.comm,0)>e2.sal+nvl(e2.comm,0);
12、 查找出工资等级不为4级的员工的员工名字,部门名字,部门位置
(1)工资等级
Select e.*,s.grade from emp e,salrade s where e.sal between s.losal ands.hisal;
(2)工资等级不为4
Select e1.ename,d.dname,d.loc,e1.grade from ( Select e.*,s.grade fromemp e,salgrade s where e.sal between s.losal and s.hisal)e1,dept d whered.deptno=e1.deptno and e1.grade != 4;
方法2:三表连接!!!!!!!!
Select e.ename,d.dname,d.loc,s.grade from emp e,dept d,salgrade s wheree.deptno=d.deptno and e.sal between s.losal and s.hisal and s.grade<>4;
13、 查找出职位和‘MARTIN’或者‘SMITH’一样的员工的平均工资
Select avg(sal) from emp where job in(selectjob from emp where ename in(‘MARTIN’,’SMITH’));
14、 查找出不属于任何部门的员工
Select * from emp where deptno is null;
15、 按照部门统计员工数,查出员工数最多的部门的第二名到第五名(列出部门名字,部门位置)
(1)统计各部门员工数,并降序排序
Select count(*), deptno from emp group by deptno order by count(*) desc;
(2)2-5名
Select * from (Select rownum ro,x.* from (Select count(*), deptno fromemp group by deptno order by count(*) desc)x) where ro>=2 and ro<=5;
(3)
Select d.*,x1.* from dept d,( Select * from (Select rownum ro,x.* from(Select count(*), deptno from emp group by deptno order by count(*) desc)x) wherero>=2 and ro<=5)x1 where d.deptno=x1.deptno;
16、 查出KING所在部门的部门号、部门名称、部门人数
(1)king所在的部门
Select deptno from emp where ename=’KING’
(2)
Select d.deptno,d.dname,count(*) from empe,dept d where e.deptno=d.deptno and d.deptno=( Select deptno from emp whereename=’KING’) group by d.deptno,d.dname;
17、 查出KING所在部门的工作年限最大的员工名字
Select ename from emp where deptno=(select deptno from empwhere ename=’KING’) and hiredate=(select min(hiredate) from emp where deptno=( selectdeptno from emp where ename=’KING’));
18、 查出工资成本最高的部门的部门号和部门名称
(1)工资成本
Select sum(sal)+sum(nvl(comm,0)) sum_sal,deptno from emp group by deptno order by sum_sal desc;
(2)找到第一位
Select d.*,x.sum_sal from dept d ,( Select sum(sal)+sum(nvl(comm,0))sum_sal,deptno from emp group by deptno orderby sum_sal desc)x where x.deptno=d.deptno and rownum=1;
oracle高级查询练习题的更多相关文章
- oracle高级查询(实例基于scott用户四张表)
oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...
- Oracle高级查询之OVER
注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的 oracel的高级用法:rank()/dense_rank() over(partition by ...orde ...
- Oracle高级查询,over 用法
注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...
- Oracle高级查询之CONNECT BY
为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. Oracle中的select语句可以用start with ... connect by prior ...子句实现递 ...
- Oracle 高级查询
Oracle SQL 一些函数用法 以下sql环境都是在 Oracle 11g/scott完成 Group by 与GROUP BY一起使用的关建字 GROUPING,GROUP SET,ROLLUP ...
- Oracle高级查询、事物、过程及函数
一.SQL函数 1.分类:单行函数(日期.数值.转换.字符等),多行函数,也称为分组函数(max.min.avg.sum.row_number.rank等). 2.数值函数 abs(n):求数字n的绝 ...
- Oracle高级查询,事物,过程及函数
一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...
- Oracle 高级查询、事物、过程及函数
一.Sql函数 1.数值函数(输入参数和返回值都是数值型,多数函数精确到38位) --多少次方 ,) from dual; --开方 ) from dual; --绝对值 ) from dual; - ...
- Oracle高级查询之over(partition by...)
现有表,数据如下: eg1:查询年龄第二的队员 通常写法: select * from (select a.*, rownum r from (select t.* from l_student_in ...
随机推荐
- Python sh库学习
官方文档有句话"allows you to call any program",并且: helps you write shell scripts in Python by giv ...
- LeetCode Delete Operation for Two Strings
原题链接在这里:https://leetcode.com/problems/delete-operation-for-two-strings/description/ 题目: Given two wo ...
- 基于Python语言使用RabbitMQ消息队列(六)
远程过程调用(RPC) 在第二节里我们学会了如何使用工作队列在多个工人中分布时间消耗性任务. 但如果我们想要运行存在于远程计算机上的方法并等待返回结果该如何去做呢?这就不太一样了,这种模式就是常说的远 ...
- fn project 试用之后的几个问题的解答
今天试用fnproject 之后自己有些思考,后面继续解决 1. 目前测试是强依赖 dockerhub 的,实际可能不是很方便 2. 如何与k8s .mesos.docker swarm 集成 ...
- tensorflow学习笔记(三十九):双向rnn
tensorflow 双向 rnn 如何在tensorflow中实现双向rnn 单层双向rnn 单层双向rnn (cs224d) tensorflow中已经提供了双向rnn的接口,它就是tf.nn.b ...
- java实现一个最简单的tomcat服务
在了解tomcat的基本原理之前,首先要了解tomcatt最基本的运行原理. 1.如何启动? main方法是程序的入口,tomcat也不例外,查看tomcat源码,发现main是在Bootstrap ...
- 批处理判断是否有.net环境
@echo off (echo 已安装.NET Framework) else (echo 未安装.NET Framework) pause>nul
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...
- Mysql参见SHOW命令总结
Mysql参见SHOW命令总结 MySQL Show命令的用法大全
- 迭代器-迭代对象-dir(a)可以查看该数据类型有多少种方法。range(10)在py3里就是一个迭代器,for循环实际就是迭代器的应用
迭代器 我们已经知道,可以直接作用于for循环的数据烈性有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str,bytes等: 一类是generator,数据结构,包括生成 ...