如何使用SQL IN运算符将列中的值与一组值进行比较
在本教程中,您将学习如何使用SQL IN
运算符将列中的值与一组值进行比较。
SQL IN运算符简介
IN
运算符是一个逻辑运算符,用于将值与一组值进行比较。 如果值在值集内,则IN
运算符返回true
。 否则,它返回false
或unknown
。
以下是IN
运算符的语法:
expression IN (value1,value2,...)
IN
运算符通常用于SELECT,UPDATE或DELETE语句的WHERE
子句中。 它也广泛用于子查询中。
使用IN
运算符的条件可以使用一个或多个OR
运算符重写,如下所示:
expression = value1 OR expression = value2 OR ...
要否定IN
运算符的结果,请使用NOT
运算符:
expression NOT IN (value1, value2,...)
如果表达式与列表中的任何值都不匹配,则NOT IN
运算符返回true
,否则返回false
。
同样,可以使用AND
运算符重写NOT IN
运算符,如下所示:
expression != value1 AND expression != value2 AND...
请注意,如果列表中的任何值(value1
,value2
,...
)为null
,则IN
运算符不返回任何行。
1. SQL IN示例
我们将使用示例数据库中的employees
表来演示IN
运算符的功能。更多教程请访问http://www.manongzj.com
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为8
,9
或10
的所有员工,请使用IN
运算符,如下所示:
SELECT
employee_id, first_name, last_name, job_id
FROM
employees
WHERE
job_id IN (8, 9, 10)
ORDER BY
job_id;
执行上面示例代码,得到以下结果 -
要查找工作ID不是8
,9
或10
的所有员工,请使用NOT IN
运算符,如下所示:
SELECT
employee_id, first_name, last_name, job_id
FROM
employees
WHERE
job_id NOT IN (8, 9, 10)
ORDER BY
job_id;
SQL IN带有子查询示例
子查询是嵌套在另一个查询中的查询。 以下查询查找市场营销 和IT部门的部门ID:
SELECT
department_id
FROM
departments
WHERE
department_name = '市场营销'
OR department_name = 'IT';
执行上面示例代码,得到以下结果 -
+---------------+
| department_id |
+---------------+
| 2 |
| 6 |
+---------------+
2 rows in set
该查询返回两个部门的列表。 可以将此列表提供给IN
运算符,以查找在市场营销 和IT部门工作的所有员工。
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
department_id IN (2, 6);
执行上面查询语句,得到以下结果 -
要使它更简单,可以使用在第二个查询中嵌套第一个查询的子查询来实现:
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
department_id IN (SELECT
department_id
FROM
departments
WHERE
department_name = '市场营销'
OR department_name = 'IT')
在本教程中,您已经学习了如何使用SQL IN
运算符来测试值是否在值列表或子查询中的条件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南