SQL Not运算符

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

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

要反转任何布尔表达式的结果,请使用NOT运算符。 以下演示如何使用NOT运算符。

NOT [Boolean_expression]

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

原值应用Not运算符后
TRUEFALSE
FALSETRUE
NULLNULL

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;

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

《SQL Not运算符》

查询工作在部门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示例

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

《SQL Not运算符》

以下查询使用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
    );

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

《SQL Not运算符》

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

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-not.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