SELECT
Выборка данных
DSQL, ESQL, PSQL
[WITH [RECURSIVE] <cte> [, <cte> ...]] SELECT [FIRST <limit-expression>] [SKIP <limit-expression>] [DISTINCT | ALL] <select-list> FROM <table-reference> [, <table-reference> ...] [WHERE <search-condition>] [GROUP BY <value-expression> [, <value-expression> ...]] [HAVING <aggregate-condition>] [WINDOW <window-definition> [, <window-definition> ...]] [PLAN <plan-expression>] [UNION [DISTINCT | ALL] <query-term>] [ORDER BY <sort-specification> [, <sort-specification> ...]] [ { ROWS <value-expression> [TO <value-expression>] } | { [OFFSET <offset-fetch-expression> {ROW | ROWS}] [FETCH {FIRST | NEXT} [<offset-fetch-expression>] {ROW | ROWS} ONLY] } ] [FOR UPDATE [OF <column-name-list>]] [WITH LOCK [SKIP LOCKED]] [OPTIMIZE FOR {FIRST | ALL} ROWS] [INTO <variable-list>] <variable-list> ::= varname varname ...]
Описание
Оператор (команда) SELECT
извлекает данные из базы данных и передаёт их в приложение или в вызывающую SQL команду.Данные возвращаются в виде набора строк (которых может быть 0 или больше), каждая строка содержит один или более столбцов, или полей.Совокупность возвращаемых строк является результирующим набором данных команды.
Следующие части команды SELECT
являются обязательными:
-
Ключевое слово
SELECT
, за которым следует список полей. Эта часть определяет, что запрашивается из базы данных; -
Ключевое слово
FROM
, за которым следует объект выборки (например, таблица). Эта часть сообщает серверу, где следует искать запрашиваемые данные.
В простейшей форме SELECT
извлекает ряд полей из единственной таблицы, например:
SELECT id, name, address
FROM contacts
Или, для того чтобы извлечь все поля таблицы:
SELECT * FROM contacts
На практике команда SELECT
обычно выполняется с выражением WHERE
, которое ограничивает возвращаемый набор данных.Также, полученный набор данных обычно сортируется с помощью выражения ORDER BY
, дополнительно ограничивается (с целью организации постраничного просмотра данных) выражениями FIRST … SKIP
, OFFSET … FETCH
или ROWS
.
Список полей может содержать различные типы выражений вместо имён полей, а источник необязательно должен быть таблицей или представлением, он так же может быть производной таблицей (derived table), общим табличным выражением (CTE) или селективной хранимой процедурой.
Несколько источников данных могут быть соединены с помощью выражения JOIN
, и несколько результирующих наборов данных могут быть скомбинированы с использованием выражения UNION
.
В следующих секциях мы подробно рассмотрим все выражения для команды SELECT
и их использование.