Published at Jul 19, 2024

Written by Team Timescale
The WHERE clause in PostgreSQL (or TimescaleDB) filters data to retrieve only the relevant records. Using the WHERE clause allows you to specify conditions that must be met for the rows to be included in the query results.
The WHERE clause in PostgreSQL is used to filter records based on a specified condition. It is one of the most commonly used clauses in SQL, enabling you to retrieve only those rows that meet the criteria defined in the condition.
The basic syntax of the WHERE clause is as follows:
SELECT column1, column2, ...
FROM table
WHERE condition;
Let's consider a table employees with the following structure and data:
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');
Let's dive into some examples to see the WHERE clause in action.
Example 1: Filtering by a single condition
Suppose we want to retrieve all employees from the Engineering department. We can use the WHERE clause to achieve this:
SELECT id, name, department, salary
FROM employees
WHERE department = 'Engineering';
Result:
id | name | department | salary
----+-------+-------------+--------|
1 | Alice | Engineering | 70000
3 | Carol | Engineering | 75000
5 | Eve | Engineering | 72000
8 | Hank | Engineering | 69000
This query returns all rows where the department column is Engineering.
Example 2: Using multiple conditions
Now, let's say we want to retrieve employees from the Engineering department who have a salary greater than $70,000. We can use the WHERE clause with multiple conditions:
SELECT id, name, department, salary
FROM employees
WHERE department = 'Engineering' AND salary > 70000;
Result:
id | name | department | salary
----+-------+-------------+--------
3 | Carol | Engineering | 75000
5 | Eve | Engineering | 72000
This query filters the rows where the department is Engineering and the salary is greater than $70,000.
Example 3: Filtering by date
Let's retrieve employees who were hired after January 1, 2020. We can use the WHERE clause to filter based on the hire_date column:
SELECT id, name, department, hire_date
FROM employees
WHERE hire_date > '2020-01-01';
Result:
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
This query returns all employees who were hired after January 1, 2020.
Example 4: Using OR condition
Suppose we want to retrieve all employees from either the HR or Marketing department. We can use the OR condition within the WHERE clause:
SELECT id, name, department, salary
FROM employees
WHERE department = 'HR' OR department = 'Marketing';
Result:
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
This query returns all employees who are in either the HR or Marketing department.
The WHERE clause is a fundamental part of SQL and PostgreSQL that allows you to filter query results based on specified conditions. By mastering the WHERE clause, you can write more precise and effective queries, ensuring that you retrieve only the data you need.
If you want to perform several aggregations in your query in PostgreSQL or TimescaleDB, you can add a WHERE clause to aggregate functions to extend the FILTER clause. Read our article on FILTER to learn more.