Перейти к содержимому

SELECT

SELECT формирует набор строк из выражений, отношений и поддерживаемых производных запросов.

[WITH cte AS (query) [, ...]]
SELECT [DISTINCT] expression [[AS] alias] [, ...]
[FROM source [join_clause ...]]
[WHERE condition]
[GROUP BY expression [, ...]]
[HAVING condition]
[UNION ALL query]
[ORDER BY expression [ASC | DESC] [NULLS FIRST | NULLS LAST] [, ...]]
[LIMIT count] [OFFSET count]

Источниками могут быть таблицы, нерекурсивные CTE, поддерживаемые рекурсивные CTE, подзапросы и соединения. Доступны INNER, LEFT, RIGHT, FULL и CROSS JOIN. Оконные функции выполняются после группировки, но до итоговой сортировки и LIMIT.

expression задаёт результирующий столбец. condition оставляет строки, для которых выражение истинно. GROUP BY формирует группы, HAVING фильтрует их. LIMIT и OFFSET принимают неотрицательные целые выражения. Навигационные пути проходят по объявленным одноколоночным внешним ключам только в контекстах чтения SELECT.

Команда возвращает именованные столбцы и ноль или более строк. Порядок стабилен, только если ORDER BY определяет его полностью. Расположение NULL можно указать явно.

При READ COMMITTED SELECT читает снимок текущего оператора, при SNAPSHOT - фиксированный снимок транзакции; собственные изменения транзакции видны всегда.

Рекурсивные CTE требуют UNION ALL; LATERAL, QUALIFY и скрытый входной столбец в квалифицированном ORDER BY после агрегации отклоняются. NATURAL JOIN поддержан, но изменение схемы может изменить его условие. Пределы навигации: глубина 8, путь 256 и рёбра 512; обратные и составные пути отклоняются.

Обычной сессии нужны CONNECT к базе, USAGE схемы и SELECT для каждой исходной таблицы. SELECT только на столбцы применим к однозначной проекции одной таблицы; для соединений и подзапросов нужен SELECT уровня таблицы.

CREATE TABLE ref_select (id INTEGER PRIMARY KEY, score INTEGER NOT NULL);
INSERT INTO ref_select VALUES (1, 40), (2, 90), (3, 70);
SELECT id, score FROM ref_select WHERE score >= 70 ORDER BY score DESC;

См. Запросы, Навигационные ссылки и матрицу покрытия SQL.