- •8.1. Назначение. Основные объекты , предназначенные для организации запросов
- •Выполнение запроса
- •8.2. Язык запросов
- •Поля из вложенных таблиц
- •Псевдонимы источников как/as
- •Запросы к табличным частям
- •Вложенные запросы в списке источников
- •Конструкция соединение...По/join...On
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Логические операторы и, или, не
- •Параметры в языке запросов
- •Проверка вхождения значения в список (в/in)
- •Проверка ссылочного значения (ссылка/ref)
- •Проверка пустых значений (есть null / is null)
- •Сравнение строк (подобно / like)
- •Упорядочивание по иерархии
- •Упорядочивание во вложенных таблицах
- •Автоупорядочивание /autoorder
- •Агрегатные функции в запросе
- •Общие итоги
- •Итоги по группировкам
- •Итоги по иерархии
- •Несколько итогов в запросе
- •Встроенные функции языка запросов
- •Операции выбора в языке запросов (выбор / case)
- •Приведение типов в языке запросов
- •Литералы и параметры в языке запросов
- •8.4. Обработка результата запроса
- •8.5. Выборка из результата запроса
- •Линейный обход
- •Иерархический обход
- •Обход по группировкам
- •Другие полезные методы
- •8.6. Выгрузка результата запроса
- •8.7. Запросы к регистрам сведений
- •Основная таблица регистра сведений
- •8.8. Запросы к регистрам накопления
- •Основная таблица регистра накопления
- •Сводные таблицы
Правое внешнее соединение
Конструкция ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить еще и записи из второго источника (указанного справа от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из первого источника.
Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать значение NULL в полях, формируемых на основании записей из этого источника.
Правое внешнее соединение полностью аналогично левому, за исключением того, что таблицы поменялись местами. Например, представленный ниже запрос эквивалентен предыдущему, но вместо левого, используется правое внешнее соединение:
ВЫБРАТЬ Спр.Наименование, Peг.Курс
ИЗ РегистрСведений.КурсыВалют.СрезПоследних КАК Peг
ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр
ПО Спр.Ссылка = Peг.Валюта
Полное внешнее соединение
Конструкция ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обоих источников, для которых не найдено соответствий.
Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого-либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.
Предложение ГДЕ / WHERE
Предложение ГДЕ позволяет задать условие отбора данных из исходных таблиц-источников запроса. В запросе будут выбраны только те записи, для которых выполняется заданное условие.
Например, выберем товары с ценой, большей или равной определенному значению:
ВЫБРАТЬ Наименование, ЗакупочнаяЦена КАК Цена
ИЗ Справочник.Номенклатура
ГДЕ ЗакупочнаяЦена >= 1300
Результат запроса будет следующий:
Наименование |
Цена |
Монитор LCD 22" M8537ZM/A |
1 540 |
Ноутбук Rover Computers Explorer |
1 326 |
Сист. блок Hewlett-Packard Brio BA410 |
1 633 |
Сист. блок Hewlett-Packard Vectra VL420 |
1 699 |
Логические операторы и, или, не
В условиях можно использовать логические операторы И, ИЛИ, НЕ, с помощью которых можно строить достаточно сложные логические выражения.
Например, выберем товары, произведенные в России по цене, меньшей определенного значения:
ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ СтранаПроисхождения = "Россия" И ЗакупочнаяЦена < 1000
Наименование |
Цена |
Страна |
1C: Бухгалтерия 7.7 |
35 |
Россия |
1C: Аспект 7.7 |
45 |
Россия |
1С:Торговля и Склад 7.7 |
140 |
Россия |
1C: Бухгалтерия 7.7 |
35 |
Россия |
При указании нескольких логических сомножителей И, ИЛИ, НЕ целесообразно расставлять скобки, чтобы правильно определить порядок выполнения логических операций и повысить наглядность запроса.
Например, следующие два запроса могут привести к неожиданным для программиста результатам, потому что оператор И имеет больший приоритет, чем ИЛИ (а оператор НЕ имеет еще больший приоритет, чем И):
ВЫБРАТЬ Наименование,
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США" И ЗакупочнаяЦена < 1000
В результате мы получим следующие записи:
Наименование |
Цена |
Страна |
Клавиатура Apple Pro Keyboards |
50 |
США |
Лазерный принтер Minolta-QMS |
361 |
США |
Лазерный принтер HP LaserJet 2200 |
720 |
США |
Монитор 19" Hitachi CM715ET |
300 |
Россия |
Ноутбук Rover Computers Explorer |
1326 |
Россия |
Этот запрос будет интерпретирован системой как «Выбрать все товары из страны Россия, независимо от цены, а также товары из страны США, которые дешевле 1000». Т.е. условие по цене будет проверяться только для товаров из США, а товары из России будут включены в запрос при любой цене.
Вероятно, программист имел в виду совсем другое: «Выбрать товары из России и США, которые дешевле 1000», что реализовано вторым запросом. Условие по цене будет проверяться для всех товаров, независимо от страны-производителя:
ВЫБРАТЬ Наименование, ;
ЗакупочнаяЦена КАК Цена,
СтранаПроисхождения КАК Страна
ИЗ Справочник.Номенклатура
ГДЕ (СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США") И ЗакупочнаяЦена < 1000
Наименование |
Цена |
Страна |
|
Клавиатура Apple Pro Keyboards |
50 |
США |
|
Лазерный принтер Minolta- QMS |
361 |
США |
|
Лазерный принтер HP LaserJet 2200 |
720 |
США |
|
Монитор 19" Hitachi CM715ET |
300 |
Россия |
|
