• 如何使用SQL NOT运算


    在本教程中,您将学习如何使用SQL NOT运算符来否定SELECT语句WHERE子句中的布尔表达式。

    在前面已经学习了如何使用各种逻辑运算符,如:ANDORLIKEBETWEENINEXISTS。 这些运算符可帮助您在WHERE子句中形成灵活的条件。

    要反转任何布尔表达式的结果,请使用NOT运算符。 以下演示如何使用NOT运算符。更多教程请访问http://www.manongzj.com

    NOT [Boolean_expression]
    

    下表显示了NOT运算符的结果。

    原值应用Not运算符后
    TRUE FALSE
    FALSE TRUE
    NULL NULL

    2. SQL NOT运算符示例

    我们将使用employees表来演示NOT运算符。employees表的结构如下所示 -

    mysql> DESC employees;
    +---------------+--------------+------+-----+---------+----------------+
    | Field         | Type         | Null | Key | Default | Extra          |
    +---------------+--------------+------+-----+---------+----------------+
    | employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | first_name    | varchar(20)  | YES  |     | NULL    |                |
    | last_name     | varchar(25)  | NO   |     | NULL    |                |
    | email         | varchar(100) | NO   |     | NULL    |                |
    | phone_number  | varchar(20)  | YES  |     | NULL    |                |
    | hire_date     | date         | NO   |     | NULL    |                |
    | job_id        | int(11)      | NO   | MUL | NULL    |                |
    | salary        | decimal(8,2) | NO   |     | NULL    |                |
    | manager_id    | int(11)      | YES  | MUL | NULL    |                |
    | department_id | int(11)      | YES  | MUL | NULL    |                |
    +---------------+--------------+------+-----+---------+----------------+
    10 rows in set
    

    以下语句检索在部门ID为5中工作的所有员工。如下查询语句 -

    SELECT
        employee_id,
        first_name,
        last_name,
        salary
    FROM
        employees
    WHERE
        department_id = 5
    ORDER BY
        salary;
    

    执行上面示例代码,得到以下结果 -

    查询工作在部门ID为5且薪水不超过5000的员工。

    SELECT
        employee_id,
        first_name,
        last_name,
        salary
    FROM
        employees
    WHERE
        department_id = 5
    AND NOT salary > 5000
    ORDER BY
        salary;
    

    执行上面示例代码,得到以下结果 -

    +-------------+------------+-----------+--------+
    | employee_id | first_name | last_name | salary |
    +-------------+------------+-----------+--------+
    |         126 | Irene      | Liu       | 2700   |
    |         193 | Britney    | Zhao      | 3900   |
    |         192 | Sarah      | Yang      | 4000   |
    +-------------+------------+-----------+--------+
    3 rows in set
    

    SQL NOT IN运算符示例

    要否定IN运算符,请使用NOT运算符。 例如,以下语句将获取不在部门ID为1,23中工作的所有员工。

    SELECT
        employee_id,
        first_name,
        last_name,
        department_id
    FROM
        employees
    WHERE
        department_id NOT IN (1, 2, 3)
    ORDER BY
        first_name;
    

    执行上面查询语句,得到以下结果 -

    +-------------+------------+-----------+---------------+
    | employee_id | first_name | last_name | department_id |
    +-------------+------------+-----------+---------------+
    |         103 | Alexander  | Lee       |             6 |
    |         193 | Britney    | Zhao      |             5 |
    |         104 | Bruce      | Wong      |             6 |
    |         179 | Charles    | Yang      |             8 |
    |         109 | Daniel     | Chen      |            10 |
    |         105 | David      | Liang     |             6 |
    |         107 | Diana      | Chen      |             6 |
    |         204 | Hermann    | Wu        |             7 |
    |         126 | Irene      | Liu       |             5 |
    ......
    |         100 | Steven     | Lee       |             9 |
    |         203 | Susan      | Zhou      |             4 |
    |         106 | Valli      | Chen      |             6 |
    |         206 | William    | Wu        |            11 |
    +-------------+------------+-----------+---------------+
    31 rows in set
    

    SQL NOT LIKE运算符示例

    可以使用NOT LIKE来否定LIKE运算符。 例如,以下语句检索名字不以字母M开头的所有员工。

    SELECT
        first_name,
        last_name
    FROM
        employees
    WHERE
        first_name NOT LIKE 'M%'
    ORDER BY
        first_name;
    

    执行上面查询语句,得到以下结果 -

    +------------+-----------+
    | first_name | last_name |
    +------------+-----------+
    | Alexander  | Lee       |
    | Alexander  | Su        |
    | Avg        | Su        |
    | Britney    | Zhao      |
    | Bruce      | Wong      |
    | Charles    | Yang      |
    ... ...
    | Shelley    | Wu        |
    | Shelli     | Zhang     |
    | Sigal      | Zhang     |
    | Steven     | Lee       |
    | Susan      | Zhou      |
    | Valli      | Chen      |
    | William    | Wu        |
    +------------+-----------+
    34 rows in set
    

    SQL NOT BETWEEN示例

    以下示例说明如何使用NOT来否定BETWEEN运算符,以使员工的薪水不在10001000之间。

    SELECT
        employee_id,
        first_name,
        last_name,
        salary
    FROM
        employees
    WHERE
        salary NOT BETWEEN 3000
    AND 5000
    ORDER BY
        salary;
    

    执行上面查询语句,得到以下结果 -

    +-------------+------------+-----------+--------+
    | employee_id | first_name | last_name | salary |
    +-------------+------------+-----------+--------+
    |         119 | Karen      | Zhang     | 2500   |
    |         118 | Guy        | Zhang     | 2600   |
    |         126 | Irene      | Liu       | 2700   |
    |         117 | Sigal      | Zhang     | 2800   |
    |         116 | Shelli     | Zhang     | 2900   |
    |         104 | Bruce      | Wong      | 6000   |
    |         202 | Pat        | Zhou      | 6000   |
    |         179 | Charles    | Yang      | 6200   |
    ... ...
    |         205 | Shelley    | Wu        | 12000  |
    |         201 | Michael    | Zhou      | 13000  |
    |         146 | Karen      | Liu       | 13500  |
    |         145 | John       | Liu       | 14000  |
    |         102 | Lex        | Liang     | 17000  |
    |         101 | Neena      | Wong      | 17000  |
    |         100 | Steven     | Lee       | 24000  |
    +-------------+------------+-----------+--------+
    33 rows in set
    

    SQL NOT EXISTS示例

    请参考以下员工和家属表:

    以下查询使用NOT EXISTS运算符来获取没有任何家属的员工。

    SELECT
        employee_id, first_name, last_name
    FROM
        employees e
    WHERE
        NOT EXISTS (
            SELECT
                employee_id
            FROM
                dependents d
            WHERE
                d.employee_id = e.employee_id
        );
    

    执行上面查询语句,得到以下结果 -

    通过上面的学习,现在您应该知道如何使用NOT运算符来否定布尔表达式了。

  • 相关阅读:
    Retrofit 2使用要点梳理:小白进阶回忆录
    浅析Android动画(三),自定义Interpolator与TypeEvaluator
    浅析Android动画(二),属性动画高级实例探究
    浅析Android动画(一),View动画高级实例探究
    Retrofit 2使用要点梳理:浅析POST文件/表单上传
    AS历史代码记录,找回本地未提交代码
    注解基础篇:自定义Java Annotation
    注解提高篇:自定义注解处理器(APT)
    AndroidStudio快捷键大全
    VisualStudio2015常用快捷键
  • 原文地址:https://www.cnblogs.com/myhomepages/p/15827021.html
Copyright © 2020-2023  润新知