Опубликован: 21.09.2010 | Доступ: свободный | Студентов: 6882 / 2129 | Оценка: 4.62 / 4.38 | Длительность: 06:15:00
Специальности: Бухгалтер
Лекция 7:

Запросы, обработки

Левое внешнее соединение

При левом соединении таблиц Номенклатура и ЕдиницыИзмерения в выборку попадут все записи из справочника Номенклатура и только те записи из справочника ЕдиницыИзмерения, которые соответствуют условиям соединения. Если записи из справочника Номенклатура не соответствует ни одна запись из справочника ЕдиницыИзмерения, поле окажется пустым - в него будет записано значение Null.

Воспользуемся Конструктором запроса для того, чтобы построить запрос по двум таблицам. На рис. 7.21 вы можете видеть вкладку конструктора Таблицы и поля.

Конструктор запроса, вкладка Таблицы и поля

увеличить изображение
Рис. 7.21. Конструктор запроса, вкладка Таблицы и поля

В область Таблицы добавлены таблицы справочников Номенклатура и ЕдиницыИзмерения, в область Поля добавлены поля Номенклатура.Наименование и ЕдиницыИзмерения.Наименование.

Если на вкладке Таблицы и поля задается выборка более чем из одной таблицы, в окне появляется дополнительная вкладка - Связи. На ней задаются связи между таблицами. Перейдем на эту вкладку, рис. 7.22.

Конструктор запроса, вкладка Связи

увеличить изображение
Рис. 7.22. Конструктор запроса, вкладка Связи

По умолчанию здесь установлен выбор всех элементов справочника Номенклатура и подбор соответствующих им полей из справочника ЕдиницыИзмерения по следующему условию:

Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка

То есть - условие предполагает выполнение равенства реквизита ЕдиницаИзмерения справочника Номенклатура с элементом справочника ЕдиницыИзмерения.

Обратите внимание на поле Все около поля Таблица1, в котором установлена галочка. Такая настройка соответствует правилам левого внешнего соединения, то есть - в запрос попадут все данные из Таблицы1 и лишь соответствующие им данные из Таблицы2. Такое же поле есть и около поля Таблица2. Расстановка галочек в этих полях и определяет вид соединения таблиц.

Сделаем еще некоторые настройки в Конструкторе запроса. В частности, перейдем на вкладку Объединения/Псевдонимы, рис. 7.23.

Конструктор запроса, вкладка Объединения/Псевдонимы

увеличить изображение
Рис. 7.23. Конструктор запроса, вкладка Объединения/Псевдонимы

Здесь, в поле Имя поля задаются имена полей результатов запроса. Так как поля разных справочников имеют одинаковые имена ( Наименование ), здесь мы видим имя Наименование для справочника Номенклатура и Наименование1 для справочника ЕдиницыИзмерения. Для удобства работы изменим эти имена, соответственно, на Номенклатура и ЕдиницаИзмерения, рис. 7.24.

Конструктор запроса, вкладка Объединения/Псевдонимы

увеличить изображение
Рис. 7.24. Конструктор запроса, вкладка Объединения/Псевдонимы

Теперь настройки Конструктора окончены, нажмем ОК и выполним полученный запрос, рис. 7.25.

Результат выполнения запроса

увеличить изображение
Рис. 7.25. Результат выполнения запроса

Мы получили следующий текст запроса:

ВЫБРАТЬ
	Номенклатура.Наименование КАК Номенклатура,
	ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
	Справочник.Номенклатура КАК Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
		ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка

Команда ЛЕВОЕ СОЕДИНЕНИЕ задает способ соединения таблиц.

Этот запрос можно интерпретировать так: выбрать все элементы из справочника Номенклатура и "присоединить" к ним элементы справочника ЕдиницыИзмерения, соответствующие условию.

Правое внешнее соединение

Правое соединение в точности противоположно левому. Из первой таблицы выбираются только те строки, которым находятся соответствия во второй таблице. А из второй выбираются все строки. Вместо "недостающих" строк первой таблицы подставляется значение Null.

Для того, чтобы модифицировать текст запроса, превратив его из "левого" в "правый", достаточно заменить ЛЕВОЕ СОЕДИНЕНИЕ на ПРАВОЕ СОЕДИНЕНИЕ. Причем, это мы сделаем вручную, рис. 7.26.

Результат выполнения запроса

увеличить изображение
Рис. 7.26. Результат выполнения запроса

Вот какой текст запроса у нас получился:

ВЫБРАТЬ
	Номенклатура.Наименование КАК Номенклатура,
	ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
	Справочник.Номенклатура КАК Номенклатура
		ПРАВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
		ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка

Как видите, таблица ЕдиницыИзмерения представлена здесь в полном объеме, а вот из таблицы Номенклатура выбраны лишь те позиции, которым назначена единица измерения.

Если попытаться добиться такого же эффекта с помощью Конструктора запроса, то он, вместо того, чтобы использовать команду ПРАВОЕ СОЕДИНЕНИЕ, использует ЛЕВОЕ СОЕДИНЕНИЕ, но при этом изменяет запрос.

На рис. 7.27 вы можете видеть вкладку Связи Конструктора запросов. Здесь мы сняли галочку из поля Все таблицы Номенклатура и установили ее в поле Все для таблицы ЕдиницыИзмерения.

Конструктор запроса, вкладка Связи

увеличить изображение
Рис. 7.27. Конструктор запроса, вкладка Связи

В итоге мы получаем следующий запрос, сгенерированный автоматически:

ВЫБРАТЬ
	Номенклатура.Наименование КАК Номенклатура,
	ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
		ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка

Выборка осуществляется уже из таблицы ЕдиницыИзмерения, ее элементам сопоставляются элементы таблицы Номенклатура, для которых выполняется условие соединения. Эффект от такого запроса точно такой же, рис. 7.28, как и от вышеописанного запроса с командой ПРАВОЕ СОЕДИНЕНИЕ, которую мы вводили вручную.

Результат выполнения запроса

увеличить изображение
Рис. 7.28. Результат выполнения запроса