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 子句中使用的运算符: