• oracle习题集-高级查询


    1.问题:查询每个员工的部门名称,列出员工姓名和部门名称

    select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno

    2. 问题:查询员工表中,每个员工的工资等级,列出员工姓名,工资和工资等级

    select e.ename,e.sal,s.grade from emp e,salgrade s 
    where e.sal between s.losal and s.hisal; 

    3. 查询所有比自己领导入职早的员工的姓名和上级领导的姓名

    select w.ename as 员工姓名,m.ename as 上级领导姓名
    from emp w,emp m where w.mgr=m.empno and w.hiredate<m.hiredate;

    4.问题:查询每个员工的部门名称,列出员工姓名和部门名称

    select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;

    5.问题:查询部门10中每个员工的工资等级

    select e.ename,s.grade from emp e 
    inner join salgrade s 
    on e.sal between s.losal and s.hisal --连接条件
    where e.deptno=10;                   --查询条件

    6.问题:查询emp表中部门名称为ACCOUNTING的员工的姓名,和部门位置

    1
    select
    e.ename,d.loc from emp e,dept d where e.deptno=d.deptno and d.dname='ACCOUNTING';
    2
    select
    e.ename,d.loc from emp e inner join dept d on e.deptno=d.deptno where d.dname='ACCOUNTING';
    3
    select
    e.empno,e.ename from emp e where deptno=(select deptno from dept where dept.dname = 'ACCOUNTING') order by ename ;

    7.查询高于自己部门平均工资的员工的信息,列出部门平均工资

    --(1)获得每个部门的平均工资
    select deptno,avg(sal) avg_sal from emp group by deptno;   --x
    --(2) 将x表和emp表做表连接
    select e.*,x.* from emp e,x where e.deptno=x.deptno and e.sal>x.avg_sal;
    --(3)替换x
    select e.*,x.* from 
    emp e,(select deptno,avg(sal) avg_sal from emp group by deptno)x 
    where e.deptno=x.deptno and e.sal>x.avg_sal;

    8.问题:查询没有没有员工的部门信息

    select d.* from dept d left join emp e on e.deptno=d.deptno where e.empno is null;

    9. 问题:查询和scott工作相同的员工姓名,不包含scott在内

    select emp.ename 
    from emp 
    where job= (select job from emp where ename='SCOTT') and ename <> 'SCOTT'

    10.查询blake的上级领导的姓名和工资

    select ename ,sal 
    from emp
    where empno =(select mgr from emp where ename='BLAKE' )

    11. 查询薪水高于部门30的最低薪水的员工信息

    select * 
    from emp 
    where sal < (select min(sal) from emp where deptno=30)

    12.查询哪些部门最低薪水高于部门30的最低薪水,列出这些部门薪水最低的员工信息

    --(1)查询哪些部门最低薪水高于部门30的最低薪水  --x
    select deptno,min(sal) from emp 
    group by deptno 
    having min(sal)>(select min(sal) from emp where deptno=30);
    --(2)将emp表与x做表连接
    select e.* from emp e inner join x on e.sal=x.min_sal;
    --(3)替换:
    select e.*,x.* from 
    (select deptno,min(sal) min_sal from emp 
    group by deptno 
    having min(sal)>(select min(sal) from emp where deptno=30))x 
    inner join emp e
    on e.sal=x.min_sal;

    13. 查询和SALESMAN同部门,但是不是SALESMAN的员工的信息

    select * from emp where 
    deptno in (select distinct deptno from emp where job='SALESMAN') 
    and job<>'SALESMAN';

    14.查询比任何一个SALESMAN的薪水高但不是SALESMAN的员工信息

    select * from emp where sal>any(select sal from emp where job='SALESMAN') and job<>'SALESMAN';

    -->any:大于最小的

    --<any:小于最大的

    15. 查询比所有一个SALESMAN的薪水高但不是SALESMAN的员工信息。

    >all:大于最大的

     

    <all:小于最小的

     

    select * from emp where sal>all(select sal from emp where job='SALESMAN') and job<>'SALESMAN';
    select * from emp where sal>(select max(sal) from emp where job='SALESMAN') and job<>'SALESMAN';

    16.按照部门名称和工作,来查看emp表每个部门,每种职位每个月的总开支,并且按照总开支进行降序排列

    --(1)表连接
    select e.*,d.* from emp e,dept d where e.deptno=d.deptno;
    --(2)分组求和排序
    select d.dname,e.job,sum(sal) from emp e,dept d where e.deptno=d.deptno
    group by d.dname,e.job
    order by sum(sal) desc;

    17. 查询和scott相同部门相同职位的员工

    select * from emp 
    where (deptno,job) = (select deptno,job from emp where ename='SCOTT') 

    18. 查询每个部门下面工资最低的员工

    select deptno,min(sal) from emp group by deptno;
    select * from emp 
    where (deptno,sal) in (select deptno,min(sal) from emp group by deptno);
    
    
    select * from emp e1 
    where (deptno,sal)=(select deptno,min(sal) from emp e2 where e1.deptno=e2.deptno group by deptno);

    19.列出emp表中,每个部门的员工人数和部门号

    select deptno,count(*) from emp group by deptno;

    20.列出emp表中,每个部门的员工人数和部门名称

    select d.dname,count(*) 
    from emp e,dept d 
    where e.deptno=d.deptno 
    group by d.dname;

    21.列出emp表中,部门人数大于3的员工人数和部门编号

    select deptno,count(*)
    from emp
    group by deptno
    having count(*)>3;

    22.列出emp表中,部门人数大于3的员工人数和部门名称

    1
    select
    d.dname,count(*) from dept d,emp e where d.deptno=e.deptno group by d.dname having count(*)>3;
    2
    --(1)查询每个部门的员工人数 --x select deptno,count(*) co from emp group by deptno having count(*)>3; --(2)表连接 select d.dname,x.co from dept d,x where d.deptno=x.deptno; --(3)替换 select d.dname,x.co from dept d,(select deptno,count(*) co from emp group by deptno having count(*)>3)x where d.deptno=x.deptno;

     

    --exists(select...from...)

    --如果select语句返回的结果集为空,exists(select...from...)结果是false

    --如果select语句返回的结果集不为空,exists(select...from...)结果是true

    23.查询有员工的部门的部门编号和部门名称

    select deptno,dname from dept d where exists(select * from emp e where d.deptno=e.deptno);

    24.显示职位是’MANAGER’且薪水大于2500的员工的信息

    select * from emp where job='MANAGER'
    intersect
    select * from emp where sal>2500;

    25 显示职位是MANAGER,但是薪水低于2500的员工的信息

    select * from emp where job='MANAGER'
    minus
    select * from emp where sal>=2500;


    作者:8亩田
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

    本文如对您有帮助,还请多帮 【推荐】 下此文。
    如果喜欢我的文章,请关注我的公众号
    如果有疑问,请下面留言

    学而不思则罔 思而不学则殆
  • 相关阅读:
    nginx模块学习——nginx_http_push_module模块深入讲解和聊天室实现
    常见的qq在线客服代码
    MongoDB数据库介绍及安装(一)
    Python 创建类
    Python backup脚本
    Python 类的初始化小案例
    Python 类实例化
    Python 类初始化__init__
    ObjC(ObjectiveC): NSString应该用initWithFormat? 还是 stringWithFormat?
    NSUserDefaults
  • 原文地址:https://www.cnblogs.com/liu-wang/p/8318667.html
Copyright © 2020-2023  润新知