九月 3, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的WHERE子句来过滤SELECT语句返回的行。
目录
SELECT语句返回表中一列或多列的所有行。要选择满足指定条件的行,可以使用WHERE子句。
PostgreSQL WHERE 子句概述
PostgreSQL 的WHERE子句的语法如下:
SELECT select_list
FROM table_name
WHERE condition
ORDER BY sort_expression
WHERE子句出现在SELECT语句的FROM子句之后。WHERE子句使用condition来过滤从SELECT列表子句返回的行。
condition的计算结果必须为真、假或未知。它可以是布尔表达式或使用AND和OR运算符的布尔表达式的组合。
该查询仅返回满足WHERE子句中condition的行。换句话说,只有导致condition计算结果为 true 的行才会包含在结果集中。
PostgreSQL 计算WHERE子句的时间点,在FROM子句之后,在SELECT列表和ORDER BY子句之前:

如果在SELECT列表子句中使用列别名,则不能在WHERE子句中使用它们。
除了SELECT语句之外,您还可以使用UPDATE和DELETE语句中的WHERE子句来指定要更新或删除的行。
要构成WHERE子句中的条件,请使用比较运算符和逻辑运算符:
| 运算符 | 描述 |
|---|---|
| = | 等于 |
| > | 大于 |
| < | 小于 |
| >= | 大等于 |
| <= | 小等于 |
| <> 或 != | 不等于 |
| AND | 逻辑运算符 AND |
| OR | 逻辑运算符 OR |
| IN | 如果值与列表中的任何值匹配,则返回 true |
| BETWEEN | 如果值介于某个值范围之间,则返回 true |
| LIKE | 如果值与模式匹配则返回 true |
| IS NULL | 如果值为 NULL,则返回 true |
| NOT | 对其他运算符的结果求反 |
PostgreSQL WHERE 子句示例
让我们通过一些使用WHERE子句的示例来练习。我们将使用示例数据库中的customer表进行演示。

1) 使用 WHERE 子句和等于运算符 (=) 示例
以下语句使用WHERE子句查找名字为Jamie的客户:
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie';

2) 使用 WHERE 子句和 AND 运算符示例
以下示例通过使用AND逻辑运算符组合两个布尔表达式,来查找名字为Jamie和姓氏为rice的客户:
SELECT
last_name,
first_name
FROM
customer
WHERE
first_name = 'Jamie' AND
last_name = 'Rice';

3) 使用 WHERE 子句和 OR 运算符示例
此示例使用OR运算符查找姓氏为Rodriguez或名字为Adam的客户:
SELECT
first_name,
last_name
FROM
customer
WHERE
last_name = 'Rodriguez' OR
first_name = 'Adam';

4) 使用 WHERE 子句和 IN 运算符示例
如果要将某个字符串与列表中的任何字符串进行匹配,可以使用IN运算符。
例如,以下语句返回名字为Ann,或Anne,或Annie的客户:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name IN ('Ann','Anne','Annie');

5) 使用 WHERE 子句和 LIKE 运算符示例
要查找与指定模式匹配的字符串,可以使用LIKE运算符。以下示例返回名字以字符串Ann开头的所有客户:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Ann%'

%称为匹配任何字符串的通配符。模式'Ann%'匹配任何以'Ann'开头的字符串。
6) 将 WHERE 子句与 BETWEEN 运算符一起使用的示例
以下示例使用BETWEEN运算符查找名字以字母A开头且包含 3 到 5 个字符的客户。
如果某个值在某个值范围内,则BETWEEN运算符返回 true。
SELECT
first_name,
LENGTH(first_name) name_length
FROM
customer
WHERE
first_name LIKE 'A%' AND
LENGTH(first_name) BETWEEN 3 AND 5
ORDER BY
name_length;

在此示例中,我们使用LENGTH()函数获取输入字符串的字符数。
7) 使用带有不等于运算符 (<>) 的 WHERE 子句示例
此示例查找名字以Bra开头且姓氏不是Motley的客户:
SELECT
first_name,
last_name
FROM
customer
WHERE
first_name LIKE 'Bra%' AND
last_name <> 'Motley';

请注意,您可以互换使用!=运算符和<>运算符,因为它们是等效的。
在本教程中,您学习了如何在SELECT语句中使用 PostgreSQL 的WHERE子句根据指定条件过滤行。