如何使用SQL NOT运算
在本教程中,您将学习如何使用SQL NOT
运算符来否定SELECT
语句WHERE
子句中的布尔表达式。
在前面已经学习了如何使用各种逻辑运算符,如:AND,OR,LIKE,BETWEEN,IN和EXISTS。 这些运算符可帮助您在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
,2
或3
中工作的所有员工。
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运算符,以使员工的薪水不在1000
到1000
之间。
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
运算符来否定布尔表达式了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构