跳到主要内容

SQL中的IN和NOT IN运算符

提示

1.IN运算符的基本用法:在SQL中,IN运算符与WHERE子句结合使用,用于匹配列表中的值。例如,SELECT first_name, country FROM Customers WHERE country IN ('USA', 'UK'); 将选择 country 列中值为 USAUK 的行。

2.NOT IN运算符的用途NOT IN运算符用于排除与列表中值匹配的行,返回除这些行之外的所有行。例如,SELECT first_name, country FROM Customers WHERE country NOT IN ('UK', 'UAE'); 将选择 country 列中值不是 UKUAE 的行。

3.结合子查询使用IN运算符可以与子查询结合使用,以从另一个表中获取值列表。例如,SELECT customer_id, first_name FROM Customers WHERE customer_id IN (SELECT customer_id FROM Orders); 将选择在Orders表中有记录的Customers表中的客户。

IN 运算符与 [WHERE](/tutorials/sql/select) 子句一起使用,用于匹配列表中的值。

示例


SELECT first_name, country
FROM Customers
WHERE country IN ('USA');

这里,SQL 命令从 Customers 表中选择 country 值为 'USA' 的行。

SQL IN 语法

SQL IN 运算符的语法是:

SELECT column1, column2, ...
FROM table
WHERE column IN (value1, value2, ...);

这里,

  • column1, column2, ... 是表的列
  • table 是我们从中选择数据的表名
  • column 是比较值的地方
  • IN 运算符指定了 column 值应该比较的值
  • value1, value2, ...column 值比较的值

例如,


SELECT first_name, country
FROM Customers
WHERE country IN ('USA', 'UK');

这里,如果 countryUSAUK,SQL 命令选择行。

如何在 SQL 中使用 IN 运算符

SQL IN 运算符与列

IN 运算符也可以用于选择在给定字段中存在某个特定值的行。让我们看一个示例来阐明它。


SELECT first_name, country
FROM Customers
WHERE 'USA' IN (country);

这里,如果 USA 值存在于 country 字段中,SQL 命令选择行。

如何在 SQL 中使用带有值的 IN 运算符

SQL NOT IN 运算符

NOT IN 运算符用于排除与列表中值匹配的行。它返回除被排除行之外的所有行。例如,


SELECT first_name, country
FROM Customers
WHERE country NOT IN ('UK', 'UAE');

这里,如果 UKUAE 不在 country 列中,SQL 命令选择行。

如何在 SQL 中使用 NOT IN 运算符

注意: IN 运算符的工作方式被 NOT 运算符反转。它们基本上是两个合并的运算符。要了解更多,请访问 SQL 的 AND、OR 和 NOT 运算符

SQL IN 运算符与重复值

顺便说一下,IN 运算符忽略列表中的重复值。例如,看一下下面的代码。

```sql exec-- IN 忽略重复的 'USA' 值

SELECT first_name, country FROM Customers WHERE country IN ('USA', 'UK', 'USA');


上面的代码等同于下面的代码。

```sql exec-- 选择生活在美国或英国的客户

SELECT first_name, country
FROM Customers
WHERE country IN ('USA', 'UK');

SQL IN 运算符与子查询

假设我们只想获取那些下过订单的客户的详细信息。我们可以使用子查询来实现,如下所示,

-- 子查询放在 `IN` 关键字后的括号内

SELECT customer_id, first_name
FROM Customers
WHERE customer_id IN (
SELECT customer_id
FROM Orders
);

这里,SQL 命令

  1. 使用子查询从 Orders 表中选择 customer_id
  2. Customers 表中选择行,其中 customer_id 在子查询的结果集中,即如果 `

customer_id也在Orders` 表中。

要了解更多,请访问 SQL 子查询