• Oracle-DQL 2- 限定和排序


    1.where子句
    --查询30号部门员工的姓名,职位和工资
    SELECT ename,job,sal,deptno FROM emp
    WHERE deptno = 30;

    --查询职位是manager的员工
    SELECT * FROM emp
    WHERE job = 'MANAGER';
    --手动输入字符串要加单引号,并且区分大小写

    -- 比较条件的两边的数据类型必须一致

    --查询工资高于2000的员工信息
    SELECT * FROM emp
    WHERE sal > 2000;

    --where字句后面必须是一个完整的逻辑表达式,结果要么为真要么为假
    --在数据库中,这样的逻辑表达式通常是比较运算:=  >    <  >=    <=  <>(!=)

    --比较条件可以是某列数据和手动输入的数据比较
    --也可以是某两列数据进行比较
    SELECT * FROM emp
    WHERE comm > sal;

    --where中不能出现列的别名
    SELECT ename,job,sal,12*sal nianxin FROM emp
    WHERE 12*sal < 25000;

    --作为条件的列可以不出现在select后面
    --为了查询结果的可读性,最好选择作为查询条件的列
    SELECT ename,job,deptno FROM emp
    WHERE sal < 1500;

    2.比较运算符

    --in(value1,value2,...valueN) 列表匹配
    SELECT * FROM emp
    WHERE job IN ('CLERK','PRESIDENT','SALESMAN');

    --between 最小值 and 最大值,范围匹配
    SELECT * FROM emp
    WHERE sal BETWEEN 1500 AND 3000;

    --like,模糊匹配
    --% 表示任意个任意字符
    --_ 表示一个任意字符
    SELECT * FROM emp
    WHERE ename LIKE 'A%';

    SELECT * FROM emp
    WHERE ename LIKE '%S';

    SELECT * FROM emp
    WHERE ename LIKE '%A%';

    SELECT * FROM emp
    WHERE ename LIKE '_A%';

    SELECT * FROM emp
    WHERE ename LIKE '____';

    --is null,匹配空值(不能写成 = null)
    SELECT * FROM emp
    WHERE comm IS NULL;

    3.逻辑运算符

    --and 与运算多个条件必须同时满足才能返回结果
    SELECT * FROM emp
    WHERE sal > 1500
    AND deptno = 20;

    --or 或运算多个条件只需要满足其中任意一个条件就可以返回结果
    SELECT * FROM emp
    WHERE sal > 1500
    OR deptno = 20;

    --not 非运算返回不满足条件的结果
    SELECT * FROM emp
    WHERE NOT sal > 1500;

    SELECT * FROM emp
    WHERE ename NOT LIKE '%A%';

    4.运算优先级:数学运算>比较运算>not>and>or
    --使用括号来表示或者改变运算优先级
    SELECT * FROM emp
    WHERE sal > 1500
    OR deptno = 20
    AND job IN ('CLERK','MANAGER');

    SELECT * FROM emp
    WHERE (sal > 1500
    OR deptno = 20)
    AND job IN ('CLERK','MANAGER');

    5.order by排序
    --order by永远在查询语句的最后
    --asc 升序排列,默认可以不写
    --desc 降序排列
    SELECT * FROM emp
    ORDER BY sal;

    --字符和日期的数据类型也可以排序
    SELECT * FROM emp
    WHERE deptno = 20
    ORDER BY hiredate DESC;

    SELECT * FROM emp
    ORDER BY ename ASC;

    --order by中可以出现列的别名
    SELECT ename,job,sal,12*sal nianxin FROM emp
    ORDER BY nianxin DESC;

    --order by后面排序的列可以不出现在select
    --选择排序的列可以提高查询结果的可读性
    SELECT ename FROM emp
    ORDER BY hiredate;

    --多列排序
    SELECT * FROM emp
    ORDER BY deptno,sal DESC;

    【练习】
    1.查询emp表,显示薪水大于2000,且工作类别是MANAGER的雇员信息
    SELECT * FROM emp
    WHERE sal > 2000
    AND job = 'MANAGER';

    2.查询emp表,显示年薪大于30000,工作类别不是MANAGER的雇员信息
    SELECT ename,job,sal,deptno,12*sal nianxin FROM emp
    WHERE 12*sal > 30000
    AND job <> 'MANAGER';

    3.查询emp表, 显示薪水在1500到3000之间,工作类别以“M”开头的雇员信息
    SELECT * FROM emp
    WHERE sal BETWEEN 1500 AND 3000
    AND job LIKE 'M%';

    4.查询emp表,显示佣金为空并且部门号为20或30的雇员信息(佣金=薪水SAL+津贴COMM)
    SELECT ename,job,sal,comm,deptno,sal+comm yongjin FROM emp
    WHERE sal+comm IS NULL
    AND deptno IN (20,30);

    5.查询emp表,显示佣金不为空或者部门号为20的雇员信息,
    要求按照薪水降序排列 (佣金=薪水+津贴)
    SELECT ename,job,sal,deptno,sal+comm yongjin FROM emp
    WHERE sal+comm IS NOT NULL
    OR deptno = 20
    ORDER BY sal DESC;

    6.查询emp表,显示年薪大于30000工作类别不是MANAGER,
    且部门号不是10或40的雇员信息,要求按照雇员姓名进行排列
    SELECT ename,job,sal,deptno,12*sal nianxin FROM emp
    WHERE 12*sal > 30000
    AND job <> 'MANAGER'
    AND deptno NOT IN (10,40)
    ORDER BY ename;

  • 相关阅读:
    navBar
    strong ,weak
    Linux基础-07-系统的初始化和服务
    Linux基础-06-vi编辑器
    Linux基础-05-正文处理、tar、解压缩
    Linux基础-04-权限
    Linux基础-03-用户、群组
    Linux基础-02-目录文件管理
    Linux基础-01-Linux基础命令
    oh my zsh 安装
  • 原文地址:https://www.cnblogs.com/JodieRao/p/11363934.html
Copyright © 2020-2023  润新知