sql语句练习题和答案
部门表dept
员工表emp
薪资等级表salgrade
1.查询雇员表中工资最高的雇员的员工号、员工姓名、工资和部门号。
SELECT empno,ename,sal,deptno from emp WHERE sal in(select max(sal) FROM emp)
2.薪水>1200的雇员,按照部门编号进行分组,分组后的平均薪水必须大于1500,
查询各分组的平均工资,按照工资的倒序进行排列
SELECT avg(sal),deptno FROM emp where sal>'1200' GROUP BY deptno
HAVING avg(sal) >'1500' ORDER BY avg(sal) DESC
3.查询每个雇员和其所在的部门名
SELECT emp.ename,dept.dname from dept, emp where emp.deptno=dept.deptno
4.查询每个雇员姓名及其工资所在的等级
SELECT emp.ename,salgrade.grade from emp LEFT JOIN salgrade ON emp.sal BETWEEN salgrade.losal and salgrade.hisal
5.查询雇员名第2个字母不是a的雇员的姓名、所在的组名、工资所在的等级。三张表的连接查询
(先连接,再加上where语句进行过滤)
SELECT emp.ename, dept.dname, salgrade.grade from emp
LEFT JOIN dept ON emp.deptno=dept.deptno
LEFT JOIN salgrade on emp.sal BETWEEN salgrade.losal and salgrade.hisal
WHERE emp.ename NOT LIKE '_a%'
6.查询每个雇员的姓名及其所在部门的部门名(包括没有雇员的部门)
select ename,dname from emp e right join dept d on(e.deptno=d.deptno);
7.子查询1:查询每个部门中工资最高的人的姓名、薪水和部门编号
SELECT a.ename, a.sal, a.deptno from emp a
LEFT JOIN (SELECT max(sal) sal,deptno from emp GROUP BY deptno) b
ON a.sal =b.sal and a.deptno = b.deptno
8.子查询2:查询每个部门平均工资所在的等级
SELECT avg(sal) sal,deptno,salgrade.grade FROM emp
LEFT JOIN salgrade
ON (emp.sal BETWEEN salgrade.losal and salgrade.hisal)
GROUP BY deptno