Summary: in this tutorial, you will learn how to use the PostgreSQL WHERE
clause to filter rows in a table.
PostgreSQL WHERE clause
The SELECT FROM statement retrieves data from one or more columns of all rows of a table. In practice, you often need to select rows that meet a condition.
To filter rows from a table based on a condition, you use the WHERE
clause in the SELECT
statement:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Code language: SQL (Structured Query Language) (sql)
When executing the statement, PostgreSQL evaluates the FROM
clause first, then the WHERE
clause, and finally the SELECT
clause:
- First, retrieve each row in the
table_name
by running theFROM
clause. - Second, evaluate the
condition
in theWHERE
clause and include the row in the result set if thecondition
is true. - Third, select the columns specified in the
SELECT
clause from the selected rows.
If no rows from the table_name
meet the condition
, the SELECT
statement returns an empty set, which contains no rows.
PostgreSQL WHERE clause example
Suppose we have the inventories
table as follows:
CREATE TABLE inventories (
name VARCHAR(255),
brand VARCHAR(50),
quantity INT,
price DECIMAL(19, 2)
);
INSERT INTO inventories (name, brand, quantity, price)
VALUES ('iPhone 14 Pro', 'Apple', 10, 999.99),
('Galaxy S23 Ultra', 'Samsung', 15, 1199.99),
('Pixel 7 Pro', 'Google', 8, 899.99),
('Xperia 1 IV', 'Sony', 7, 1299.99);
Code language: SQL (Structured Query Language) (sql)
The following statement uses the WHERE
clause to retrieve the products with a quantity greater than 9:
SELECT name, quantity
FROM inventories
WHERE quantity > 9;
Code language: SQL (Structured Query Language) (sql)
Output:
name | quantity
------------------+----------
iPhone 14 Pro | 10
Galaxy S23 Ultra | 15
Code language: SQL (Structured Query Language) (sql)
How it works.
First, the FROM
clause selects all rows from the inventories
table:
name | brand | quantity | price
------------------+---------+----------+---------
iPhone 14 Pro | Apple | 10 | 999.99
Galaxy S23 Ultra | Samsung | 15 | 1199.99
Pixel 7 Pro | Google | 8 | 899.99
Xperia 1 IV | Sony | 7 | 1299.99
Code language: SQL (Structured Query Language) (sql)
Second, the WHERE
clause evaluates each row in the inventories
table, checks if the quantity
is greater than 10
, and includes the rows in the intermediate result set:
name | brand | quantity | price
------------------+---------+----------+---------
iPhone 14 Pro | Apple | 10 | 999.99
Galaxy S23 Ultra | Samsung | 15 | 1199.99
Code language: SQL (Structured Query Language) (sql)
It returns two rows with quantity 10 and 15.
Third, the SELECT
clause retrieves data from the name
and quantity
columns:
name | quantity
------------------+----------
iPhone 14 Pro | 10
Galaxy S23 Ultra | 15
Code language: SQL (Structured Query Language) (sql)
Comparison operators
Besides the greater than operator >, you can utilize other comparison operators inside the WHERE clause:
Operator | Meaning |
---|---|
= | Equal to |
!= (<>) | Not Equal To |
> | Greater than |
>= | Greater than or equal to |
< | Less than |
<= | Less than or equal to |
Equal operator (=)
The equal operator returns true if two values are equal.
For example, the following statement uses the equal to operator (=
) in the WHERE
clause to query the products from the inventories
with a quantity equal to 10
:
SELECT name, quantity
FROM inventories
WHERE quantity = 10;
Code language: SQL (Structured Query Language) (sql)
Output:
name | quantity
---------------+----------
iPhone 14 Pro | 10
Code language: SQL (Structured Query Language) (sql)
The query returns the iPhone 14 Pro
because only this product has a quantity of 10.
Not equal operator ( !=)
The following statement uses the not equal operator (!=
) to retrieve products from the inventories
table with the quantity not equal to 10:
SELECT name, quantity
FROM inventories
WHERE quantity != 10;
Code language: SQL (Structured Query Language) (sql)
Output:
name | quantity
------------------+----------
Galaxy S23 Ultra | 15
Pixel 7 Pro | 8
Xperia 1 IV | 7
Code language: SQL (Structured Query Language) (sql)
Note that PostgreSQL also uses <>
as the not equal to operator, so you can use the !=
and <>
operators interchangeably.
The WHERE clause and column alias
Since PostgreSQL evaluates the WHERE
clause before the SELECT
clause, the column aliases are not available in the WHERE
clause.
The following statement attempts to use the amount column alias in the WHERE
and results in an error:
SELECT
name,
quantity * price AS amount
FROM
inventories
WHERE
amount > 10000;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Error:
column "amount" does not exist
Code language: plaintext (plaintext)
The output indicates that the amount column does not exist. To fix this error, you need to use the full expression in the WHERE clause as follows:
SELECT
name,
quantity * price AS amount
FROM
inventories
WHERE
quantity * price > 10000;
Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)
Output:
name | amount
------------------+----------
Galaxy S23 Ultra | 17999.85
Code language: plaintext (plaintext)
Summary
- Use the
WHERE
clause to filter rows from a table based on a condition. - PostgreSQL evaluate the
WHERE
clause after theFROM
clause and before theSELECT
clause.