在 SQL 中,IN 是一个用于指定多个值的操作符。它用于 WHERE 子句中,以检查某个字段的值是否与一组给定的值中的任何一个匹配。
它通常用于简化多个 OR 条件的查询。
它常用于过滤满足条件的数据,既可以使用静态值列表,也可以结合子查询动态生成值列表。
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, value3, ...);
column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
table_name:要查询的表名称。
column:要查询的字段名称。
value1, value2, ...:要查询的值,可以为多个值。
从 student 学生表中,获取 id 为1、2、3的学生信息:
SELECT * FROM student WHERE id IN(1, 2, 3);
IN 可以结合子查询动态生成条件。例如:
获取已经分配了老师的所有学生信息:
SELECT * FROM student WHERE teacher_id IN (SELECT id FROM teacher);
NOT IN 用于查找某列的值不在指定集合中的数据。比如:
查找不是"李红"、"刘涛"外的所有学生信息:
SELECT * FROM student WHERE name NOT IN ("李红", "刘涛");
使用 IN 可以让查询更简洁。例如:
SELECT * FROM student WHERE id IN(1, 2, 3);
# 等价于
SELECT * FROM student WHERE id = 1 OR name = 2 OR name = 3;
如果子查询的结果中包含 NULL,可能会导致意外的结果。例如:
SELECT * FROM student WHERE teacher_id NOT IN (1, NULL);
对于小型列表,IN 效率较高。
如果列表较大,或子查询返回的结果集较大,可能需要索引或优化查询结构。
IN 操作符简化了多个 OR 条件的查询,能够有效检查字段值是否在一个指定的列表中。
它不仅适用于数字,还可以用于字符串和子查询。
NOT IN 用于排除指定值的记录。
这种语法在处理多个条件时非常方便,避免了繁琐的 OR 条件,简洁且易读。