Oracle数据库练习2:
主要是emp、dept这两张表
emp表:
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 版权协议,转载请附上原文出处链接和本声明。