Oracle数据库练习2

  • Post author:
  • Post category:其他




Oracle数据库练习2:


主要是emp、dept这两张表

emp表:

emp表

dept表:

dept表


1、列出至少有一个员工的所有部门

多表查询,按部门编号(deptno)分组,再对每个组里人员编号(empno)进行大于等于1的过滤筛选

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值去比较

SELECT empno,ename,job,sal
FROM emp
WHERE sal>(
SELECT sal
FROM emp
WHERE ename= 'SMITH'
);

3、列出所有员工的姓名及其直接上级的姓名。

多表查询,对上级编号(mgr)和个人编号(empno)进行匹配

SELECT e.ename,s.ename as lead
FROM emp e,emp s
WHERE e.mgr = s.empno(+);

4、列出受雇日期早于其直接上级的所有员工。

上一题的基础上,同时对入职日期进行判断

SELECT e.ename
FROM emp e,emp s
WHERE (e.mgr = s.empno) AND (e.hiredate < s.hiredate);

5、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

多表查询

SELECT d.dname,e.ename,e.job,e.sal,e.hiredate
FROM dept d,emp e
WHERE d.deptno = e.deptno(+);

或者

SELECT d.dname,e.*
FROM dept d,emp e
WHERE d.deptno = e.deptno(+);

6、列出所有“CLERK”(办事员)的姓名及其部门名称。

SELECT e.ename,e.job,d.dname
FROM emp e,dept d
WHERE (e.job = 'CLERK') AND (e.deptno = d.deptno);

7、列出最低薪金大于1500的各种工作。

按工作分组,过滤筛选最低薪金大于1500的数据

SELECT job,MIN(sal)
FROM emp
GROUP by job
HAVING MIN(sal) > 1500;

8、列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

多表查询,用部门编号(deptno)匹配两表,同时判定部门是’SALES’(销售部)

SELECT e.ename,e.deptno,d.dname
FROM emp e,dept d
WHERE (d.dname = 'SALES') AND (e.deptno = d.deptno);

或者

SELECT *
FROM emp
WHERE deptno = 
(SELECT deptno FROM dept WHERE dname = 'SALES');

9、列出薪金高于公司平均薪金的所有员工。

子查询公司平均薪金去比较

SELECT *
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);



版权声明:本文为m0_46684679原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。