zoukankan      html  css  js  c++  java
  • MySQL(四)DQL语言——条件查询

    摘要:条件查询;条件表达式,逻辑表达式,模糊查询,like,通配符,转义字符,escape关键字,between and,in,is null,is not null,安全等于。

    条件查询
    语法:

    SELECT
    查询列表
    FROM
    表名
    WHERE
    筛选条件;
    1
    2
    3
    4
    5
    6
    我们根据筛选条件简单进行一下分类:

    按条件表达式筛选
    条件运算符:
    >:大于
    <:小于
    =:等于
    !=或<>:不等于
    >=:大于或等于
    <=:小于或等于

    示例
    查询工资大于12000的员工信息。
    SELECT * FROM employees WHERE salary>12000;

    查询部门编号不等于90号的员工名和部门编号。
    SELECT
    first_name,
    department_id
    FROM
    employees
    WHERE
    department_id <> 90 ;
    1
    2
    3
    4
    5
    6
    7

    按逻辑表达式筛选
    逻辑运算符:
    逻辑运算符就是为了连接条件表达式。
    &&或and:与
    ||或or:或
    !或not:非

    示例
    查询工资在10000到20000之间的员工名、工资以及奖金率。
    SELECT
    first_name,
    salary,
    commission_pct
    FROM
    employees
    WHERE
    salary > 10000 && salary < 20000 ;
    1
    2
    3
    4
    5
    6
    7
    8

    查询部门编号不是在90到110之间,或者工资高于15000的员工信息。
    SELECT
    *
    FROM
    employees
    WHERE
    NOT (department_id <= 110 AND department_id >= 90) OR salary > 15000;
    1
    2
    3
    4
    5
    6

    模糊查询
    模糊查询也是一种条件表达式,可以看做是一种复杂的条件表达式。
    like
    between and
    in
    is null或者is not null

    我们逐个介绍一下:

    1)like
    like:意思就是“像是”。

    一般和通配符搭配使用。
    通配符有:
    %:任意字符串,包含0个字符。
    _:任意单个字符

    如果我们要使用的字符就是“%”或者“_”,因为他们本身是通配符,所以我们要想使用它们作为字符,我们就需要转义字符:
    \_:下划线
    \%:百分号
    当然前面的转义字符“”不是强制要求的,我们也可以用关键字“ESCAPE”来自定义转义字符。这个我们可以在下面的第三个例子中看一下。

    like用法示例
    我们举一个例子,查询员工名中包含字符“a”的员工信息。
    SELECT
    *
    FROM
    employees
    WHERE
    first_name LIKE '%a%' ;
    1
    2
    3
    4
    5
    6

    我们再举一个例子,查询员工名中第三个字符是“e”,第五个字符为“a”的员工的员工名和工资。
    SELECT
    first_name,
    salary
    FROM
    employees
    WHERE first_name LIKE '__e_a%' ;
    1
    2
    3
    4
    5
    6

    第三个例子,**查询员工名中第二个字符是下划线“_”的员工的员工名和工资。**这里我们就需要用到上面介绍的转义字符。
    SELECT
    last_name,
    salary
    FROM
    employees
    WHERE
    last_name LIKE '_\_%' ;
    1
    2
    3
    4
    5
    6
    7

    在一些特殊的情况下,我们也可以自定义转义字符,需要使用ESCAPE关键字。上面的例子,我们可以写成:
    SELECT
    last_name,
    salary
    FROM
    employees
    WHERE
    last_name LIKE '_$_%' ESCAPE '$';
    1
    2
    3
    4
    5
    6
    7
    这样我们就定义了$作为我们的转义字符。我们可以看到效果是一样的。

    2)between and
    between and:意思就是“在什么之间”。

    我们举一个例子:查询员工编号在100到120之间的员工信息。
    这里的条件我们通常写成employee_id >= 100 AND employee_id <= 120。
    我们也可以使用between and,between and语句和上面的一句是等效的,这样我们就可以写成

    SELECT
    *
    FROM
    employees
    WHERE
    employee_id BETWEEN 100 AND 120 ;
    1
    2
    3
    4
    5
    6
    也可以达成相同的效果:

    但是我们要注意几点:

    使用between and可以大大提高sql语句的简洁度;
    包含临界值,例如上面的例子中,是包含100和120的
    前后顺序不可以颠倒!这一点很重要,如果写成between 120 and 100,这样不会报错,但是不会有结果。
    3)in
    in的意思就是“在……里面”。

    我们也是先举一个例子:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的任意一个的员工的员工名和工种编号。
    我们可以使用逻辑运算符OR,可以写成:

    job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
    1
    我们也可以使用IN写成:

    SELECT
    last_name,
    job_id
    FROM
    employees
    WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ;
    1
    2
    3
    4
    5
    6
    我们看一下结果:

    我们介绍一下IN的特点:

    IN 的作用就是判断某字段的值是否属于IN列表中的某一项。
    使用IN可以提高SQL语句的简洁度。
    IN列表的值类型必须一致或者兼容。
    在IN列表中是不支持通配符的。所有字符都将被当做字符本身来处理。
    4)is null 和is not null
    is null和is not null:判断是否为空值。

    我们先举一个例子,我们要查询一下没有奖金的员工的员工名和奖金率。
    这时我们要使用is null或者 is not null:

    SELECT
    last_name,
    commission_pct
    FROM
    employees
    WHERE
    commission_pct IS NULL ;
    1
    2
    3
    4
    5
    6
    7

    那么请问我们可以使用commission_pct = NULL吗?
    答案是不可以的。

    而且要注意的是IS NULL是一个整体,IS只能用于NULL值得判断,不可以做其他的判断。

    补充:安全等于
    最后我们补充一下SQL里面的“安全等于”,符号是“<=>”

    安全等于是可以判断null值的。
    当然也可以用于普通数值的判断,与“=”一样。
    但是安全等于用的很少,因为它的可读性比较差。所以还是建议使用普通的“=”或者“IS NULL”。

    例如上面判断奖金是否为null的例子,我们在条件表达式就可以写成:

    SELECT
    last_name,
    commission_pct
    FROM
    employees
    WHERE
    commission_pct <=> NULL ;
    1
    2
    3
    4
    5
    6
    7
    上面判断查询员工工资为12000的例子中,可以写成

    SELECT
    *
    FROM
    employees
    WHERE
    salary <=> 12000 ;
    1
    2
    3
    4
    5
    6

    --------------------- 

  • 相关阅读:
    JS 基于面向对象的 轮播图1
    JS 原型继承的几种方法
    angularJs 自定义服务 provide 与 factory 的区别
    C# 调用JS Eval,高效率
    Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
    C# LINQ干掉for循环
    C# 彻底搞懂async/await
    .NET中的异步编程——动机和单元测试
    .NET中的异步编程——常见的错误和最佳实践
    C# 实用代码段
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10987455.html
Copyright © 2011-2022 走看看