Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.

Допустим, что с базой данных Борей, точнее с двумя ее копиями, работают два оператора, компьютеры которых достаточно удалены друг от друга и не связаны между собой сетью. Такая ситуация встречается довольно часто. Операторы работают независимо друг от друга, заполняя каждый свою копию базы данных своими сведениями. Для того чтобы объединить информацию, внесенную обоими операторами, в один набор данных для последующего анализа, очень удобно использовать запрос на объединение.

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

· Скопировать базу данных Борей под другим именем в том же каталоге, например Борей1

· Открыть базу данных Борей1 и удалить несколько записей из таблицы Заказы.

На первом шаге нужно сконструировать и отладить запросы на выборку, которые потом лягут в основу запроса на объединение. Один запрос выбирает записи из текущей базы данных Борей, второй – из базы данных Борей1.

Теперь необходимо сконструировать два запроса на выборку – один выбирает записи на выборку из текущей базы данных (Борей), второй – из базы данных Борей1.

Создайте новый запрос и откройте его в режиме конструктора. Добавьте к нему таблицу Заказы и перетащите из нее в бланк запроса строчку с изображением звездочки (*). Звездочка в бланке запросов означает, что выбираться будут все поля из таблицы. Закройте запрос, сохранив его под каким-либо именем (например, под именем 1).

Создайте еще один запрос и откройте его в режиме конструктора, не добавляя в него никаких таблиц. В окне свойств запроса укажите в свойстве База данных-источник полный путь и имя базы Борей1, например, D:\Мои документы\Борей1.mdb. После этого добавьте в запрос таблицу Заказы и перетащите из нее в бланк запроса звездочку (*). Сохраните этот запрос, например, под именем 2 и закройте его.

Открывая поочередно запросы 1 и 2 в режиме таблицы, можно убедиться, что записи действительно отбираются из разных файлов баз данных. В нашем случае запрос 1 возвращал 830 записей (из базы Борей), а запрос 2 – 800 записей (в таблице Заказы базы данных Борей1 было удалено 30 записей).

Создаем запрос на объединение. Откройте новый запрос в режиме конструктора, отказавшись от добавления в него таблиц, и переключитесь в режим SQL. Не закрывая этот запрос, откройте в режиме SQL запросы 1 и 2. Скопируйте в буфер обмена SQL-оператор из запроса 1 и вставьте его в запрос на объединение. Удалите точку с запятой в конце SQL-строки и добавьте ключевые слова UNION ALL. Таким же образом вставьте из буфера SQL-оператор из запроса 2. Сохраните сконструированный запрос и закройте его. При сохранении запроса Microsoft Access автоматически распознает его тип, преобразовав в запрос на объединение. Запрос изображен на рис. 6.1.

 

Рис. 6.1. Запрос на объединение, связывающий однотипные таблицы из различных баз данных

Для реального использования результатов запроса на объединение, нужно сконструировать запрос на выборку, группирующий информацию. Создайте новый запрос и откройте его в режиме конструктора. Добавьте в его макет обсуждавшийся выше запрос на объединение. Перетащите все поля в бланк запроса и нажмите кнопку Групповые операции (кнопка панели инструментов с изображением ∑). Звездочку в этом случае использовать нельзя, поскольку в запросе нужно четко перечислить поля, подлежащие группировке. Запрос, использующий результаты запроса на объединение, изображен на рис. 6.2.

 

Рис. 6.2. Запрос, группирующий результаты выполнения запроса на объединение.

Пояснения

а). Создать новый пустой запрос на объединение можно и другим способом. Для этого создайте новый запрос и откройте его в режиме конструктора, отказавшись от добавления таблиц. Затем из контекстного меню запроса выберите пункт Запрос SQL | Объединение. Новый запрос на объединение будет открыт в режиме SQL-оператора.

б). Инструкции SQL. В запросе на выборку данных из внешнего файла базы данных Бopeй в операторе FROM используется предложение IN. В этом контексте конструкция IN используется для указания полного пути и названия файла внешней базы данных, расположенного на локальном или сетевом диске. Путь и имя файла берутся в одинарные кавычки.

в). В запросе, использовалась группировка для всех без исключения полей, включенных в запрос. Обычно такой подход не имеет смысла: помимо группировки почти всегда используются агрегатные (статистические) функции Sum, Count, Avg и т.д. Задание группировки для всех полей запроса приводит к выборке неповторяющихся записей из временного набора данных, то есть, из уже отобранных. По сути, в результирующем наборе данных будут представлены записи, входящие хотя бы в одну из таблиц обеих баз данных (текущей и внешней). В некотором смысле группировка всех полей запроса аналогична использованию ключевого слова (предиката) DISTINCT в операторе SELECT (или установке в значение Да свойства запроса Уникальные значения.



r.php"; ?>