• 初学SQL语句练习2


    -- 子查询

    --单行子查询
    -- 查询出所有比雇员姓名为“CLARK ”工资高的员工的信息
    SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME ='CLARK');

    -- 查询工资高于平均工资的雇员名字和工资。
    SELECT ENAME,SAL FROM EMP
    WHERE SAL >(SELECT ROUND(AVG(SAL)) FROM EMP);


    --查询和 SCOTT 同一部门且比他工资低的雇员名字和工资。
    SELECT ENAME,SAL FROM EMP
    WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'SCOTT')
    AND SAL <(SELECT SAL FROM EMP WHERE ENAME = 'SCOTT');


    -- 查询职务和 SCOTT 相同,比 SCOTT 雇佣时间早的雇员信息
    SELECT * FROM EMP
    WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'SCOTT')
    AND HIREDATE <(SELECT HIREDATE FROM EMP WHERE ENAME = 'SCOTT');


    -- 查询工资比 SCOTT 高或者雇佣时间比 SCOTT 早的雇员的编号和名字
    SELECT EMPNO,ENAME FROM EMP
    WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME = 'SCOTT')
    OR HIREDATE <(SELECT HIREDATE FROM EMP WHERE ENAME ='SCOTT');


    --多行子查询
    -->all() 表示匹配子查询结果所有值进行比较
    -->=<any() 表示匹配子查询结果中的任意一个值
    --in() 表示匹配子查询结果中的任意一个值
    --当any()前添加=号 那么和in()相同的意思


    -- 查询工资低于任何一个职务是“ CLERK ”的工资的雇员信息。
    --1.获取工作为CLERK的员工工资
    SELECT * FROM EMP WHERE SAL < ALL(SELECT SAL FROM EMP WHERE JOB = 'CLERK');

    -- 查询工资比所有的“ SALESMAN ”都高的雇员的编号、名字和工资。
    --1.获取SALESMAN的工资
    --1)双击SQL行,F8执行
    --2)按home键 shift+end 选中单行 F8执行
    --1250 1600
    SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE JOB ='SALESMAN');


    -- 查询部门 20 中职务同部门 10 的雇员一样的雇员信息。
    --1.获取10号部门员工的工种
    SELECT * FROM EMP WHERE JOB =ANY(SELECT JOB FROM EMP WHERE DEPTNO = 10) AND DEPTNO = 20;

    -- 查询在雇员中有哪些人是领导
    --1.领导的雇员编号
    SELECT * FROM EMP WHERE EMPNO IN(SELECT DISTINCT MGR FROM EMP WHERE MGR IS NOT NULL);

    -- 找出部门编号为 20 的所有员工中收入最高的职员
    --1.获取20号部门的所有员工最高工资
    SELECT * FROM EMP WHERE SAL =(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 20) AND DEPTNO = 20;

    -- 查询每个部门平均薪水的等级
    -- 可以将子查询作为一张表格,实现多表关联查询
    --SQL语句执行过程:from-->where -->group by --->having --->select --->order by

    --SELECT ROUND(AVG(SAL)) AVG_SAL FROM EMP WHERE AVG_SAL=2073; --报错


    --1.获取每个部门的平均薪水
    SELECT T.DEPTNO,S.GRADE
    FROM (SELECT DEPTNO,ROUND(AVG(SAL)) AVG_SAL FROM EMP GROUP BY DEPTNO) T,SALGRADE S
    WHERE T.AVG_SAL BETWEEN S.LOSAL AND S.HISAL;

    -- 查询部门的详细信息及部门平均工资和等级
    --1.获取部门平均工资
    SELECT D.*,T2.AVG_SAL,T2.GRADE
    FROM DEPT D ,
    (SELECT T.DEPTNO,S.GRADE,T.AVG_SAL
    FROM (SELECT DEPTNO,ROUND(AVG(SAL)) AVG_SAL FROM EMP GROUP BY DEPTNO) T,SALGRADE S
    WHERE T.AVG_SAL BETWEEN S.LOSAL AND S.HISAL) T2
    WHERE D.DEPTNO = T2.DEPTNO(+);

  • 相关阅读:
    python学习笔记- day10-4【问题:为什么python的多线程不能利用多核CPU?】
    python学习笔记-day10-3【日志模块logging】
    python学习笔记-day10-2【多进程,多线程】
    python学习笔记-day10-01-【 类的扩展: 重写父类,新式类与经典的区别】
    day12-HTML基础之DOM操作
    day12-HTML基础之CSS
    HTTP原理
    day12-HTML
    day11-Jenkins
    day11-python学习笔记(二十六)yaml,ddt
  • 原文地址:https://www.cnblogs.com/fjl0418/p/7929522.html
Copyright © 2020-2023  润新知