Oracle常见练习题(2020082201)

--1. 创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000
CREATE SEQUENCE DEPT_ID_SEQ
INCREMENT BY 10
START WITH 200
MAXVALUE 10000;

DROP SEQUENCE DEPT_ID_SEQ;
--2. 使用序列向表dept中插入数据
CREATE TABLE DEPT_CP
AS
SELECT * FROM DEPT WHERE 1=2;

SELECT * FROM DEPT_CP;

INSERT INTO DEPT_CP VALUES(2,DEPT_ID_SEQ.CURRVAL||'W','HAHA');
DROP TABLE DEPT_CP;
DROP SEQUENCE DEPT_ID_SEQ;

DROP TABLE NAME01;

--1 列出emp表中各部门的部门号,最高工资,最低工资
SELECT E.DEPTNO,MAX(E.SAL) 最高工资,MIN(E.SAL) 最低工资
FROM EMP E
GROUP BY E.DEPTNO;

--2 列出emp表中各部门job为'CLERK'的员工的最低工资,最高工资
SELECT E.DEPTNO,MIN(E.SAL) 最低工资,MAX(E.SAL) 最高工资
FROM EMP E
WHERE E.JOB='CLERK'
GROUP BY E.DEPTNO;

--3 对于emp中最低工资小于1000的部门,列出job为'CLERK'的员工的部门号,最低工资,最高工资
SELECT MIN(E.SAL) 最低工资,MAX(E.SAL) 最高工资,E.DEPTNO
FROM EMP E
WHERE E.JOB='CLREK' AND 1000>(SELECT MIN(B.SAL) FROM EMP B WHERE B.DEPTNO=E.DEPTNO)
GROUP BY E.DEPTNO

SELECT MIN(SAL) FROM EMP E WHERE E.DEPTNO=10

4 根据部门号由高而低,工资由低而高列出每个员工的姓名,部门号,工资
SELECT E.ENAME,E.DEPTNO,E.SAL
FROM EMP E
ORDER BY E.DEPTNO DESC,E.SAL ASC;

--5 写出对上题的另一解决方法

--6 列出'JAMES'所在部门中每个员工的姓名与部门号
SELECT E.ENAME,E.DEPTNO
FROM EMP E
WHERE E.DEPTNO=(SELECT B.DEPTNO FROM EMP B WHERE B.ENAME='JAMES')
AND E.ENAME<>'JAMES'

--7 列出每个员工的姓名,工作,部门号,部门名
SELECT E.ENAME,E.JOB,E.DEPTNO,D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO

--8 列出emp中工作为'CLERK'的员工的姓名,工作,部门号,部门名
SELECT E.ENAME,E.JOB,E.DEPTNO,D.DNAME
FROM EMP E,DEPT D
WHERE E.JOB='CLERK' AND E.DEPTNO=D.DEPTNO

--9 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)
SELECT E.ENAME,A.ENAME
FROM EMP E,EMP A
WHERE A.EMPNO=E.MGR

--10 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为'CLERK'的员工名与工作
SELECT D.DNAME,D.DEPTNO,E.ENAME,E.JOB
FROM DEPT D, EMP E
WHERE D.DEPTNO=E.DEPTNO AND E.JOB='CLERK'

--11 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序
SELECT E.ENAME,E.SAL,E.DEPTNO
FROM EMP E
WHERE E.SAL>(
SELECT AVG(B.SAL) FROM EMP B WHERE B.DEPTNO=E.DEPTNO
)

--12 对于emp,列出各个部门中平均工资高于本部门平均水平的员工数和部门号,按部门号排序
SELECT E.DEPTNO,COUNT(*) 高于本部门平均水平的员工数
FROM EMP E
WHERE E.SAL>(
SELECT AVG(B.SAL) FROM EMP B WHERE B.DEPTNO=E.DEPTNO
)
GROUP BY E.DEPTNO
ORDER BY E.DEPTNO;

--13 对于emp中工资高于本部门平均水平,人数多与1人的,列出部门号,人数,按部门号排序
WITH M AS (
SELECT E.DEPTNO,COUNT()
FROM EMP E
WHERE E.SAL>(
SELECT AVG(B.SAL) FROM EMP B WHERE B.DEPTNO=E.DEPTNO
)
GROUP BY E.DEPTNO
HAVING COUNT(
)>1
ORDER BY E.DEPTNO
)

SELECT N.DEPTNO,COUNT() 部门人数
FROM EMP N,(
SELECT E.DEPTNO,COUNT(
)
FROM EMP E
WHERE E.SAL>(
SELECT AVG(B.SAL) FROM EMP B WHERE B.DEPTNO=E.DEPTNO
)
GROUP BY E.DEPTNO
HAVING COUNT(*)>1
ORDER BY E.DEPTNO
) M
WHERE N.DEPTNO=M.DEPTNO
GROUP BY N.DEPTNO;

14 对于emp中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数
SELECT A.DEPTNO,A.ENAME,A.SAL,(SELECT COUNT() FROM EMP B WHERE B.SAL<A.SAL)人数
FROM EMP A
WHERE (SELECT COUNT(
) FROM EMP B WHERE B.SAL<A.SAL)>=5

15 查询出emp 表中 sal 按升序排列后10 - 20 的员工信息
SELECT ROWNUM FROM (SELECT * FROM EMP E ORDER BY E.SAL ASC) M;

SELECT N.*
FROM (
SELECT ROWNUM R_,M.*
FROM (SELECT * FROM EMP E ORDER BY E.SAL ASC) M
) N
WHERE N.R_>10 AND N.R_<20;

posted @ 2020-08-22 21:47  Norni  阅读(421)  评论(0编辑  收藏  举报