九月 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
子句根据指定条件过滤行。