Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование нескольких источников

Поиск

Прежде чем приступить к рассмотрению методов использования нескольких источников в запросах, разберем те задачи, которые могут возникать в данной ситуации, иначе нам будет непонятно, зачем вообще существуют эти методы и когда их использовать (постараюсь без математических премудростей и терминов).

Можно сказать, что когда мы используем несколько источников для отображения данных в одной таблице, мы их суммируем:

Рисунок 3.1

Но таблицы это не числа, которые можно просто сложить (2 + 3 = 5), и не строки, которые можно склеить ("2"+"3" = "23").

Каждая таблица состоит из:

· набор колонок

· набор записей

И в связи с такой структурой наших источников, возникают сразу два вопроса:

· Какие колонки попадут в результирующую таблицу?

· Какие строки попадут в результирующую таблицу?

И так, рассмотрим возможные варианты сложения таблиц с учетом наших вопросов:

· соединение таблиц (объединяем колонки) – горизонтальна я склейка

Рисунок 3.2

· объединение таблиц (объединяем записи) – вертикальная склейка

Рисунок 3.3

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

Рассмотрим теперь детали.

Соединение таблиц (Join)

Для соединения двух таблиц необходимо чтобы эти таблицы имели определенную структуру. И для понимания данной задачи рассмотрим ее на примере двух записей:

Запись таблицы "А" (одна запись)

Сотрудник Таб. Номер ФИО
Василькова 001 Василькова Мария Степановна

Запись таблицы "Б" (одна запись)

Сотрудник Паспорт Дата рождения Стаж работы
Василькова М.С. 1234 456789 29.02.1980 5 лет

Нам нужна сводная информация в виде:

Сотрудник Таб. Номер ФИО Паспорт Дата рождения
Василькова 001 Василькова Мария Степановна 1234 456789 29.02.1980

Наглядно все понятно, но компьютер не человек, и наглядность ему не поможет. В нашем случае в обеих записях нет единого уникального значения, по которому можно понять, что эти две записи относятся к одному сотруднику (действительно, Василькова и Василькова М.С. могут быть разными людьми). И так получается, главное правило:

ДЛЯ СОЕДИНЕНИЯ ЗАПИСЕЙ НЕОБХОДИМО НАЛИЧИЕ ХОТЯ БЫ ОДНОГО КЛЮЧЕВОГО ПОЛЯ В КАЖДОЙ ЗАПИСИ

Рисунок 3.4

Для реализации такой связи в языке запросов существует специальная конструкция, определяемая в конструкторе запросов на закладке Связи:

Рисунок 3.5

Правило соединения в тексте запроса будет следующего содержания:

Рисунок 3.6

Весь текст запроса для нашего примера будет следующим:

Рисунок 3.7

Если в одной таблице по нашему ключевому значению 2 и более записей, то в результате может1 получиться несколько записей, например:

Рисунок 3.8

Запись таблицы "А" (одна запись)

Сотрудник Таб. Номер ФИО
Василькова 001 Василькова Мария Степановна

Записи таблицы "Б" (две записи)

Сотрудник Ребенок Дата рождения
Василькова Петя 29.02.1980
Василькова Маша 01.03.1981

 

Сводная информация будет следующего содержания:

Сотрудник Таб. Номер ФИО Ребенок Дата рождения
Василькова 001 Василькова Мария Степановна Петя 29.02.1980
Василькова 001 Василькова Мария Степановна Маша 01.03.1981

Если мы соединяем таблицы, в которых более двух записей:

Записи таблицы "А" (две запись)

Сотрудник Таб. Номер ФИО
Василькова 001 Василькова Мария Степановна
Петрова 002 Петрова Татьяна Николаевна
Иванов 003 Иванов Олег Петрович

Записи таблицы "Б" (две записи)

Сотрудник Ребенок Дата рождения
Василькова Петя 29.02.1980
Василькова Маша 01.03.1981
Петрова Саша 01.04.1985
Сидоров Оля 01.03.1990

Сводная информация может содержать следующие данные:

Сотрудник Таб. Номер ФИО Ребенок Дата рождения
Василькова 001 Василькова Мария Степановна Петя 29.02.1980
Василькова 001 Василькова Мария Степановна Маша 01.03.1981
Петрова 002 Петрова Татьяна Николаевна Саша 01.04.1985
Иванов 003 Иванов Олег Петрович    
    Василькова Мария Степановна Оля 01.03.1990

