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 и их использование.