Similar presentations:
Лекция3.Запросы.Связи
1.
ЗапросыВиды соединений
2.
3.
Количество записей= Количество записей 1 таблицы * Количество записей 2таблицы
4.
5.
6.
Соединения используются, чтобы сопоставить (соединить) строки однойтаблицы строкам другой таблицы по определенному признаку.
-------------------------------------------|Люди
|
| Характеристики
|
--------------------------------------------|ИМЯ
|
| ИМЯ
ВОЗРАСТ |
--------------------------------------------|Алена
|
| Алена
21
|
|Алефтина |
| Алефтина
18
|
|Владимир |
| Павел
25
|
|Владислав |
| Петр
30
|
|
|
| Порфирий
50
|
---------------------------------------------
7.
Результат внутреннего соединения по имени:ИмяИзТаблицы1 ИмяИзТаблицы2 ВозрастИзТаблицы2
Алена
Алена
21
Алефтина
Алефтина
18
8.
Запрос = Новый Запрос("ВЫБРАТЬ
| Люди.Наименование КАК ИмяИзТаблицы1,
| Характеристики.Наименование КАК ИмяИзТаблицы2,
| Характеристики.Возраст КАК ВозрастИзТаблицы2
|ИЗ
| Справочник.Люди КАК Люди
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| Справочник.Характеристики КАК Характеристики
| ПО
| Люди.Наименование = Характеристики.Наименование"
);
9.
Получить данные по товарам из табличной части товары документаРеализацияТоваровИУслуг и клиентах по документу
РеализацияТоваровИУслуг. Эту же задачу можно выполнить с
помощью разыменования полей. Выполним с помощью
внутреннего соединения:
1. С помощью консоли запросов
2. С помощью СКД
10.
С помощью консоли запросов11.
12.
13.
14.
С помощью СКД15.
16.
17.
18.
19.
Левое соединение20.
Левое соединение - это внутреннее соединение + строки из левой таблицы,для которых не найдены соответствия.
------------|Люди
|
------------|ИМЯ
|
------------|Алена
|
|Алефтина |
|Владимир |
|Владислав |
|
|
-------------
-------------------------------| Характеристики
|
--------------------------------| ИМЯ
ВОЗРАСТ |
--------------------------------| Алена
21
|
| Алефтина
18
|
| Павел
25
|
| Петр
30
|
| Порфирий
50
|
---------------------------------
21.
Результат левого внешнего соединения по имени:ИмяИзТаблицы1 ИмяИзТаблицы2 ВозрастИзТаблицы2
Алена
Алена
21
Алефтина
Алефтина
18
Владимир
NULL
NULL
Владислав
NULL
NULL
22.
Запрос = Новый Запрос("ВЫБРАТЬ
| Люди.Наименование КАК ИмяИзТаблицы1,
| Характеристики.Наименование КАК ИмяИзТаблицы2,
| Характеристики.Возраст КАК ВозрастИзТаблицы2
|ИЗ
| Справочник.Люди КАК Люди
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.Характеристики КАК Характеристики
| ПО
| Люди.Наименование = Характеристики.Наименование"
);
23.
Функция ЕСТЬNULLВ языке запросов реализована функция ЕСТЬNULL(),
предназначение которой - заменять выражение на
другое выражение в случае, если выражения имело
значение NULL. Синтаксическая диаграмма данной функции
выглядит так:
ЕСТЬNULL(<Проверяемое выражение>, <Выражение замены>)
Данная функция вернет значение первого параметра, в случае,
если оно не является NULL, и значение второго выражения, в
противном случае.
24.
Пример:ВЫБРАТЬ
СправочникНоменклатуры.Наименование,
ЕСТЬNULL(УчетНоменклатурыОстатки.КоличествоОстаток, 0) КАК
КоличествоОстаток
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.УчетНоменклатуры.Остатки КАК
УчетНоменклатурыОстатки
ПО УчетНоменклатурыОстатки.Номенклатура =
СправочникНоменклатуры.Ссылка
ГДЕ
СправочникНоменклатуры.ЭтоГруппа = ЛОЖЬ
25.
В данном примере получаются все элементы справочниканоменклатуры, после чего, для каждой номенклатуры из регистра
накопления получаются текущие остатки. Т.к. в результате
соединения в поле УчетНоменклатурыОстатки.КоличествоОстаток"
будут значения NULL для номенклатуры, по которой не было
остатков и чтобы вместо значения NULL в результате запроса
присутствовало значение 0, мы использовали функцию ЕСТЬNULL(),
которая осуществит желаемую замену.
26.
Правое соединение27.
Правое соединение - это внутреннее соединение + строки из правойтаблицы, для которых не найдены соответствия.
------------|Люди
|
------------|ИМЯ
|
------------|Алена
|
|Алефтина |
|Владимир|
|Владислав|
|
|
-------------
-------------------------------| Характеристики
|
--------------------------------| ИМЯ
ВОЗРАСТ |
--------------------------------| Алена
21
|
| Алефтина
18
|
| Павел
25
|
| Петр
30
|
| Порфирий
50
|
---------------------------------
28.
// Результат правого внешнего соединения по имени:// ИмяИзТаблицы1 ИмяИзТаблицы2 ВозрастИзТаблицы2
// Алена
Алена
21
// Алефтина
Алефтина
18
// NULL
Павел
25
// NULL
Петр
30
// NULL
Порфирий
50
29.
Запрос = Новый Запрос("ВЫБРАТЬ
| Люди.Наименование КАК ИмяИзТаблицы1,
| Характеристики.Наименование КАК ИмяИзТаблицы2,
| Характеристики.Возраст КАК ВозрастИзТаблицы2
|ИЗ
| Справочник.Люди КАК Люди
| ПРАВОЕ СОЕДИНЕНИЕ
| Справочник.Характеристики КАК Характеристики
| ПО
| Люди.Наименование = Характеристики.Наименование"
);
30.
31.
Задание 1• Получить цены всех товаров, включая те, для которых цены не
установлены. Все товары имеются в справочнике Номенклатура,
цены товаров хранятся в регистре сведений ЦеныНоменклатуры.
• Связь должна быть установлена левое соединение по
справочнику Номенклатура.
• Если ЕстьNULL, заменить 0.
• 1. С помощью консоли запросов
• 2. С помощью отчета СКД
32.
33.
34.
35.
36.
37.
38.
39.
С помощью отчета СКД40.
41.
42.
43.
44.
45.
46.
47.
Задание 2• Найти остатки товаров на складах по всем товарам справочника
Номенклатура. Остатки не должны быть равны 0.
48.
49.
50.
51.
52.
53.
54.
55.
Задание 2Найти остатки товаров по всем товарам справочника
Номенклатура. Товары не должны быть группой и остатки не
должны быть равны 0.
56.
57.
58.
59.
60.
Сравнение с NULL - оператор ЕСТЬ NULL61.
Получить данные с остатками и ценами3 таблицы
62.
63.
64.
65.
// Полное соединение - это левое соединение + правое соединение.// ------------// |Люди
|
// ------------// |ИМЯ
|
// ------------// |Алена
|
// |Алефтина |
// |Владимир |
// |Владислав |
// |
|
// -------------
-------------------------------| Характеристики
|
--------------------------------| ИМЯ
ВОЗРАСТ |
--------------------------------| Алена
21
|
| Алефтина
18
|
| Павел
25
|
| Петр
30
|
| Порфирий 50
|
---------------------------------
66.
// Результат полного внешнего соединения по имени:// ИмяИзТаблицы1 ИмяИзТаблицы2 ВозрастИзТаблицы2
// Алена
Алена
21
// Алефтина
Алефтина
18
// Владимир
NULL
NULL
// Владислав
NULL
NULL
// NULL
Павел
25
// NULL
Петр
30
// NULL
Порфирий
50
67.
Запрос = Новый Запрос(" ВЫБРАТЬ
| Люди.Наименование КАК ИмяИзТаблицы1,
| Характеристики.Наименование КАК ИмяИзТаблицы2,
| Характеристики.Возраст КАК ВозрастИзТаблицы2
|ИЗ
| Справочник.Люди КАК Люди
| ПОЛНОЕ СОЕДИНЕНИЕ
| Справочник.Характеристики КАК Характеристики
| ПО
|Люди.Наименование = Характеристики.Наименование"
);
68.
69.
Полное соединение• Составить запрос по контрагентам и заказам – номер, дата
документа, клиент, на какую сумму, выполнить полное
соединение по контрагентам и документам заказов, без названий
групп.
70.
71.
72.
73.
74.
75.
76.
77.
Требования к объединяемым таблицам: одинаковое количествополей. Если соотв. друг другу поля в разных таблицах имеют один
и тот же тип, то результирующее поле будет также иметь этот тип.
Если же соотв. друг другу поля в разных таблицах имеют разный
тип, то результирующее поле будет иметь составной тип.
Например, объединим таблицу Вкусы и Цвета в одну.
78.
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Вкусы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Цвета"
);
79.
По умолчанию (при использовании ключевого слова ОБЪЕДИНИТЬ)все дубликаты (образованные из разных запросов) из результата
объединения удаляются. Если нужно оставить все строки используем ОБЪЕДИНИТЬ ВСЕ
Для примера объединим таблицу саму с собой так, чтобы
дубликаты, которые при этом неизбежно образуются остались в
результате.
Нет смысла применять упорядочивание к отдельным таблицам до
их объединения. Упорядочивать (группировать, подводить итоги)
имеет смысл только конечный результат объединения.
80.
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Цвета
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Цвета"
);
81.
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Номенклатура
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Цвета
|УПОРЯДОЧИТЬ ПО
| Наименование УБЫВ"
);
82.
• Получить список всех заказов и список всех продаж(документов)в хронологическом порядке: дата, клиент, сумма документа, поле
ссылка необходимо, чтобы было понятно, какой это документ
заказ или реализация.
• Количество столбцов (полей) в объединяемых таблицах должно
быть одинаковым.
83.
Заказ 1 на вкладке Объединение84.
85.
Запрос 2 на вкладке Объединение86.
87.
88.
Упорядочение89.
90.
СКД. Запрос 1 на вкладке Объединение91.
Запрос 292.
93.
94.
95.
96.
97.
98.
99.
100.
Задания к практике• 1. Получить все продажи по контрагентам с помощью
внутреннего соединения
• 1.1 Только по группе Покупатели
101.
102.
103.
104.
105.
106.
107.
108.
• 2. Получить остатки товаров по определенному складу (параметрсклад) с помощью левого соединения. Информацию выдать по
всем товарам.
109.
110.
111.
112.
113.
• 3. Получить остатки всех товаров с помощью правого соединения.В результат должны попасть все элементы справочника
Номенклатура.
• 3.1 Получить остатки и цены всех товаров.
114.
115.
116.
117.
118.
• 4. Составить запрос по контрагентам и документам продаж(номер, дата, клиент, сумма). Без названий групп контрагентов с
помощью полного соединения.
119.
120.
121.
122.
123.
124.
Оператор множественного выбора В(виртуальная таблица регистр накопления)
• Вывести информацию по продажам товаров для тех
контрагентов, которых нет в списке за определенный период
125.
126.
127.
128.
129.
130.
131.
132.
Множественный выбор из списка (виртуальнаятаблица регистра накопления)
• Вывести остатки товаров на определенную дату (параметр),
остатки необходимо получать для определенного списка
номенклатуры (параметр). У остатков получить итоги по товару.
Для измерения Товар получить сумму по итогу.