了解 PostgreSQL 中的 WHERE(附带示例)

Abstract shapes over a dark background.

Timescale 团队撰写

PostgreSQL(或 TimescaleDB)中的 WHERE 子句用于过滤数据,仅检索相关记录。使用 WHERE 子句,您可以指定查询结果中包含的行必须满足的条件。

什么是 WHERE 子句?

PostgreSQL 中的 WHERE 子句用于根据指定的条件过滤记录。它是 SQL 中最常用的子句之一,使您能够仅检索满足条件中定义的标准的行。

PostgreSQL WHERE 语法

WHERE 子句的基本语法如下:

SELECT column1, column2, ...
FROM table
WHERE condition;

示例表

我们来考虑一个名为 employees 的表,它具有以下结构和数据:

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    department VARCHAR(50),
    salary NUMERIC,
    hire_date DATE
);

INSERT INTO employees (name, department, salary, hire_date) VALUES
('Alice', 'Engineering', 70000, '2020-01-15'),
('Bob', 'HR', 50000, '2019-02-20'),
('Carol', 'Engineering', 75000, '2018-03-10'),
('Dave', 'Marketing', 60000, '2021-04-12'),
('Eve', 'Engineering', 72000, '2020-05-05'),
('Grace', 'Marketing', 58000, '2021-07-18'),
('Hank', 'Engineering', 69000, '2022-08-22'),
('Ivy', 'HR', 51000, '2019-09-30'),
('Jack', 'Marketing', 62000, '2020-10-25');

WHERE 子句的实际示例

让我们深入研究一些示例,以了解 WHERE 子句的实际应用。

示例 1:按单个条件过滤

假设我们要检索工程部门的所有员工。我们可以使用WHERE子句来实现这一点。

SELECT id, name, department, salary
FROM employees
WHERE department = 'Engineering';

结果

 id | name  | department  | salary
----+-------+-------------+--------|
  1 | Alice | Engineering |  70000
  3 | Carol | Engineering |  75000
  5 | Eve   | Engineering |  72000
  8 | Hank  | Engineering |  69000

此查询返回department列为工程的所有行。

示例 2:使用多个条件

现在,假设我们要检索工程部门中薪水高于 70,000 美元的员工。我们可以使用带有多个条件的WHERE子句

SELECT id, name, department, salary
FROM employees
WHERE department = 'Engineering' AND salary > 70000;

结果

 id | name  | department  | salary
----+-------+-------------+--------
  3 | Carol | Engineering |  75000
  5 | Eve   | Engineering |  72000

此查询过滤department工程salary大于 70,000 美元的行。

示例 3:按日期过滤

让我们检索 2020 年 1 月 1 日之后入职的员工。我们可以使用WHERE子句根据hire_date列进行过滤。

SELECT id, name, department, hire_date
FROM employees
WHERE hire_date > '2020-01-01';

结果

 id | name  | department | hire_date
----+-------+------------+------------
  1 | Alice | Engineering| 2020-01-15
  4 | Dave  | Marketing  | 2021-04-12
  5 | Eve   | Engineering| 2020-05-05
  7 | Grace | Marketing  | 2021-07-18
  8 | Hank  | Engineering| 2022-08-22
 10 | Jack  | Marketing  | 2020-10-25

此查询返回 2020 年 1 月 1 日之后入职的所有员工。

示例 4:使用 OR 条件假设我们要检索人力资源部或市场部的所有员工。我们可以在WHERE子句中使用OR条件

SELECT id, name, department, salary
FROM employees
WHERE department = 'HR' OR department = 'Marketing';

结果

 id | name  | department | salary
----+-------+------------+--------
  2 | Bob   | HR         |  50000
  4 | Dave  | Marketing  |  60000
  6 | Frank | HR         |  52000
  7 | Grace | Marketing  |  58000
  9 | Ivy   | HR         |  51000
 10 | Jack  | Marketing  |  62000

此查询返回人力资源部或市场部的所有员工。

结论

WHERE子句是 SQL 和 PostgreSQL 的基本组成部分,允许您根据指定的条件过滤查询结果。通过掌握WHERE子句,您可以编写更精确、更有效的查询,确保只检索您需要的数据。

如果您想在 PostgreSQL 或 TimescaleDB 的查询中执行多个聚合,您可以向聚合函数添加一个WHERE子句来扩展 FILTER 子句。 阅读我们关于 FILTER 的文章了解更多信息。