Заметки про запросы. Последовательность.
Разработка - Практика программирования
Хорошо ли мы знаем синтаксис команд языка запросов 1С ?
Попробуйте расставить порядок выполнения операций в запросе:
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ <..> <Имя таблицы>.<Имя поля>, СУММА( <..> ) ИЗ <Имя таблицы> КАК <Имя таблицы> ВНУТРЕННЕЕ СОЕДИНЕНИЕ <Имя таблицы> ПО <Условие> ГДЕ <Условие> СГРУППИРОВАТЬ ПО <Имя таблицы>.<Имя поля> ИМЕЮЩИЕ СУММА( <..> ) = 0 УПОРЯДОЧИТЬ ПО <Имя поля>
ВЫБРАТЬ 2 КАК Поле1, 4 КАК Поле2, 0 КАК Поле3 ПОМЕСТИТЬ ТабПример1 ОБЪЕДИНИТЬ ВЫБРАТЬ 3/2, 3, 0 ;
Поле1 | Поле2 | Поле3 |
2 | 4 | 0 |
3/2 | 3 | 0 |
ВЫБРАТЬ 1 КАК Поле1, 3 КАК Поле2, 0 КАК Поле3 ПОМЕСТИТЬ ТабПример2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, 3, 0 ;
Поле1 | Поле2 | Поле3 |
1 | 3 | 0 |
1 | 3 | 0 |
Соединение таблиц VS. Проверка условия ГДЕ
Комментарий. Сначала выполняется Соединение таблиц. Об этом написано в учебниках SQL. Поэтому перед соединением необходимо тщательно подготовить таблицы: убрать «ненужные» записи, подключить индексы. Контрпример на сравнение очередности "Соединение таблиц" - "Проверка условия ГДЕ" пока не придумал.
Проверка условия ГДЕ VS. Расчет агрегатных функций без группировки
ВЫБРАТЬ МАКСИМУМ(ТабПример1.Поле1) КАК Поле1, МАКСИМУМ(ТабПример1.Поле2) КАК Поле2 ИЗ ТабПример1 КАК ТабПример1 ГДЕ ТабПример1.Поле2 = 3
Результат: Поле1 = 1.5, Поле2 = 3.
Комментарий. Сначала выполняется Проверка "ГДЕ". Иначе был бы пустой результат.
Расчет агрегатных функций без группировки VS. Опции ПЕРВЫЕ <ХХ>– Упорядочить По.
ВЫБРАТЬ ПЕРВЫЕ 1 СУММА(ТабПример1.Поле1) КАК Поле1, СУММА(ТабПример1.Поле2) КАК Поле2 ИЗ ТабПример1 КАК ТабПример1 УПОРЯДОЧИТЬ ПО Поле1
Результат: Поле1 = 3.5, Поле2 = 7.
Комментарий. Сначала выполняется расчет агрегатных функций без группировки, затем команды ПЕРВЫЕ <ХХ>– Упорядочить По.
Группировка с расчетом агрегатных функций VS. опции ПЕРВЫЕ <ХХ>– Упорядочить По
ВЫБРАТЬ ПЕРВЫЕ 1 СУММА(ТабПример1.Поле1) КАК Поле1, СУММА(ТабПример1.Поле2) КАК Поле2, ТабПример1.Поле3 ИЗ ТабПример1 КАК ТабПример1 СГРУППИРОВАТЬ ПО ТабПример1.Поле3 УПОРЯДОЧИТЬ ПО Поле2
Результат: Поле1 = 3.5, Поле2 = 7, Поле3 = 0.
Комментарий. Сначала выполняется группировка с расчетом агрегатных функции, затем команды ПЕРВЫЕ <ХХ>– Упорядочить По. Сразу после расчета агрегатных функций проверяется условие «Имеющие». Контрпример на сравнение очередности "Имеющие"-"Различные" пока не придумал.
Группировка с расчетом агрегатных функций VS. опция Различные
ВЫБРАТЬ РАЗЛИЧНЫЕ ТабПример2.Поле3, СУММА(ТабПример2.Поле1) КАК Поле1, СУММА(ТабПример2.Поле2) КАК Поле2 ИЗ ТабПример2 КАК ТабПример2 СГРУППИРОВАТЬ ПО ТабПример2.Поле3
Результат: Поле1 = 2, Поле2 = 6.
Комментарий. Сначала выполняется Группировка с расчетом агрегатных функций. Конечно, применение в одном запросе этих операций бессмысленно.
опция Различные VS. опции ПЕРВЫЕ <ХХ>– Упорядочить По
ВЫБРАТЬ ТабПример2.Поле1, ТабПример2.Поле2, ТабПример2.Поле3 ПОМЕСТИТЬ ТабПример3 ИЗ ТабПример2 КАК ТабПример2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТабПример1.Поле1, ТабПример1.Поле2, ТабПример1.Поле3 ИЗ ТабПример1 КАК ТабПример1 ; ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 3 ТабПример3.Поле1, ТабПример3.Поле2, ТабПример3.Поле3 ИЗ ТабПример3 КАК ТабПример3 УПОРЯДОЧИТЬ ПО Поле1
Комментарий. Сначала выполняется Опция "Различные", затем опции Первые <ХХ> -Упорядочить По. Если был бы другой порядок выполнения, то в результате получилось бы не три строки, а две.
Смотрите следующий запрос:
ВЫБРАТЬ ПЕРВЫЕ 3 ТабПример3.Поле1, ТабПример3.Поле2, ТабПример3.Поле3 ИЗ ТабПример3 КАК ТабПример3 УПОРЯДОЧИТЬ ПО ТабПример3.Поле1
Упорядочить По VS. ПЕРВЫЕ <ХХ>
ВЫБРАТЬ ПЕРВЫЕ 1 ТабПример1.Поле1 КАК Поле1, ТабПример1.Поле2 КАК Поле2 ИЗ ТабПример1 КАК ТабПример1 УПОРЯДОЧИТЬ ПО Поле1
Результат: Поле1 = 1,5, Поле2 = 3.
Комментарий. Сначала выполняется Упорядочить По. Смотрите следующий запрос.
ВЫБРАТЬ ПЕРВЫЕ 1 ТабПример1.Поле1 КАК Поле1, ТабПример1.Поле2 КАК Поле2 ИЗ ТабПример1 КАК ТабПример1
Результат: Поле1 = 2, Поле2 = 4.
Вывод: операции SQL выполняются в последовательности
- Соединение
- Проверка условия "ГДЕ"
- Группировка с расчетом агрегатных функций
- Проверка условия «Имеющие»
- Опция Различные
- Опция Упорядочить по
- Опция Первые <ХХ>
Послесловие
Пока я писал статью, узнал, что упорядочивание может происходить по агрегатным функциям, что вычисление агрегатных функций без группировки существенно отличается от группировки с вычислением агрегатных функций. Спасибо всем, кто проявил интерес к теме, давал конструктивные комментарии. Мне подсказали, что аналогичная информация по SQL содержится
https://msdn.microsoft.com/ru-ru/library/ms189499%28v=sql.120%29.aspx
https://msdn.microsoft.com/en-us/library/ms189499.aspx
Порядок для SQL в общем, совпадает с 1С, хотя слова другие :-))
- FROM
-
ON
-
JOIN
-
WHERE
-
GROUP BY
-
WITH CUBE или WITH ROLLUP
-
HAVING
-
SELECT
-
DISTINCT
-
ORDER BY
-
TOP
Специальные предложения
См. также
Полезные процедуры и функции для программиста 140
07.10.2019 8950 HostHost 23
Таблица значений. Нюансы 191
01.10.2019 8465 Yashazz 35
[Шпаргалка] Программное создание элементов формы 283
06.09.2019 9741 rpgshnik 41
Агрегатные функции СКД, о которых мало кто знает 342
05.09.2019 13018 ids79 44
Отслеживание выполнения фонового задания 141
17.08.2019 10428 ids79 16
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 253
08.08.2019 14082 ids79 30
СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 131
26.07.2019 12675 ids79 6
Обработчики событий при записи объектов. Зачем и что за чем? 202
25.07.2019 12802 4 AlbinaAAA 23
Управление качеством кода 136
22.07.2019 8233 Stepa86 29
СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 146
17.07.2019 11177 ids79 27
Регистры сведений. За кулисами 129
09.07.2019 8720 YPermitin 12
"Меньше копипаста!", или как Вася универсальную процедуру писал 183
04.07.2019 7881 SeiOkami 49
Создание отчетов с помощью СКД - основные понятия и элементы 208
25.06.2019 20982 ids79 17
Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 179
11.06.2019 12710 dmurk 134
Регистры накопления. Структура хранения в базе данных 176
16.05.2019 18958 YPermitin 27
Выполнение внешней обработки в фоновом задании 149
11.05.2019 11247 Eret1k 23
Выгрузка документа по условию 5
25.04.2019 6020 m-rv 2
Как прикрутить ГУИД к регистру сведений 23
16.04.2019 8651 m-rv 16
О расширениях замолвите слово... 193
07.04.2019 17837 ellavs 122
Git-репозитории для 1С-кода (опыт использования при небольших проектах) 202
28.03.2019 13917 ellavs 83
Трюки с внешними источниками данных 166
14.03.2019 14214 YPermitin 52
Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 166
03.02.2019 17313 ids79 9
Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария 222
09.01.2019 27568 Vladimir Litvinenko 69
EnterpriseData – часть 2. Процесс выгрузки данных 127
26.12.2018 13766 ids79 27
Новый подход к обмену данными EnterpriseData 207
14.12.2018 23135 ids79 72
Программное заполнение пользовательских параметров и отборов СКД 136
13.11.2018 22144 Unk92 19
Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127
10.11.2018 22248 ids79 40
Вспомогательные инструкции в коде 1С 105
15.10.2018 21512 tormozit 100
Произвольный код в фоновом режиме 165
03.09.2018 15718 nikita0832 42
Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 147
23.08.2018 22869 Rain88 42
Тестер: частые вопросы 156
25.07.2018 20949 grumagargler 24
Повышаем эффективность разработки правил обмена 124
25.06.2018 20206 olegtymko 47
Введение в механизм представлений в ЗУП ред. 3 156
04.06.2018 25594 xrrg 82
Как сделать запрос на изменение данных 75
01.06.2018 22124 m-rv 21
Строим графы средствами 1С (без GraphViz) 43
23.05.2018 17912 slozhenikin_com 19
Распределение расходов пропорционально продажам 9
13.05.2018 12021 Rustig 9
Неоптимальная работа запроса 130
27.04.2018 17381 vasilev2015 32
Просмотр временных таблиц запроса в отладчике без изменения кода 129
24.04.2018 26490 [email protected] 19
[ВсеПросто] "Оперативный" информатор из 1С за 5 мин. 198
22.02.2018 21418 DarkAn 25
Минимализмы 3 355
19.02.2018 37094 ildarovich 44
Этюды по программированию. Взаимодействие с Microsoft Word 109
11.12.2017 26535 milkers 23
Метод формирования движений в типовых регистрах нетиповыми регистраторами 31
05.12.2017 21967 itriot11 34
1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 737
19.11.2017 142790 MaxS 251
Заполнение данных по ИНН контрагента с помощью альтернативного сервиса огрн.онлайн 131
01.11.2017 23697 slava_1c 49
Программные перечисления, ч.2: приемы кэширования при разработке 67
30.10.2017 22017 unichkin 18
Разбираемся с настройками компоновки данных 161
29.10.2017 25099 json 9
Работа с Excel 298
23.10.2017 27096 arakelyan 39
Добавление команд печати в конфигурациях на БСП 2.4.3 (в частности, в самописных документах в Бухгалтерии 3.0 после релиза 3.0.52.35) 144
18.09.2017 48865 bugtester 43