在 SQL Server 中,IN 子句用于在 WHERE 子句中指定多个值,它允许你测试某个列的值是否包含在指定的值列表中。如果列的值与列表中的任何值相匹配,那么条件就被视为真。


以下是 IN 子句的一些使用示例:
基本使用:
SELECT * FROM Employees
WHERE EmployeeID IN (1, 2, 5, 10);这个查询将返回 EmployeeID 为 1, 2, 5, 或 10 的所有员工记录。
与子查询结合使用:
SELECT * FROM Employees
WHERE EmployeeID IN (SELECT ManagerID FROM Managers);这个查询将返回所有员工记录,其 EmployeeID 出现在 Managers 表的 ManagerID 列中。
与字符串结合使用:
SELECT * FROM Employees
WHERE LastName IN ('Smith', 'Johnson', 'Williams');这个查询将返回所有姓为 Smith, Johnson, 或 Williams 的员工记录。
使用 IN 与空值:
SELECT * FROM Employees
WHERE LastName IN ('Smith', NULL);这个查询将返回所有姓为 Smith 的员工记录,以及所有 LastName 为 NULL 的员工记录。
使用 NOT IN:
SELECT * FROM Employees
WHERE EmployeeID NOT IN (1, 2, 5, 10);这个查询将返回除了 EmployeeID 为 1, 2, 5, 或 10 之外的所有员工记录。
与字符串函数结合使用:
SELECT * FROM Employees
WHERE LEFT(LastName, 3) IN ('Smi', 'Joh');这个查询将返回所有姓的前三个字母为 "Smi" 或 "Joh" 的员工记录。
使用 IN 子句时,需要注意列表中的值必须是静态值,也就是说,它们在查询执行时必须是已知的。如果列表中的值是动态的,那么你可能需要使用 EXISTS 或 JOIN 子句来代替。此外,如果 IN 子句中的列表包含大量值,可能会影响查询性能,这时也可以考虑使用 JOIN 来优化。
https://learn.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql?view=sql-server-ver16










