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高级查询练习题的更多相关文章

  1. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  2. Oracle高级查询之OVER

    注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的 oracel的高级用法:rank()/dense_rank() over(partition by ...orde ...

  3. Oracle高级查询,over 用法

    注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...

  4. Oracle高级查询之CONNECT BY

    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. Oracle中的select语句可以用start with ... connect by prior ...子句实现递 ...

  5. Oracle 高级查询

    Oracle SQL 一些函数用法 以下sql环境都是在 Oracle 11g/scott完成 Group by 与GROUP BY一起使用的关建字 GROUPING,GROUP SET,ROLLUP ...

  6. Oracle高级查询、事物、过程及函数

    一.SQL函数 1.分类:单行函数(日期.数值.转换.字符等),多行函数,也称为分组函数(max.min.avg.sum.row_number.rank等). 2.数值函数 abs(n):求数字n的绝 ...

  7. Oracle高级查询,事物,过程及函数

    一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...

  8. Oracle 高级查询、事物、过程及函数

    一.Sql函数 1.数值函数(输入参数和返回值都是数值型,多数函数精确到38位) --多少次方 ,) from dual; --开方 ) from dual; --绝对值 ) from dual; - ...

  9. Oracle高级查询之over(partition by...)

    现有表,数据如下: eg1:查询年龄第二的队员 通常写法: select * from (select a.*, rownum r from (select t.* from l_student_in ...

随机推荐

  1. Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware

    前言 对于应用程序来说,应该尽量减少对spring api的耦合程度,然后有时候为了运用spring提供的一些功能,有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以 ...

  2. Spring:基于注解的Spring MVC

    什么是Spring MVC Spring MVC框架是一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...

  3. 创建工程常量 (OC中的宏定义)

    1.oc创建宏 文件 2.swift创建 常量文件 在swift中, 并非是预编译代码替换, 而是设置全局常量, 简单宏, 直接let 加常量名即可

  4. mysql编译参数详解

    mysql编译参数详解(./configure)   1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling i ...

  5. linux(6)

    第十五单元 软件包的管理 [本节内容]1. 使用RPM安装及移除软件(详见linux系统管理P374)1) 掌握RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具 ...

  6. 好用的一个object c 宏

    好用的一个object c 宏 from https://github.com/justzt/ios-helper/blob/master/Macro.h // // Macro.h // Photo ...

  7. 【转】WINSOCKET客户端编程以及JMETER外部调用

    1 public class SocketClient { 2 OutputStream clientout = null; 3 InputStream clienIn = null; 4 byte[ ...

  8. TCP之四:TCP 滑动窗口协议 详解

    滑动窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗口和接收窗口的序号的 ...

  9. Dynamics CRM early binding and late binding

    The key advantage of late bound entity classes is that customer entities and attributes not avaliabl ...

  10. PHP 简单实现webSocket

    费话少说,用源代码说话 1)客户端实现 1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 <tit ...