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);

亲自试一试