PostgreSQL 教程: WHERE

九月 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的计算结果必须为真、假或未知。它可以是布尔表达式或使用ANDOR运算符的布尔表达式的组合。

该查询仅返回满足WHERE子句中condition的行。换句话说,只有导致condition计算结果为 true 的行才会包含在结果集中。

PostgreSQL 计算WHERE子句的时间点,在FROM子句之后,在SELECT列表和ORDER BY子句之前:

img

如果在SELECT列表子句中使用列别名,则不能在WHERE子句中使用它们。

除了SELECT语句之外,您还可以使用UPDATEDELETE语句中的WHERE子句来指定要更新或删除的行。

要构成WHERE子句中的条件,请使用比较运算符和逻辑运算符:

运算符 描述
= 等于
> 大于
< 小于
>= 大等于
<= 小等于
<> 或 != 不等于
AND 逻辑运算符 AND
OR 逻辑运算符 OR
IN 如果值与列表中的任何值匹配,则返回 true
BETWEEN 如果值介于某个值范围之间,则返回 true
LIKE 如果值与模式匹配则返回 true
IS NULL 如果值为 NULL,则返回 true
NOT 对其他运算符的结果求反

PostgreSQL WHERE 子句示例

让我们通过一些使用WHERE子句的示例来练习。我们将使用示例数据库中的customer表进行演示。

customer table

1) 使用 WHERE 子句和等于运算符 (=) 示例

以下语句使用WHERE子句查找名字为Jamie的客户:

SELECT
	last_name,
	first_name
FROM
	customer
WHERE
	first_name = 'Jamie';

PostgreSQL WHERE string comparison

2) 使用 WHERE 子句和 AND 运算符示例

以下示例通过使用AND逻辑运算符组合两个布尔表达式,来查找名字为Jamie和姓氏为rice的客户:

SELECT
	last_name,
	first_name
FROM
	customer
WHERE
	first_name = 'Jamie' AND
    last_name = 'Rice';

PostgreSQL WHERE with AND operator

3) 使用 WHERE 子句和 OR 运算符示例

此示例使用OR运算符查找姓氏为Rodriguez或名字为Adam的客户:

SELECT
	first_name,
	last_name
FROM
	customer
WHERE
	last_name = 'Rodriguez' OR 
	first_name = 'Adam';

PostgreSQL WHERE with OR operator

4) 使用 WHERE 子句和 IN 运算符示例

如果要将某个字符串与列表中的任何字符串进行匹配,可以使用IN运算符。

例如,以下语句返回名字为Ann,或Anne,或Annie的客户:

SELECT
	first_name,
	last_name
FROM
	customer
WHERE 
	first_name IN ('Ann','Anne','Annie');

PostgreSQL WHERE with IN operator

5) 使用 WHERE 子句和 LIKE 运算符示例

要查找与指定模式匹配的字符串,可以使用LIKE运算符。以下示例返回名字以字符串Ann开头的所有客户:

SELECT
	first_name,
	last_name
FROM
	customer
WHERE 
	first_name LIKE 'Ann%'

PostgreSQL WHERE with LIKE operator

%称为匹配任何字符串的通配符。模式'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;

PostgreSQL WHERE with BETWEEN operator

在此示例中,我们使用LENGTH()函数获取输入字符串的字符数。

7) 使用带有不等于运算符 (<>) 的 WHERE 子句示例

此示例查找名字以Bra开头且姓氏不是Motley的客户:

SELECT 
	first_name, 
	last_name
FROM 
	customer 
WHERE 
	first_name LIKE 'Bra%' AND 
	last_name <> 'Motley';

PostgreSQL WHERE with Not Equal operator

请注意,您可以互换使用!=运算符和<>运算符,因为它们是等效的。

在本教程中,您学习了如何在SELECT语句中使用 PostgreSQL 的WHERE子句根据指定条件过滤行。