Перейти к основному содержимому

Оператор ВЫБРАТЬ

Оператор ВЫБРАТЬ возвращает строки из базы данных и позволяет делать выборку одной или нескольких строк или столбцов из одной или нескольких таблиц. Например:

ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.ФИО КАК ФИО
ИЗ
Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Возраст < 40
УПОРЯДОЧИТЬ ПО
Сотрудники.ФИО

Предложения внутри оператора ВЫБРАТЬ

Оператор ВЫБРАТЬ всегда содержит как минимум одну часть объединения и может содержать следующие предложения:

часть-объединения
ОБЪЕДИНИТЬ [ВСЕ | РАЗЛИЧНЫЕ]
...
часть-объединения

[УПОРЯДОЧИТЬ ПО
элемент-упорядочивания,
...,
элемент-упорядочивания]

[ПОЛУЧИТЬ количество-получаемых-записей]

[СО СМЕЩЕНИЕМ количество-пропускаемых-записей]

[ИНДЕКСИРОВАТЬ ПО
элемент-индексирования,
...,
элемент-индексирования

ДОПОЛНИТЕЛЬНО ПО
дополнительное-поле,
...,
дополнительное-поле]

ИНДЕКСИРОВАТЬ ПО

ИНДЕКСИРОВАТЬ ПО используется только в запросах при создании временных таблиц.

часть-объединения

часть-объединения обязательно содержит предложение ВЫБРАТЬ и кроме этого может содержать следующие предложения:

ВЫБРАТЬ [РАЗРЕШЕННЫЕ | ПОЛНОСТЬЮ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ количество-выбираемых-записей]
элемент-списка-выборки,
...,
элемент-списка-выборки

[ПОМЕСТИТЬ | ПОРОДИТЬ | ЗАПОЛНИТЬ
имя-конструкции]

[ИЗ
элемент-списка-из,
...,
элемент-списка-из]

[ГДЕ
условие-выборки-записей]

[СГРУППИРОВАТЬ ПО
элемент-группировки,
...,
элемент-группировки]

[ИМЕЮЩИЕ
условие-группировки-записей]

РАЗРЕШЕННЫЕ

С помощью ключевого слова РАЗРЕШЕННЫЕ вы можете выбрать только те записи, на которые у текущего пользователя есть права.

При использовании ключевого слова РАЗРЕШЕННЫЕ следует учитывать следующее:

  • его использование оказывает влияние на работу только в том случае, если на таблицы наложены ограничения доступа к данным;
  • права доступа на саму таблицу не учитываются. Например, если на таблицу отсутствует право ЧТЕНИЕ, то запрос с использованием такой таблицы будет выполнен с ошибкой вне зависимости от использования в запросе ключевого слова РАЗРЕШЕННЫЕ.

ПОЛНОСТЬЮ

Если указано ключевое слово ПОЛНОСТЬЮ, то при попытке получить поля с данными из таблиц, доступа к которым у пользователя нет, будет выдано исключение. Так, в примере ниже доступа к некоторым записям таблицы Поставщики у пользователя нет, и результатом запроса будет ошибка «Недостаточно прав для выполнения операции "ЧТЕНИЕ" со строкой таблицы "Поставщики"»:

ВЫБРАТЬ ПОЛНОСТЬЮ
Поставщики.Код

РАЗЛИЧНЫЕ

С помощью ключевого слова РАЗЛИЧНЫЕ вы можете указать, что в результат не должны попадать повторяющиеся строки.

ПЕРВЫЕ

Конструкция ПЕРВЫЕ количество-выбираемых-записей позволяет задать предельное количество строк в результате запроса. Будут отобраны самые первые строки в соответствии с правилами упорядочивания результатов запроса.

ПЕРВЫЕ можно указывать только в следующих случаях:

  • если в запросе есть всего одна часть-объединения;
  • если в запросе не указано ПОЛУЧИТЬ.

ПОМЕСТИТЬ, ПОРОДИТЬ, ЗАПОЛНИТЬ

Предложения ПОМЕСТИТЬ, ПОРОДИТЬ и ЗАПОЛНИТЬ являются взаимоисключающими: можно использовать только одно из них или ни одного:

ПОМЕСТИТЬ
имя-временной-таблицы

// или

ПОРОДИТЬ
имя-типа-структуры

// или

ЗАПОЛНИТЬ
имя-типа

ИЗ

В предложении ИЗ указываются таблицы, содержимое которых обрабатывается в запросе.

ГДЕ

Предложение ГДЕ позволяет отфильтровать результат запроса. В результат попадают только те записи, для которых указанное условие оказывается истинным.

СГРУППИРОВАТЬ ПО

С помощью предложения СГРУППИРОВАТЬ ПО вы можете описать порядок группировки результатов запроса.

ИМЕЮЩИЕ

Предложение ИМЕЮЩИЕ позволяет накладывать условия на результаты группировки.

Элемент списка выборки

ВЫБРАТЬ [РАЗРЕШЕННЫЕ | ПОЛНОСТЬЮ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ количество-выбираемых-записей]
элемент-списка-выборки,
...
элемент-списка-выборки

РАЗРЕШЕННЫЕ — опция по умолчанию.

В качестве элемент-списка-выборки можно использовать:

  • *

    Символ * (звездочка) — выбрать все поля. Можно использовать, если в предложении ИЗ указана только одна таблица запроса.

  • псевдоним-таблицы.*

    Выбрать все поля указанной таблицы запроса.

  • выражение [ [КАК] псевдоним-поля]

    Выбрать значение указанного выражения.

    важно

    Не рекомендуется опускать ключевое слово КАК — это снизит читаемость запроса.

    Псевдонимы не должны повторяться в пределах одной части объединения. В запросе с несколькими частями объединения всегда используется псевдоним первой части объединения, поэтому нет смысла указывать его в других частях.

Не рекомендуется использовать * и выражения без псевдонимов — это приводит к хрупкости кода. Основное назначение этих возможностей — упрощение написания запросов при расследовании проблем и т. п.

Если псевдоним-поля не указан, то он будет сгенерирован автоматически:

  • для выражений, которые содержат только одно поле — имя этого поля в текущем варианте встроенного языка;
  • для остальных выражений — «Поле».

Если автоматический псевдоним уже занят, то генерируется новый путем добавления к нему числа (начиная с 2), пока не будет получен свободный.

дополнительно

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

Если в часть-объединения есть агрегатные функции, элементы группировки или условия группировки, то запрос считается запросом с группировкой.

На такие запросы накладывается дополнительное требование — в списке выборки могут присутствовать только:

  • агрегатные функции;
  • константы;
  • выражения, присутствующие в списке группировки;
  • сложные выражения, в которых можно использовать все вышеперечисленное.