(数据库)10_子查询------随堂练习

10_子查询------随堂练习


1、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称,上级的姓名

    第一步:使用emp表实现自身关联,查询出员工的编号,姓名,上级姓名
SELECT e.empno,e.ename,m.ename FROM emp e,emp m 
WHERE  e.mgr = m.empno(+) AND  e.hiredate < m.hiredate; 
第二步:找到部门名称
SELECT e.empno,e.ename,m.ename,d.dname FROM emp e,emp m ,dept d
WHERE  e.mgr = m.empno(+) AND  e.hiredate < m.hiredate AND  e.deptno = d.deptno;
select e.employee_id , e.last_name ,  m.last_name,d.department_name
from employees e , employees m , departments d 
where e.manager_id = m.employee_id  and e.hire_date < m.hire_date and e.department_id = d.department_id;

2、列出薪金比“SMITH”高的所有员工
第一步:找到SMITH的工资

SELECT sal FROM emp WHERE ename = 'SMITH';
第二步:使用1的结果在WHERE子句中,执行查询
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'SMITH');

3、列出所有“CLERK”(办事员)的姓名及其部门名称,部门人数
第一步:找到所有的办事员信息

SELECT e.ename FROM emp e WHERE  e.job = 'CLERK' ;
第二步:找到部门数据
SELECT e.ename,d.dname FROM emp e , dept d WHERE  e.job = 'CLERK'  AND e.deptno = d.deptno; 
第三步:增加子查询,查询部门人数
SELECT e.ename,d.dname ,temp.count FROM emp e,dept d,(
     SELECT deptno dno,COUNT(empno) count FROM emp GROUP BY deptno) temp
WHERE e.job = 'CLERK' AND e.deptno = d.deptno AND d.deptno = temp.dno;    

4、列出与“SCOTT”从事相同工作的所有员工及部门名称

SELECT job FROM emp WHERE ename = 'SCOTT';
     第二步:筛选员工数据和部门名称
SELECT e.* ,d.* FROM emp e,dept d WHERE e.deptno = d.deptno AND e.job = (
         SELECT job FROM emp WHERE ename = 'SCOTT'); 

5、列出各职位的最低工资以及从事此工作的雇员姓名。
第一步:按照职位分组,进而统计出职位名称和最低工资

SELECT job,MIN(sal)  min FROM emp GROUP BY job;
第二步:将以上的查询作为FROM 子句的数据
SELECT e.* FROM emp e,(
     SELECT job ,MIN(sal) min FROM emp GROUP BY job) temp
WHERE  e.job = temp.job AND e.sal = temp.min;

6.部门平均工资最高的部门名称
第一步:按照部门分组,查询出所有部门中平均工资的最大值

SELECT max(avg(sal))   FROM emp   GROUP BY deptno
         第二步:按照部门分组,查询出平均工资最高的部门的部门编号
SELECT   deptno   FROM   emp    GROUP BY    deptno
       HAVING    AVG (sal) = (
          SELECT    MAX (AVG(sal))   FROM    emp    GROUP BY   deptno
   )

第三步:根据获得的部门编号,得到部门的详细信息

SELECT *  FROM dept  WHERE deptno = (
      SELECT   deptno   FROM   emp    GROUP BY    deptno
       HAVING    AVG (sal) = (
          SELECT    MAX (AVG(sal))   FROM    emp    GROUP BY   deptno
            )
    )
发布了67 篇原创文章 · 获赞 6 · 访问量 1929

猜你喜欢

转载自blog.csdn.net/weixin_45801537/article/details/104355227