Инструкция ВЫБРАТЬ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[ДЛЯ ИЗМЕНЕНИЯ 
   таблица-для-изменения, 
      ..., 
   таблица-для-изменения]

ПЕРВЫЕ можно указывать, только если в запросе есть всего одна часть-объединения. ПЕРВЫЕ можно указывать, только если в запросе не указано ПОЛУЧИТЬ.

Если указано ключевое слово РАЗРЕШЕННЫЕ, то при попытке получить реквизиты с данными из таблиц, доступа к которым у пользователя нет, будет выдано значение Null. Так, в примере ниже доступа к таблице Поставщики у пользователя нет, а доступ к таблице Товары есть у всех, и результатом запроса будут строки из Товары:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Поставщики.Код
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Товары.Код

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

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

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

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

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

  • *

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

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

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

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

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

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

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

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

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

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

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

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