Oracle数据库练习2:
主要是emp、dept这两张表
emp表:

dept表:

1、列出至少有一个员工的所有部门
多表查询,按部门编号(deptno)分组,再对每个组里人员编号(empno)进行大于等于1的过滤筛选
1 2 3 4 5
| SELECT d.deptno,COUNT(e.empno) FROM emp e,dept d WHERE e.deptno = d.deptno(+) HAVING COUNT(e.ename) >= 1 GROUP by d.deptno;
|
2、列出薪金比“SMITH”多的所有员工。:
构造SMITH的sal值去比较
1 2 3 4 5 6 7
| SELECT empno,ename,job,sal FROM emp WHERE sal>( SELECT sal FROM emp WHERE ename= 'SMITH' );
|
3、列出所有员工的姓名及其直接上级的姓名。
多表查询,对上级编号(mgr)和个人编号(empno)进行匹配
1 2 3
| SELECT e.ename,s.ename as lead FROM emp e,emp s WHERE e.mgr = s.empno(+);
|
4、列出受雇日期早于其直接上级的所有员工。
上一题的基础上,同时对入职日期进行判断
1 2 3
| SELECT e.ename FROM emp e,emp s WHERE (e.mgr = s.empno) AND (e.hiredate < s.hiredate);
|
5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
多表查询
1 2 3
| SELECT d.dname,e.ename,e.job,e.sal,e.hiredate FROM dept d,emp e WHERE d.deptno = e.deptno(+);
|
或者
1 2 3
| SELECT d.dname,e.* FROM dept d,emp e WHERE d.deptno = e.deptno(+);
|
6、列出所有“CLERK”(办事员)的姓名及其部门名称。
1 2 3
| SELECT e.ename,e.job,d.dname FROM emp e,dept d WHERE (e.job = 'CLERK') AND (e.deptno = d.deptno);
|
7、列出最低薪金大于1500的各种工作。
按工作分组,过滤筛选最低薪金大于1500的数据
1 2 3 4
| SELECT job,MIN(sal) FROM emp GROUP by job HAVING MIN(sal) > 1500;
|
8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
多表查询,用部门编号(deptno)匹配两表,同时判定部门是’SALES’(销售部)
1 2 3
| SELECT e.ename,e.deptno,d.dname FROM emp e,dept d WHERE (d.dname = 'SALES') AND (e.deptno = d.deptno);
|
或者
1 2 3 4
| SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'SALES');
|
9、列出薪金高于公司平均薪金的所有员工。
构造公司平均薪金去比较
1 2 3
| SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);
|