SQL IN 运算符
SQL IN 运算符
IN 运算符在 WHERE 子句中使用,用于检查指定列的值是否匹配所提供的列表中的任意值。
IN 运算符作为多个 OR 条件的简写,使查询更简短、更易读。
以下 SQL 使用 IN 运算符来选择所有来自德国、法国或英国的客户:
实例
返回来自 'Germany'、'France'、或者 'UK' 的所有客户:
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
以下 SQL 语句使用多个 OR 条件来选择所有来自德国、法国或英国的客户(结果相同,但代码更长):
SELECT * FROM Customers WHERE Country = 'Germany' OR Country = 'France' OR Country = 'UK';
语法
SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...);
演示数据库
以下是实例中使用的 Customers 表的片段:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
NOT IN 运算符
通过在 IN 运算符前面使用 NOT 关键字,您可以返回不属于列表中任何值的所有记录。
实例
返回不是来自 'Germany'、'France' 或 'UK' 的所有客户:
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
IN (SELECT)
IN (SELECT)
您也可以在 WHERE 子句中将 IN 与子查询一起使用。
使用子查询,您可以返回主查询中所有存在于子查询结果中的记录。
以下 SQL 语句会返回在 Orders 表中有订单的所有客户:
实例
SELECT * FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders);
NOT IN (SELECT)
上例中的结果返回了 74 条记录,这意味着有 17 个客户没有下任何订单。
让我们通过使用 NOT IN 运算符来检查这是否正确。
实例
返回在 Orders 表中没有下任何订单的所有客户:
SELECT * FROM Customers WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);