Отображение записей с пустыми2 значениями в колонках, зависит от способа соединения. Существуют 4 варианта:

Выбор варианта влияет и на количество записей в результирующей таблице при одинаковых источниках.

[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц? источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают.

Например:

  Листинг № __

ВЫБРАТЬ РАЗЛИЧНЫЕ Поступление.Материал

ИЗ Документ.Поступлениематериалов.Материалы КАК Поступление

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Документ.АктОбОказанииУслуг.Материалы КАК Акт

ПО Поступление.Материал = Акт.Материал

ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отли­чие от внутреннего соединения, в результат запроса надо вклю­чить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответст­вующих условию записей из второго источника.

Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второ­го источника при выполнении указанного условия. Строки ре­зультата запроса, для которых не найдено соответствующих усло­вию записей из второго источника, будут содержать NULL в по­лях, формируемых на основании записей из этого источника.

Например:

  Листинг № __

ВЫБРАТЬ РАЗЛИЧНЫЕ Менеджеры.Ссылка КАК Менеджер,

Заказы.Ссылка КАК Заказ

ИЗ Справочник.Менеджеры КАК Менеджеры

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Заказы КАК Заказы

ПО Менеджеры.Ссылка = Заказы.Менеджер

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для кото­рых не найдено соответствующих условию записей из первого ис­точника.

Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из перво­го источника при выполнении указанного условия. Строки ре­зультата запроса, для которых не найдено соответствующих усло­вию записей из первого источника, будут содержать NULL в по­лях, формируемых на основании записей из этого источника.

 

  Листинг № __

ВЫБРАТЬ Заказы.Ссылка КАК Заказ,

Менеджеры.Ссылка КАК Менеджер

ИЗ Справочник.Заказы КАК Заказы

ПРАВОЕ СОЕДИНЕНИЕ Справочник.Менеджеры КАК Менеджеры

ПО Заказы.Менеджер = Менеджеры.Ссылка

ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обо­их источников, для которых не найдено соответствий.

Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при вы­полнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого - либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Например:

  Листинг № __

ВЫБРАТЬ Менеджеры.Ссылка КАК Менеджер,

Заказы.Ссылка КАК Заказ

ИЗ Справочник.Менеджеры КАК Менеджеры

ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Заказы КАК Заказы

ПО Менеджеры.Ссылка = Заказы.Менеджер

Объединение таблиц (Union)

При объединении таблиц, как и при соединении, есть свое главное правило. Чтобы выявить его посмотрим на процесс объединения (вертикальной склейки - как сложение в столбик):

Рисунок 3.9

И так, главное правило:

ДЛЯ ПОЛУЧЕНИЯ РЕЗУЛЬТАТ НАМ НЕОБХОДИМО НАЛИЧИЕ В ТАБЛИЦАХ ОДИНАКОВОГО КОЛИЧЕСТВА ПОЛЕЙ

При настройке данного объединения, также необходимо определить соответствие колонок, т.е. указать, что данные из колонки 1 первой и второй таблицы будет отражать в колонке 1 результата:

Рисунок 3.10

При настройке соответствий, мы видим, что для буквы 4 нет колонки в таблицеБ (отсутствует). Данное обстоятельство приведет к тому, что конструктор запроса сам создаст вычисляемое поле для второго источника с пустым значением NULL. И мы можем увидеть данный результат в полученном тексте запроса:

Рисунок 3.11

Подстановка значения NULL имеет смысл, только если у нас в правилах соответствия в связке с вычисляемым полем находится поле, не ссылающееся на вложенную таблицу (как в нашем случае). Но, если в одной из таблиц используется ссылка на вложенную таблицу, а в другой ее не нет:

Рисунок 3.12

Конструктор подставит в текст запроса уже вместо NULL значение другого типа:

Рисунок 3.13

В общем случае, при объединении в запросе результатов нескольких запросов следует использовать конструкцию "ОБЪЕДИНИТЬ ВСЕ", а не "ОБЪЕДИНИТЬ". Поскольку во втором варианте, при объединении запросов полностью одинаковые строки заменяются одной, на что затрачивается дополнительное время, даже в случаях, когда одинаковых строк в запросах заведомо быть не может.



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 123; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.119.34 (0.007 с.)