PostgreSQL WHERE 用法与实例
本文介绍了在 PostgreSQL 中如何在 SELECT
语句中使用 WHERE
过滤返回的行。
默认情况下,SELECT
查询数据表中的所有行数。但是,我们可能只想查询满足一定条件的行。比如年龄是 18 的学生,成绩中等的学生等。
在 PostgreSQL 中, 要返回满足指定条件的行,请在 SELECT
语句中使用 WHERE
子句。
除了 SELECT
语句之外,您还可以在 UPDATE
和 DELETE
语句中使用 WHERE
子句来指定要更新或删除的行。
PostgreSQL WHERE
子句概述
要返回满足指定条件的行,请按如下语法使用 PostgreSQL 带有 WHERE
子句的 SELECT
语句:
SELECT columns_list
FROM table_name
WHERE query_condition;
要更新满足指定条件的行,请按如下语法使用 PostgreSQL 带有 WHERE
子句的 UPDATA
语句:
UPDATA table_name
SET column_name = value1, ...
WHERE query_condition;
要删除满足指定条件的行,请按如下语法使用 PostgreSQL 带有 WHERE
子句的 DELETE
语句:
DELETE FROM table_name
WHERE query_condition;
在这里:
WHERE
子句中的 query_condition
为布尔表达式。布尔表达式的结果必须为 true
, false
, 或者 NULL
。它可以是一个布尔表达式或使用 AND
和 OR
运算符的布尔表达式的组合。
WHERE
子句使用 query_condition
来过滤表中的行:
- 只有导致
query_condition
评估为真的行才会包含在SELECT
语句返回的结果集中。 - 只有导致
query_condition
评估为真的行才会被UPDATE
语句更新。 - 只有导致
query_condition
评估为真的行才会被DELETE
语句删除。
PostgreSQL WHERE
子句示例
下面我们提供了一些实用的例子来展示 WHERE
子句的威力。
我们将使用 PostgreSQL Sakila 示例数据库中的 customer
表进行演示这些实例。
将 WHERE 子句与等号 (=
) 运算符一起使用的示例
以下语句使用 WHERE
子句查找名字为 JAMIE
的客户:
SELECT last_name,
first_name
FROM customer
WHERE first_name = 'JAMIE';
last_name | first_name
-----------+------------
RICE | JAMIE
WAUGH | JAMIE
在 WHERE
子句中使用 AND
运算符
以下示例通过使用逻辑运算符 AND
组合两个布尔表达式来查找名字和姓氏为 JAMIE
和 RICE
的客户:
SELECT last_name,
first_name
FROM customer
WHERE first_name = 'JAMIE'
AND last_name = 'RICE';
last_name | first_name
-----------+------------
RICE | JAMIE
在 WHERE
子句中使用 OR
运算符
此示例使用 OR
运算符查找姓氏为 RODRIGUEZ
或名字为 ADAM
的客户:
SELECT first_name,
last_name
FROM customer
WHERE last_name = 'RODRIGUEZ'
OR first_name = 'ADAM';
first_name | last_name
------------+-----------
LAURA | RODRIGUEZ
ADAM | GOOCH
在 WHERE
子句中使用 IN
运算符
如果要将字符串与一个列表中的任何字符串匹配,可以使用 IN
运算符。
例如,以下语句返回名字为 ANN
, ANNE
, 或 ANNIE
的客户:
SELECT first_name,
last_name
FROM customer
WHERE first_name IN ('ANN', 'ANNE', 'ANNIE');
first_name | last_name
------------+-----------
ANN | EVANS
ANNE | POWELL
ANNIE | RUSSELL
在 WHERE
子句中使用 LIKE
运算符
要查找与指定模式匹配的字符串,请使用 LIKE
运算符。以下示例返回名字以字符串 ANN
开头的所有客户:
SELECT first_name,
last_name
FROM customer
WHERE first_name LIKE 'ANN%';
first_name | last_name
------------+-----------
ANNA | HILL
ANN | EVANS
ANNE | POWELL
ANNIE | RUSSELL
ANNETTE | OLSON
这里,通配符 %
可以匹配任意长度的任意字符。 模式 'ANN%'
模式匹配以 'ANN'
开头的任何字符串。
在 WHERE
子句中使用 BETWEEN
运算符
以下示例使用 BETWEEN
运算符查找名字以字母 A
开头并包含 3 到 5 个字符的客户。
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;
first_name | name_length
------------+-------------
AMY | 3
ANN | 3
ANA | 3
ANDY | 4
ANNA | 4
ANNE | 4
ALMA | 4
ADAM | 4
ALAN | 4
ALEX | 4
ANGEL | 5
AGNES | 5
ANDRE | 5
AARON | 5
ALLAN | 5
ALLEN | 5
ALICE | 5
ALVIN | 5
ANITA | 5
AMBER | 5
APRIL | 5
ANNIE | 5
在这个例子中,我们使用了获取输入字符串的字符数的 LENGTH()
函数。
在 WHERE
子句中使用不等运算符 (<>
)运算符
此示例查找名字以 BRA
开头而姓氏不以 MOTLEY
开头的客户:
SELECT first_name,
last_name
FROM customer
WHERE first_name LIKE 'BRA%'
AND last_name <> 'MOTLEY';
first_name | last_name
------------+-----------
BRANDY | GRAVES
BRANDON | HUEY
BRAD | MCCURDY
您可以使用 !=
运算符代替 <>
运算符,因为它们是等效的。
结论
本文向您介绍了 WHERE
子句的作用,以及如何在 PostgreSQL SELECT
语句中使用 WHERE
子句根据指定条件过滤行。
以下是一些可以在 WHERE
子句中使用的运算符: