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;