原 SQL 学习整理
|-转 SQL复杂查询(案例一)
https://blog.csdn.net/dingchenxixi/article/details/732235721.列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最...
https://blog.csdn.net/dingchenxixi/article/details/73223572
1.列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。
确定所需要的数据表
emp表:员工的部门编号,平均工资,最低工资,最高工资
dept表:部门名称
确定已知的关联字段
emp.deptno=dept.deptno
1.1 先得到员工数大于1的部门
SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno HAVING COUNT(empno)>1;
- 1
1.2 找到部门名称
SELECT d.dname,COUNT(e.empno) FROM emp e ,dept d
WHERE e.deptno=d.deptno GROUP BY d.deptno,d.dname HAVING COUNT(e.empno)>1;
- 1
- 2
1.3 统计各种信息
SQL分组:http://blog.csdn.net/dingchenxixi/article/details/70193634
select子句之后,只能出现分组的字段和统计函数,其它的字段不能出现
由于AVG(),MAX(),MIN()为统计函数,可以直接使用
SELECT d.deptno,d.dname,COUNT(e.empno),AVG(sal),MIN(sal),MAX(sal)
FROM emp e ,dept d
WHERE e.deptno=d.deptno
GROUP BY d.deptno,d.dname HAVING COUNT(e.empno)>1;
- 1
- 2
- 3
- 4
2.列出薪金比“SMITH”或“ALLEN”多的所有员工的编号、姓名、部门名称、其领导姓名。
确定所需要的数据表
emp表:列出“SMITH”或“ALLEN”的薪金
emp表:员工的编号,姓名
dept表:部门名称
确定已知的关联字段
emp.deptno=dept.deptno;
emp1.mgr = emp2.empno (自关联查询)
2.1 先查询出“SMITH”或“ALLEN”的薪金
SELECT sal FROM emp WHERE ename='SMITH' OR ename='ALLEN'
- 1
或者
SELECT sal FROM emp WHERE ename IN('SMITH','ALLEN');
- 1
2.2 子查询,查询比“SMITH”或“ALLEN”薪金多的员工编号,姓名,部门名称...