SELECT Statement
This PostgreSQL tutorial explains how to use the PostgreSQL SELECT statement with syntax and examples.
Description
The PostgreSQL SELECT statement is used to retrieve records from one or more tables in PostgreSQL.
Syntax
In its simplest form, the syntax for the SELECT statement in PostgreSQL is:
SELECT expressions
FROM tables
[WHERE conditions];
However, the full syntax for the PostgreSQL SELECT statement is:
SELECT [ ALL | DISTINCT | DISTINCT ON (distinct_expressions) ]
expressions
FROM tables
[WHERE conditions]
[GROUP BY expressions]
[HAVING condition]
[ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS FIRST | NULLS LAST ]]
[LIMIT [ number_rows | ALL]
[OFFSET offset_value [ ROW | ROWS ]]
[FETCH { FIRST | NEXT } [ fetch_rows ] { ROW | ROWS } ONLY]
[FOR { UPDATE | SHARE } OF table [ NOWAIT ]];
Parameters or Arguments
ALL
Optional. Returns all matching rows.
DISTINCT
Optional. Removes duplicates from the result set. Learn more about DISTINCT clause
DISTINCT ON
Optional. Removes duplicates based on the distinct_expressions. Learn more about the DISTINCT ON clause.
expressions
The columns or calculations that you wish to retrieve.
tables
The tables that you wish to retrieve records from. There must be at least one table listed in the FROM clause.
WHERE conditions
Optional. The conditions that must be met for the records to be selected.
GROUP BY expressions
Optional. It collects data across multiple records and groups the results by one or more columns.
HAVING condtion
Optional. It is used in combination with the GROUP BY to restrict the groups of returned rows to only those whose the condition is TRUE.
ORDER BY expression
Optional. It is used to sort the records in your result set.
LIMIT
Optional. If LIMIT is provided, it controls the maximum number of records to retrieve. At most, the number of records specified by number_rows will be returned in the result set. The first row returned by LIMIT will be determined by offset_value.
FETCH
Optional. If FETCH is provided, it controls the maximum number of records to retrieve. At most, the number of records specified by fetch_rows will be returned in the result set. The first row returned by FETCH will be determined by offset_value.
FOR UPDATE
Optional. Records affected by the query are write-locked until the transaction has completed
FOR SHARE
Optional. Records affected by the query can be used by other transactions but can not be updated or deleted by those other transactions
Example - Select all fields from one table
Let's look at how to use a PostgreSQL SELECT query to select all fields from a table.
SELECT *
FROM categories
WHERE category_id >= 2500
ORDER BY category_id ASC;
In this PostgreSQL SELECT statement example, we've used * to signify that we wish to select all fields from the categories table where the category_id is greater than or equal to 2500. The result set is sorted by category_id in ascending order.
Example - Select individual fields from one table
You can also use the PostgreSQL SELECT statement to select individual fields from the table, as opposed to all fields from the table.
For example:
SELECT category_id, category_name, comments
FROM categories
WHERE category_name = 'Hardware'
ORDER BY category_name ASC, comments DESC;
This PostgreSQL SELECT example would return only the category_id, category_name, and comments fields from the categories table where the category_name is 'Hardware'. The results are sorted by category_name in ascending order and then comments in descending order.
Example - Select fields from multiple tables
You can also use the PostgreSQL SELECT statement to retrieve fields from multiple tables.
SELECT products.product_name, categories.category_name
FROM categories
INNER JOIN products
ON categories.category_id = products.category_id
ORDER BY product_name;
This PostgreSQL SELECT example joins two tables together to gives us a result set that displays the product_name and category_name fields where the category_id value matches in both the categories and products table. The results are sorted by product_name in ascending order.