MySQL多表与分组练习题及答案

目录


题目 

 答案


题目 

-- 多表与分组练习
-- 注意:员工如果没有特殊指明,指的就是所有人。

-- 1、返回部门号及其本部门的最低工资。


-- 2、计算出员工的年薪,并且以年薪排序。


-- 3、返回员工工作及其从事此工作的最低工资。


-- 3查找和SCOTT从事相同工作的员工信息


-- 4、工资水平多于JAMES的员工信息。


-- 5、返回工资大于平均工资的员工信息。


-- 6、返回销售部(SALES)所有员工的姓名。


-- 7、返回工资高于30部门所有员工工资水平的员工信息。


-- 8返回查找最高工资和最低工资的职员信息


-- 9、返回拥有员工的部门名、部门号。


-- 10、返回员工的姓名、所在部门名及其工资。


-- 11、返回从事职员工作的员工姓名和所在部门名称。


-- 13、返回部门号、部门名、部门所在位置及其每个部门的员工总数。    


-- 14、返回员工(职员或者销售员)和所属经理的姓名。


-- 15、返回员工(职员或者销售员)的入职日期早于其经理入职日期的员工及其经理姓名。


-- 16、返回工资处于第四级别的员工的姓名和工资。


-- 17、返回处于第二级别的最高工资和最低工资的职员信息

 答案

-- 多表与分组练习
-- 注意:员工如果没有特殊指明,指的就是所有人。

-- 1、返回部门号及其本部门的最低工资。
SELECT DEPTNO,MIN(sal) FROM emp GROUP BY DEPTNO;
-- 2、计算出员工的年薪,并且以年薪排序。
SELECT *,sal*12 allsal FROM emp ORDER BY allsal DESC;
-- 3、返回员工工作及其从事此工作的最低工资。
SELECT job,MIN(sal) FROM emp GROUP BY job;
-- 3查找和SCOTT从事相同工作的员工信息
SELECT job FROM emp WHERE ename='SCOTT';
SELECT * FROM emp WHERE job=(SELECT job FROM emp WHERE ename='SCOTT');
-- 4、工资水平多于JAMES的员工信息。
SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='JAMES');
-- 5、返回工资大于平均工资的员工信息。
SELECT AVG(sal) FROM emp;
SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);
-- 6、返回销售部(SALES)所有员工的姓名。
SELECT DEPTNO FROM dept WHERE DNAME='SALES';
SELECT * FROM emp WHERE DEPTNO=(SELECT DEPTNO FROM dept WHERE DNAME='SALES');
-- 7、返回工资高于30部门所有员工工资水平的员工信息。
SELECT sal FROM emp WHERE DEPTNO=30;
SELECT * FROM emp WHERE sal > ALL(SELECT sal FROM emp WHERE DEPTNO=30);
-- 8返回查找最高工资和最低工资的职员信息
SELECT emp.* FROM emp,(SELECT MIN(sal) min_sal, MAX(sal) max_sal FROM emp WHERE job='职员') sal WHERE emp.job='职员' AND (emp.sal=sal.min_sal OR emp.SAL=sal.max_sal);
-- 9、返回拥有员工的部门名、部门号。
SELECT DISTINCT dept.DEPTNO,dept.DNAME FROM dept INNER JOIN emp ON dept.DEPTNO=emp.DEPTNO;
-- 显示内连接
SELECT DISTINCT dept.DEPTNO,dept.DNAME FROM dept JOIN emp ON dept.DEPTNO=emp.DEPTNO;
-- 省略inner
SELECT DISTINCT dept.DEPTNO,dept.DNAME FROM dept,emp WHERE dept.DEPTNO=emp.DEPTNO;
-- 隐式内连接
-- 10、返回员工的姓名、所在部门名及其工资。
SELECT emp.ENAME,dept.DNAME,emp.SAL FROM emp,dept WHERE emp.DEPTNO=dept.DEPTNO;
-- 11、返回从事职员工作的员工姓名和所在部门名称。
SELECT emp.ENAME,dept.DNAME FROM emp,dept WHERE emp.DEPTNO=dept.DEPTNO AND emp.JOB ='职员';
-- 13、返回部门号、部门名、部门所在位置及其每个部门的员工总数。	
SELECT dept.DEPTNO,dept.DNAME,dept.LOC ,COUNT(*)FROM dept,emp WHERE dept.DEPTNO=emp.DEPTNO GROUP BY dept.DEPTNO;
-- 14、返回员工(职员或者销售员)和所属经理的姓名。
SELECT * FROM emp WHERE job IN('职员','销售员');
SELECT * FROM emp WHERE job='经理';
SELECT e1.ENAME,e2.ENAME FROM emp e1,(SELECT empno,ename FROM emp WHERE job='经理') e2 WHERE e1.MGR=e2.EMPNO;
-- 15、返回员工(职员或者销售员)的入职日期早于其经理入职日期的员工及其经理姓名。
SELECT EMPNO,ENAME,HIREDATE FROM emp WHERE job='经理';
SELECT e1.ENAME,e2.ENAME, FROM emp e1,(SELECT EMPNO,ENAME,HIREDATE FROM emp WHERE job='经理') e2 WHERE e1.MGR=e2.EMPNO AND e1.HIREDATE<e2.HIREDATE;
-- 16、返回工资处于第四级别的员工的姓名和工资。
SELECT emp.ENAME,emp.SAL FROM emp,(SELECT LOSAL,HISAL FROM salgrade WHERE GRADE=4) salgrade WHERE emp.sal BETWEEN salgrade.LOSAL AND salgrade.HISAL;
-- 17、返回处于第二级别的最高工资和最低工资的职员信息
SELECT MAX(emp.SAL) sal_max,MIN(emp.SAL) sal_min FROM emp,(SELECT LOSAL, HISAL FROM salgrade WHERE GRADE = 2) grade
WHERE emp.JOB = '职员' AND emp.SAL BETWEEN GRADE.losal AND GRADE.hisal;
SELECT *
FROM emp,
  (SELECT
     MAX(emp.SAL)    sal_max,
     MIN(emp.SAL)    sal_min
   FROM emp,
     (SELECT
        LOSAL,
        HISAL
      FROM salgrade
      WHERE GRADE = 2) grade
   WHERE emp.JOB = '职员'
       AND emp.SAL BETWEEN GRADE.losal
       AND GRADE.hisal) sg
WHERE emp.JOB = '职员'
    AND emp.SAL IN(sg.sal_max,sg.sal_min);
发布了854 篇原创文章 · 获赞 375 · 访问量 79万+

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/104056146