Объединение нескольких источников данных

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

Допустим, к нашей базе данных присоединена внешняя таблица «Реестр», в которой хранятся сведения обо всех субъектах предпринимательской деятельности в Украине.

А нам надо просмотреть все сведения только о наших заказчиках. Опять-таки, всех. Для таких случаях существует инструкция JOIN – объединение таблиц по одному полю. Различают внутренние (IIGHT) объединения. Мы рассмотрим лишь внутренние – это наиболее жизненная ситуация. Общий вид объединения таков: SELECT (список_полей_главной_таблицы) FROM (Главная_таблица) <Вид_объединения> JOIN (Подчиненная_таблица) ON (Главная. Поле1 = Подчиненная. Поле1) Итак, таблица «Реестр» имеет следующую структуру: Название Код_ЕДРПОУ Расч_счет ИНН Теперь присоединим ее к таблице «Заказчики»: SELECT * FROM Заказчики INNER JOIN Реестр ON (Заказчики. Название = Реестр. Название) В результате мы будем иметь источник записей с количеством записей, равным размеру таблицы «Заказчики», и содержащий все поля таблиц «Заказчики» и «Реестр». Так же, как и в конструкции WHERE, объединение может быть по нескольким полям, с использованием различных условий, однако следует иметь в виду, что использование нестандартных (неподдерживаемых конструктором запросов) действий может привести к непредсказуемым результатам.

Во избежание непонимания стоит заметить, что использование одной конструкции SQL практически никогда не налагает запрет на использование другой. Т.е. запрос типа SELECT * FROM Заказчики INNER JOIN Реестр ON (Заказчики. Название = Реестр. Название) WHERE (Город=’Харьков’) AND (К_во_заказов > 5); будет воспринят MS Access вполне нормально.

Возможна и другая ситуация.

Допустим, у нас есть таблица «Сотрудники_офиса» следующей структуры: Таб_номер ФИО Телефон Также есть таблица «Сотрудники_филиала» с точно такой же структурой. Необходимо в каком-нибудь итоговом отчете представить эти таблицы вместе. Для этого используется конструкция UNION. При ее использовании можно склеить сколько угодно таблиц. Точнее, таблицы необязательно должны иметь одинаковую структуру. Необходимо лишь, чтобы из всех таблиц выбиралось одинаковое количество полей, и чтобы эти поля были полностью эквивалентны.

Общая структура такого запроса такова: SELECT Таблица1.Поле1, Таблица1.ПолеN FROM Таблица1 UNION SELECT Таблица2.Поле1, Таблица2.ПолеN FROM Таблица2 UNION SELECT ТаблицаK.Поле1,ТаблицаK.ПолеN FROM ТаблицаK; В нашем случае это будет выглядеть так: SELECT Сотрудники_офиса.* FROM Сотрудники_офиса UNION SELECT Сотрудники_филиала.* FROM Сотрудники_филиала В результате мы получим источник записей, содержащий данные по всем сотрудникам, работающим и в офисе, и в филиале.

Иногда бывает необходимо объединить несколько таблиц (более 2) с помощью операции JOIN. Сделать это в рамках одного запроса весьма проблематично, однако не следует забывать, что MS Access в состоянии использовать запросы как источник записей. Т.е. объедините две таблицы в одном запросе, а затем обхедините третью таблицу и запрос во втором. 2.4.