九月 5, 2023
摘要:在本教程中,您将学习如何在WHERE
子句中使用 PostgreSQL 的 IN 运算符,来检查某个值是否与列表中的任何值匹配。
目录
PostgreSQL IN 运算符语法
您可以在WHERE
子句中使用IN
运算符来检查某个值是否与值列表中的任何值匹配。
IN
运算符的语法如下:
value IN (value1,value2,...)
如果value
匹配列表中的任何值,即value1
, value2
, … ,则IN
运算符返回 true。
值列表可以是文字值(如数字、字符串)列表,或者SELECT
语句的结果,如下:
value IN (SELECT column_name FROM table_name);
括号内的查询称为子查询,它是嵌套在另一个查询中的查询。请注意,您将在后续教程中了解有关子查询的更多信息。
PostgreSQL IN 运算符示例
假设你想知道 ID 为 1 和 2 的客户的租赁信息,你可以在WHERE
子句中使用IN
运算符,如下所示:
SELECT customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id IN (1, 2)
ORDER BY
return_date DESC;
以下查询使用等于 (=
) 和OR
运算符替代 IN 运算符。它等价于上面的查询:
SELECT
rental_id,
customer_id,
return_date
FROM
rental
WHERE
customer_id = 1 OR customer_id = 2
ORDER BY
return_date DESC;
使用IN
运算符的查询比使用等于 (=
) 和OR
运算符的查询更短且更具可读性。此外,PostgreSQL 使用IN
运算符执行查询比使用OR
运算符列表执行相同查询要快得多。
PostgreSQL NOT IN 运算符
您可以将IN
运算符与NOT
运算符结合使用来选择其值与列表中的值不匹配的行。
例如,以下语句查找 ID 不为 1 或 2 的客户的所有租赁。
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id NOT IN (1, 2);
与IN
运算符类似,您可以使用不等于 (<>
) 和AND
运算符来编写NOT IN
运算符:
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id <> 1
AND customer_id <> 2;
此查询返回与上面使用NOT IN
运算符的查询相同的输出。
带有子查询的 IN 表达式
以下语句从rental
表中查询返回日期为2005-05-27
的客户 ID 列表:
SELECT customer_id
FROM rental
WHERE CAST (return_date AS DATE) = '2005-05-27'
ORDER BY customer_id;
由于此查询返回一个值列表,因此您可以将其用作IN
运算符的输入,如下所示:
SELECT
customer_id,
first_name,
last_name
FROM
customer
WHERE
customer_id IN (
SELECT customer_id
FROM rental
WHERE CAST (return_date AS DATE) = '2005-05-27'
)
ORDER BY customer_id;
有关子查询的更多信息,请查看子查询教程。
在本教程中,您学习了如何使用 PostgreSQL 的IN
运算符,来检查值是否与值列表中的任何值匹配。