SQLPathLab
子查询 · 进阶

IN

判断某个值是否属于指定列表或子查询结果。

简介

IN 判断一个值是否等于列表或子查询结果中的任意值,适合替代多个等值 OR 条件。子查询中的重复值不会改变匹配含义。涉及 NULL 时要特别谨慎:NOT IN 若没有命中非 NULL 值,而集合中又含 NULL,判断会变为 UNKNOWN,因而常导致零行返回。

基础语法

SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers);

示例

IN 示例

从 customers 子查询取得 id,再返回 customer_id 位于该集合中的订单。

示例数据表

表名:orders
orders
idcustomer_idproduct_idnamedepartmentamountstatuscreated_atdiscount
1 101 201 Alice Sales 1200 paid 2026-01-03 0
2 102 202 Bob IT 900 pending 2026-01-08 50
3 101 201 Cindy Sales 1500 paid 2026-02-02 100
4 104 203 David HR 700 cancelled 2026-02-15 0
表名:customers
customers
idnamecitystatusphonenickname
101 Alice New York active 138-0000-0001 NULL
102 Bob Seattle active NULL Bobby
103 Cindy Austin inactive 138-0000-0003 NULL

运行结果

result
idcustomer_idproduct_idnamedepartmentamountstatuscreated_atdiscount
1 101 201 Alice Sales 1200 paid 2026-01-03 0
2 102 202 Bob IT 900 pending 2026-01-08 50
3 101 201 Cindy Sales 1500 paid 2026-02-02 100

常见问题

IN 适合替代多个 OR 吗?

适合。字段等于多个固定值时,IN 通常比多个 OR 更简洁。

IN 可以接子查询吗?

可以,例如 WHERE customer_id IN (SELECT id FROM customers ...)。

IN 和 EXISTS 怎么选?

固定列表用 IN 很直观;相关子查询或只判断存在性时,EXISTS 往往更清楚。

标签

条件判断常用过滤数据

这篇内容是否清楚?