SELECT d.deptno,d.dname,COUNT(e.empno),AVG(sal),MIN(sal),MAX(sal)
FROM emp e ,dept d
WHERE e.deptno=d.deptno
GROUPBY d.deptno,d.dname HAVINGCOUNT(e.empno)>1;
SELECT sal FROM emp WHERE ename='SMITH'OR ename='ALLEN'
或者
SELECT sal FROM emp WHERE ename IN('SMITH','ALLEN');
2.2 子查询,查询比“SMITH”或“ALLEN”薪金多的员工编号,姓名,部门名称
SELECT e.empno,e.ename,e.sal,d.dname FROM emp e,dept d WHERE e.sal>ANY(SELECT sal FROM emp WHERE ename='SMITH'OR ename='ALLEN')
AND e.deptno=d.deptno;
2.3 自身关联查询
SELECT e.empno,e.ename,e.sal,d.dname,m.ename leader FROM emp e,emp m,dept d
WHERE e.sal>ANY(SELECT sal FROM emp WHERE ename='SMITH'OR ename='ALLEN')
AND e.deptno=d.deptno AND e.mgr=m.empno(+);
3.列出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列
确定所需要的数据表
emp表1:员工的编号,姓名,上级的编号
emp表2:上级的姓名,领导的年工资
确定已知的关联字段
emp1.mgr=emp2.empno
SELECT e.empno,e.ename,m.ename leader,m.empno leader_no , NVL((m.sal+NVL(m.comm,0))*12 ,0) INCOME FROM emp e,emp m
WHERE e.mgr=m.empno(+) ORDER BY INCOME DESC ;
SELECT e.empno,e.ename,d.dname ,d.loc ,temp.count
FROM emp e,emp m,dept d ,(SELECT deptno,COUNT(empno) count FROM emp GROUP BY deptno) temp
WHERE e.mgr=m.empnoAND e.hiredate<m.hiredateAND e.deptno=d.deptnoAND e.deptno=temp.deptno;
5.列出部门名称和这些部门的员工信息(数量、平均工资),同时列出那些没有员工的部门
确定所需要的数据表:
dept表:部门名称
emp表:员工平均工资
emp表:统计员工数量
确定已知的关联字段:
emp.deptno=dept.deptno
SELECT d.dname,COUNT(e.empno),AVG(e.sal)
FROM dept d ,emp e
WHERE e.deptno(+)=d.deptno GROUPBY d.dname;