zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    取汉字字串的首字母
    回调函数
    [转].NET对象与COM对象
    [转]TCP与UDP的特点与区别
    【转】一张图分出你是用左脑还是右脑!
    并发基础(Runnable、Thread、Executor)
    Java序列化总结
    Hadoop安装配置手册
    MySQL配置信息解读(my.cnf)
    mysql主从备份、主从切换
  • 原文地址:https://www.cnblogs.com/nuochengze/p/13547281.html
Copyright © 2011-2022 走看看