Timescale 团队撰写
PostgreSQL(或 TimescaleDB)中的 WHERE
子句用于过滤数据,仅检索相关记录。使用 WHERE
子句,您可以指定查询结果中包含的行必须满足的条件。
PostgreSQL 中的 WHERE
子句用于根据指定的条件过滤记录。它是 SQL 中最常用的子句之一,使您能够仅检索满足条件中定义的标准的行。
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
子句的实际应用。
示例 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 的文章了解更多信息。