Инструкция ВЫБРАТЬ
Инструкция ВЫБРАТЬ возвращает строки из базы данных и позволяет делать выборку одной или нескольких строк или столбцов из одной или нескольких таблиц. Например:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.ФИО КАК ФИО
ИЗ
Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Возраст < 40
УПОРЯДОЧИТЬ ПО
Сотрудники.ФИО
Инструкция ВЫБРАТЬ всегда содержит как минимум одну часть объединения и может содержать следующие предложения:
часть-объединения
ОБЪЕДИНИТЬ [ВСЕ | РАЗЛИЧНЫЕ]
...
часть-объединения
[УПОРЯДОЧИТЬ ПО
элемент-упорядочивания,
...,
элемент-упорядочивания]
[ПОЛУЧИТЬ количество-получаемых-записей]
[СО СМЕЩЕНИЕМ количество-пропускаемых-записей]
[ИНДЕКСИРОВАТЬ ПО
элемент-индексирования,
...,
элемент-индексирования]
часть-объединения обязательно содержит предложение ВЫБРАТЬ и кроме этого может содержать следующие предложения:
ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [ПОЛНОСТЬЮ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ количество-выбираемых-записей]
элемент-списка-выборки>,
...,
элемент-списка-выборки
[ПОМЕСТИТЬ
имя-временной-таблицы]
[ПОРОДИТЬ
имя-типа-структуры]
[ЗАПОЛНИТЬ
имя-типа]
[ИЗ
элемент-списка-из,
...,
элемент-списка-из]
[ГДЕ
условие-выборки-записей]
[СГРУППИРОВАТЬ ПО
элемент-группировки,
...,
элемент-группировки]
[ИМЕЮЩИЕ
условие-группировки-записей]
[ДЛЯ ИЗМЕНЕНИЯ
таблица-для-изменения,
...,
таблица-для-изменения]
ПЕРВЫЕ можно указывать, только если в запросе есть всего одна часть-объединения. ПЕРВЫЕ можно указывать, только если в запросе не указано ПОЛУЧИТЬ.
Если указано ключевое слово РАЗРЕШЕННЫЕ, то при попытке получить реквизиты с данными из таблиц, доступа к которым у пользователя нет, будет выдано значение Null. Так, в примере ниже доступа к таблице Поставщики у пользователя нет, а доступ к таблице Товары есть у всех, и результатом запроса будут строки из Товары:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Поставщики.Код
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Товары.Код
Если указано ключевое слово ПОЛНОСТЬЮ, то при попытке получить реквизиты с данными из таблиц, доступа к которым у пользователя нет, будет выдано исключение «Недостаточно прав для чтения реквизита». Так, в примере ниже доступа к таблице Поставщики у пользователя нет, и результатом запроса будет ошибка:
ВЫБРАТЬ ПОЛНОСТЬЮ
Поставщики.Код
Элемент списка выборки
ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [ПОЛНОСТЬЮ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ количество-выбираемых-записей]
элемент-списка-выборки,
...,
элемент-списка-выборки
В качестве элемент-списка-выборки можно использовать:
*
Символ * (звездочка) — выбрать все поля. Можно использовать только если в часть-объединения есть только одна таблица запроса (элемент в предложении ИЗ).
Выбрать все поля указанной таблицы запроса.
выражение [ [КАК] псевдоним-поля]
Выбрать значение указанного выражения. псевдоним-поля можно не указывать, тогда он будет сгенерирован автоматически. Псевдонимы не должны повторяться в пределах одной части объединения. В запросе с несколькими частями объединения нет смысла указывать псевдоним в частях объединения кроме первой — он всегда будет использоваться от первой части объединения.
Не рекомендуется использовать * и выражения без псевдонимов — это приводит к хрупкости кода. Основное назначение этих возможностей — упрощение написания запросов при расследовании проблем и т. п.
Если псевдоним-поля не указан, то он будет сгенерирован автоматически:
- для выражений, которые содержат только одно поля — имя этого поля в текущем варианте встроенного языка;
- для остальных выражений — «Поле».
Если автоматический псевдоним уже занят, то к нему будет добавляться число (начиная с 2), пока не получится свободный.
Если в часть-объединения есть агрегатные функции, или элементы группировки, или условия группировки, то запрос считается с группировкой.
На такие запросы накладывается дополнительное требование — в списке выборки могут присутствовать только:
- агрегатные функции;
- константы;
- выражения, присутствующие в списке группировки;
- сложные выражения, в которых можно использовать все вышеперечисленное.