Оператор выборки данных SELECT Назад В начало Вперед

Оператор SELECT извлекает строки из одной или нескольких таблиц. Результат запроса представляет собой таблицу, столбцы которой определяются списком из <элемент-выборки>.

<оператор-direct-select> = SELECT [<select-hints>]
  [ALL | DISTINCT] [TOP <top-count>]
  <элемент-выборки> {, <элемент-выборки> }
  [ FROM <таблица-для-выборки> {, <таблица-для-выборки>} ]
  [ WHERE <search-condition> ]
  [ GROUP BY { <group-by-expression> [,...] ]
  [ HAVING <search-condition> ]
  [ UNION [ALL] ... ]
  [ ORDER BY { ( <order-by-expression> | <column-position> ) [ ASC | DESC ] } [,...] ]

<select-hints> - оптимизация доступа к данным: перечень индексов для доступа к таблицам. Перечень заключен в фигурные скобки, индексы перечисляются через запятую:

<select-hints> = {<имя-таблицы> (INDEX <имя-индекса>), ... }

ALL - включить в выборку все найденные записи, значение по умолчанию.

DISTINCT - включить в выборку только отличающиеся записи.

TOP - получить <top-count> первых записей выборки. Конструкция доступна начиная с Атлантис 5.4.15.

<top-count> - количество первых записей, возвращаемых запросом. Указанное количество должно быть не меньше 1. Ограничение результата проводится после выполнения order by.

Пример:

sql select top 2 xu$loginname from x$users;

<элемент-выборки> - поля для включения в выборку. Поля в списке разделяются запятой.

<элемент-выборки> = * | <поля-таблицы>
  | <данные-столбца> [[AS] <имя-столбца> ]

* - включить в выборку все поля.

<поля-таблицы> - включить в выборку все поля указанной таблицы:

<поля-таблицы> = <таблица>.*

<данные-столбца> - включить в выборку указанный столбец: поле таблицы или вычисляемое выражение.

<данные-столбца> = <таблица>.<поле-таблицы>
  | <вычисляемое-выражение>

<вычисляемое-выражение> - в т.ч. можно использовать арифметические операции, функции (см. "Функции прямого SQL. "), конструкция CASE (см. "Оператор CASE. ").

<таблица> - таблица, логическая таблица, синоним:

<таблица> = <table-name> | <view-name> | <table-alias>

<имя-столбца> - имя столбца в выборке. По умолчанию берется имя соответствующего поля исходной таблицы.

FROM - предложение определяет одну или несколько таблиц, из которых извлекаются данные. Таблицы перечисляются через запятую.

<таблица-для-выборки> - описание исходной таблицы для запроса.

<таблица-для-выборки> =
  (<table-name> | <view-name> | <подзапрос>) [[AS] <table-alias> ]
  | <соединение>

<подзапрос> - вложенный запрос.

<соединение> - операция соединения двух таблиц:

<соединение> = <table-source> <join-type> <table-source>
  on <search-condition>

<table-source> - соединяемые таблицы.

<join-type> - тип соединения:

<join-type> = [ CROSS | INNER | (LEFT | RIGHT | FULL)  [OUTER] ] JOIN

Некоторые запросы через синтаксис JOIN на Oracle работают некорректно. Для обхода этой проблемы есть параметр ANSIJoin, который по умолчанию равен false. При выключенном параметре запросы генерируются не через JOIN, а через = с использованием (+). Однако в этом синтаксисе Oracle не поддерживает FULL OUTER JOIN, т.е. нельзя поставить (+) с обоих сторон от =. Для таких запросов предлагается временно включать параметр ANSIJoin в true, а затем выключать его обратно (на всякий случай).

WHERE - предложение определяет критерии, которым должны удовлетворять строки, чтобы их можно было использовать для получения результата.

<search-condition> - выражение, определяющее условия включения записи в результирующую выборку. Состоит из предикатов, соединенных булевыми операторами AND и OR:

<search-condition> = [not] <predicate> {(and | or) [not] <predicate>}

<predicate> - выражение, принимающее одно из трех значений: TRUE, FALSE или UNKNOWN.

<predicate> = <expression> <comparison> <expression>
  | <string-expression> [NOT] LIKE <string-expression>
  | <expression> [NOT] BETWEEN <expression> AND <expression>
  | <expression> IS [NOT] NULL
  | <expression> [NOT] IN ( <subquery> | {<expression>}[,...] )
  | <expression> <comparison> {ALL | SOME | ANY} ( <subquery> )
  | EXISTS ( <subquery> )
  | #NULL(<имя-индекса>)

<expression>, <string-expression> - операнд предиката.

Сравнение символьных полей выполняется без учета регистра символов. Для сравнения с учетом регистра используется конструкция #noupcase. При этом в конструкцию #noupcase включаются как правое так и левое выражение операции сравнения:

#noupcase(xf$name) = #noupcase('aaa')

Если необходимо, чтобы SQL-сервер использовал индекс с обрезанным сегментом, необходимо явно написать #SUBSTRING(f, offset, length), где f - поле таблицы. Вообще-то, в дальнейшем желательно отказываться от вырезанных ключей, особенно тех, которые обрезают длину поля индекса для "оптимизации".

<comparison> - операция сравнения:

#NULL(<имя-индекса>) - использовать нулевой индекс <имя-индекса> при обработке предложения WHERE. Указывать not перед #NULL нельзя.

<comparison> = = | <> | != | > | >= | !> | < | <= | !<

GROUP BY - предложение группирует выходные данные по одинаковым значениям указанных столбцов. При использовании GROUP BY в предложении SELECT могут быть указаны только те столбцы, которые поименованы в предложении GROUP BY, и любые агрегатные функции.

HAVING - предложение определяет критерии, которым должны удовлетворять группы строк, формируемые предложением GROUP BY, чтобы их можно было поместить в выходные данные с помощью запроса.

UNION - объединяет выходные данные нескольких запросов.

ORDER BY - позволяет расположить результаты одного или нескольких запросов в определенном порядке.

Версия

Атлантис 5.4.15. Добавлена конструкция TOP <top-count>.

Атлантис 5.3.15. Для оптимизации доступа к данным можно указать перечень индексов для доступа к таблицам.