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

  • 相关阅读:
    idea设置全局ignore
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistributable. Please ins
    win 2012 安装mysql 5.7.20 及报错 This application requires Visual Studio 2013 Redistr
    kafka 删除 topic
    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    Centos中使用yum安装java时,没有jps的问题的解决
    Spring 整合Junit
    Spring纯注解配置
    Spring 基于注解的 IOC 配置
    打印java系统的信息
  • 原文地址:https://www.cnblogs.com/JodieRao/p/11363934.html
Copyright © 2011-2022 走看看