第九章高级子查询课后练习和作业

– 练习

  • 练习一

    --  1.查询比所在职位平均工资高的员工姓名,职位。
      --  相关子查询:
      select ename 员工姓名, job 职位
        from emp outer
       where sal > (select avg(sal) from emp where job = outer.job);
    
      --  子查询在from子句中使用
      select e.ename , e.job
        from emp e,(select job, avg(sal) avgsal from emp group by job) a
       where e.job = a.job
         and e.sal > a.avgsal;
    
    
    --  2.查询工资为其部门最低工资的员工编号,姓名,工资。
      --  相关子查询
      select empno 员工编号, ename 姓名, sal 工资
        from emp outer
       where sal = (select min(sal) from emp where deptno = outer.deptno);
    
      --  子查询在from字句中使用
      select empno, ename, sal
        from emp,(select deptno,min(sal) avgsal from emp group by deptno) a
       where emp.deptno = a.deptno
         and sal = a.avgsal;
    
  • 练习二

     --  1.查询所有雇员编号,名字和部门名字。
         select e.empno 员工编号,e.ename 名字,
                (select dname from dept where deptno = e.deptno) 部门名字
           from emp e;
    
     --  2.查询哪些员工是经理?
         select *
           from emp e
          where 0 < (select count(ename) from emp where mgr = e.empno);
    
     --  3.查询哪些员工不是经理?
         select *
           from emp e
          where 0 = (select count(ename) from emp where mgr = e.empno);
    
     --  4.查询每个部门工资最低的两个员工编号,姓名,工资。
         select e.empno 员工编号, e.ename 姓名, e.sal 工资,deptno
           from emp e
          where 1 >= (select count(*) 
                           from emp 
                          where deptno = e.deptno
                            and sal < e.sal)
            and deptno is not null;
    
  • 练习三

     --  1.列出至少有一个雇员的所有部门名称。
         select dname 部门名称 from dept d
          where exists (select null from emp where deptno = d.deptno);
    
     --  2.列出一个雇员都没有的所有部门名称。
         select dname 部门名称 from dept d
          where not exists (select null from emp where deptno = d.deptno);
    

– 课后作业

--  1.查询薪水多于他所在部门平均薪水的雇员名字,部门号。
    select ename 雇员姓名, deptno 部门号,sal
      from emp e
     where sal > (select avg(sal) from emp where deptno = e.deptno);

--  2.查询员工姓名和直接上级的名字。
    select e.ename 员工姓名,
           (select ename from emp where empno = e.mgr) 上级姓名
      from emp e;

--  3.查询每个部门工资最高的员工姓名,工资。
    select e.ename 员工姓名, e.sal 工资
      from emp e
     where sal = (select max(sal) from emp where deptno = e.deptno);

--  4.查询每个部门工资前两名高的员工姓名,工资。
    select e.ename 员工姓名, e.sal 工资
      from emp e
     where 1 >= (select count(ename) 
                   from emp 
                  where deptno = e.deptno
                    and sal > e.sal);

猜你喜欢

转载自blog.csdn.net/bb_code_exchange/article/details/81346700