Oracle数据库练习2

Oracle数据库练习2:

主要是emp、dept这两张表
emp表:
emp表
dept表:
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);


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!