FirebirdSQL logo

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

FIRST, SKIP

Назначение

Получение части строк из упорядоченного набора.

Синтаксис
SELECT [FIRST <limit-expression>] [SKIP <limit-expression>]
FROM ...
...

<limit-expression> ::=
    <integer-literal>
  | <query-parameter>
  | (<integer-expression>)
Table 1. Параметры предложений FIRST и SKIP
Параметр Описание

integer-literal

Целочисленный литерал.

query-parameter

Параметр запроса.? — в DSQL и :paramname — в PSQL.

integer-expression

Выражение, возвращающее целочисленное значение.

Important

FIRST и SKIP используются только в Firebird, они не включены в стандарт SQL.Рекомендуется использовать [fblangref-dml-select-fetch-offset] везде, где это возможно.

Выражение FIRST m ограничивает результирующий набор данным указанным числом записей m.

Выражение SKIP n пропускает указанное число записей n перед выдачей результирующего набора данных.

FIRST и SKIP являются необязательными выражениями.

Когда эти выражения используются совместно, например “FIRST m SKIP n”, то в результате n записей будет пропущено и, из оставшихся, m записей будет возвращено в результирующем наборе данных.