SQL In
SQL IN 操作符
Section titled “SQL IN 操作符”IN 操作符
Section titled “IN 操作符”IN 操作符允许您在 WHERE 子句中指定多个值。它作为多个 OR 条件的简写,通常能使查询更具可读性,有时也能提高性能。
SQL IN 语法
Section titled “SQL IN 语法”SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, …);
IN 操作符也可以与返回单列值的子查询一起使用:
SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT another_column FROM another_table WHERE condition);
您还可以使用 NOT IN 来排除与列表中任何值匹配的行。
演示数据库:Northwind
Section titled “演示数据库:Northwind”我们将使用 Northwind 示例数据库中的 “Customers” 表。
| CustomerID | CustomerName | City | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Berlin | Germany |
| 2 | Ana Trujillo Emparedados y helados | México D.F. | Mexico |
| 3 | Antonio Moreno Taquería | México D.F. | Mexico |
| 4 | Around the Horn | London | UK |
| 5 | Berglunds snabbköp | Luleå | Sweden |
| … |
IN 操作符示例
Section titled “IN 操作符示例”示例 1:选择来自特定城市的客户
Section titled “示例 1:选择来自特定城市的客户”以下 SQL 语句选择所有位于 ‘Paris’ 或 ‘London’ 的客户:
SELECT *FROM CustomersWHERE City IN ('Paris', 'London');这等同于:
SELECT *FROM CustomersWHERE City = 'Paris' OR City = 'London';示例 2:将 IN 与子查询一起使用
Section titled “示例 2:将 IN 与子查询一起使用”假设您想查找所有下过订单的客户。(注意:使用 INNER JOIN 通常是实现此目的更直接的方法,但这演示了 IN 与子查询的用法)。
SELECT CustomerName, City, CountryFROM CustomersWHERE CustomerID IN (SELECT DISTINCT CustomerID FROM Orders);实际应用:
IN 操作符在以下情况下非常有用:
- 按固定的已知值集进行过滤(例如,产品 ID、状态码、特定地区)。
- 基于另一个查询的结果进行过滤(动态条件)。
- 相比冗长的
OR条件链,提高了查询的可读性。
- 性能:对于非常长的文字值列表,性能可能因数据库系统而异。一些系统能很好地优化
IN,而另一些则可能难以处理极大的列表。与子查询一起使用IN通常能得到很好的优化。 NULL值:当列表中或被比较的列中存在NULL值时,请务必小心。column_name IN (value1, NULL, value2)的行为与可能预期的关于NULL比较的方式有所不同。通常,NULL不等于NULL,并且NULL不等于任何其他值。