MySQL多表与分组练习题及答案
mysql 答案 分组 多表 练习题
2023-09-14 09:02:02 时间
目录
题目
-- 多表与分组练习
-- 注意:员工如果没有特殊指明,指的就是所有人。-- 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);
相关文章
- mysql select into 不支持
- mysql事务回滚后,自增ID仍然增加
- 关于MySQL出现`lock wait timeout exceeded; try restarting transaction` 的解决方案
- mysql一些使用技巧
- MySql操作(二):表的全部基础详细操作与命令
- 揪出MySQL磁盘消耗迅猛的真凶
- 开发使用mysql的一些必备知识点整理(一)初阶
- mysql运维必会的一些知识点整理(转自民工哥)
- 007-docker-安装-mysql:5.6
- mysql
- 【MySQL笔记】MySQL之自定义函数和触发器的使用
- 【项目实战】MySQL 5.7中的关键字与保留字详解
- mysql直接操作数据库表里的json字段的单个值?答案在这里
- 云原生系列之使用 prometheus监控MySQL实战