• SQL复杂语句查询练习


    --复杂查询练习

    -- 1 、列出所有员工的年工资,按年薪从低到高排序。
    SELECT (SAL+NVL(COMM,0))*12 INCOME FROM EMP ORDER BY INCOME;


    -- 2 、列出薪金比“ SMITH ”多的所有员工。
    --获取SMITH 的工资
    SELECT * FROM EMP WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME = 'SMITH');


    -- 3 、列出所有员工的姓名及其直接上级的姓名。
    SELECT E1.ENAME,E2.ENAME
    FROM EMP E1
    LEFT JOIN EMP E2
    ON E1.MGR = E2.EMPNO;


    -- 4 、列出受雇日期早于其直接上级的所有员工。
    SELECT E1.ENAME,E1.HIREDATE,E2.ENAME,E2.HIREDATE
    FROM EMP E1
    LEFT JOIN EMP E2
    ON E1.MGR = E2.EMPNO
    WHERE E1.HIREDATE <E2.HIREDATE;



    -- 5 、列出部门名称和这些部门的员工信息,包括那些没有员工的部门。
    SELECT D.DNAME,E.EMPNO,E.ENAME,DEPTNO
    FROM EMP E
    RIGHT JOIN DEPT D
    USING(DEPTNO);



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

    --1.查询所有job为“CLERK”的姓名
    SELECT D.DNAME,T.ENAME FROM
    (SELECT DEPTNO,ENAME FROM EMP WHERE JOB ='CLERK') T,DEPT D
    WHERE T.DEPTNO = D.DEPTNO;


    -- 7 、列出最低工资大于1500 的各种工作。
    SELECT JOB
    FROM EMP
    GROUP BY JOB
    HAVING MIN(SAL)>1500;



    -- 8 、列出在部门“ SALES ”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
    --1.获取销售部的部门编号
    SELECT ENAME,DEPTNO FROM EMP
    WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES');



    -- 9 、列出工资高于公司平均工资的所有员工。
    --获取公司的平均工资
    SELECT * FROM EMP WHERE SAL >(SELECT ROUND(AVG(SAL)) AVG_SAL FROM EMP);


    -- 10 、列出与“ SCOTT ”从事相同工作的所有员工。
    --获取SCOTT的工作
    SELECT * FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'SCOTT')
    AND ENAME <> 'SCOTT';



    -- 11 、列出工资高于在部门 30 工作的所有员工的工资的员工姓名和工资。
    --1.获取30号部门员工的工资
    SELECT ENAME,SAL FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO = 30);


    -- 12 、列出在每个部门工作的员工数量、平均工资和平均服务期限(年)。
    SELECT COUNT(*),ROUND(AVG(SAL)) AVG_SAL,ROUND(AVG(TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(HIREDATE,'YYYY'))) AVG_YEAR
    FROM EMP
    GROUP BY DEPTNO;



    -- 13 、列出所有员工的姓名、部门名称和工资。
    SELECT E.ENAME,D.DNAME,E.SAL
    FROM EMP E NATURAL JOIN DEPT D;

    -- 14 、列出从事同一种工作但属于不同部门的员工的一种组合。
    --[自连接]
    --E1 和 E2 都当成员工表

    SELECT E1.ENAME,E1.JOB,E1.DEPTNO,E2.ENAME,E2.JOB,E2.DEPTNO
    FROM EMP E1,EMP E2
    WHERE E1.JOB = E2.JOB
    AND E1.DEPTNO <> E2.DEPTNO
    AND E1.ENAME<E2.ENAME;



    -- 15 、列出所有部门的详细信息和部门人数(包含没有员工的部门)。
    SELECT D.*,COUNT(E.EMPNO)
    FROM EMP E RIGHT JOIN DEPT D
    ON E.DEPTNO = D.DEPTNO
    GROUP BY D.DEPTNO,D.DNAME,D.LOC;



    -- 16 、列出各种工作的最低工资。
    SELECT JOB,MIN(SAL)
    FROM EMP
    GROUP BY JOB;

    -- 17 、列出各个部门的 MANAGER (经理)的最低薪金。
    SELECT DEPTNO,MIN(SAL)
    FROM EMP
    WHERE JOB = 'MANAGER'
    GROUP BY DEPTNO;



    -- 18 、列出至少有一个员工的所有部门。
    SELECT DEPTNO
    FROM EMP
    GROUP BY DEPTNO
    HAVING COUNT(*)>=1;

  • 相关阅读:
    [LeetCode] 617. Merge Two Binary Trees
    [LeetCode] 738. Monotone Increasing Digits
    289. Game of Life
    305. Number of Islands II
    288. Unique Word Abbreviation
    271. Encode and Decode Strings
    393. UTF-8 Validation
    317. Shortest Distance from All Buildings
    286. Walls and Gates
    296. Best Meeting Point
  • 原文地址:https://www.cnblogs.com/fjl0418/p/7929443.html
Copyright © 2020-2023  润新知