Управление данными с помощью запросов

Запросы к несвязанным источникам данных

Браузер не поддерживает видео. Установите Microsoft Silverlight, Adobe Flash Player или Internet Explorer 9.

Иногда требуется создать запрос, чтобы извлечь информацию из источников данных, не связанных напрямую (т. е. без связей типа "один-к-одному" или "один-ко-многим").

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

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

Предположим, вам нужно узнать, сколько заказов вы получили на продукты разных поставщиков. Таблица "Поставщики" не связана с таблицей "Сведения о заказах", в которой указаны коды продуктов и количество проданных товаров. Однако с таблицей "Сведения о заказах" связана таблица "Накладные".

Несколько источников данных, как с предопределенными связями, так и без них.

Совет : Если эта связь может вам потребоваться не только в создаваемом запросе, лучше всего создать промежуточную связь для дальнейшего использования. Инструкции см. в статье Создание связей типа "многие-ко-многим".

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

Использование одной таблицы для создания непрямой связи между двумя другими

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

  • В соединяемых полях должны храниться данные одного типа или сопоставимые сведения. Например, нельзя соединить текстовое поле с числовым.

  • Соединяемые поля должны соответствовать уникальным записям в каждой таблице. Например, не следует соединять два поля "Фамилия", поскольку фамилии не всегда уникальны.

  • На основе связи между полями должны возвращаться правильные записи. Например, при наличии связи между полями "Код поставщика" и "Номер заказа" могут возникнуть совпадения, если в них обнаружатся одинаковые значения. Однако результаты не будут правильными, поскольку коды поставщиков отличаются от номеров заказов. Лучше всего соединить поле "Код" из таблицы "Поставщики" с полем "Код поставщика" из таблицы "Накладные". В этом случае будут возвращены правильные записи, поскольку оба поля относятся к поставщикам.

Действия

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

  1. Добавьте в запрос промежуточную таблицу между двумя несвязанными таблицами.

  2. Создайте необходимые связи с промежуточной таблицей.

    Для связей можно использовать соединения любых типов, однако связываемые поля должны удовлетворять описанным выше условиям.

    Создание необходимых связей с использованием промежуточной таблицы
  3. Выполните запрос.

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

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

Вам нужны дополнительные возможности?

Создание простых запросов

Создание запросов путем объединения нескольких источников данных

Создание запросов с внешними соединениями

Обучение работе с Excel

Обучение работе с Outlook

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

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

Или же можно добавить соединение.

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

В таком случае вам нужно найти ответ на такой вопрос: «Для каких заказов не указано состояние, и какие сотрудники забыли его указать?»

На первый взгляд кажется, что в запросе нужно использовать три таблицы: «Сотрудники», «Заказы» и «Состояние сведений о заказе», так как они соответствуют точкам данных наших вопросов: «Для каких заказов не указано состояние, и какие сотрудники забыли его указать?»

Как видите, после добавления таблиц в запрос две из них не соединены. Но это не проблема, правильно? Мы можем добавить соединение.

Итак, соединяем поля с кодами, запускаем запрос и... ничего.

Теперь мы сделаем то, что нам следовало сделать в первую очередь: посмотреть на связи между таблицами.

Теперь мы видим что-то наподобие цепочки связей: «Сотрудники» — «Заказы», «Заказы» — «Сведения о заказе», «Сведения о заказе» — «Состояние сведений о заказе».

Таблицы «Заказы» и «Состояние сведений о заказе» не связаны, но они обе связаны с таблицей «Сведения о заказе». Таким образом, таблица «Сведения о заказе» становится промежуточной.

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

Промежуточную таблицу необязательно включать в результаты, но ее необходимо включить в источник данных.

Итак, добавляем в запрос таблицу «Сведения о заказе», поля не меняем и выполняем запрос.

Отфильтровываем пустые значения и получаем ответ на наш вопрос.

Теперь давайте добавим в запрос соединение. Для этого нужно учитывать ряд правил.

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

Например, типы данных «Число» и «Валюта» совместимы, а «Число» и «Текст» — нет.

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

В-третьих, результаты должны быть логичны. Если соединение возвращает данные, например, по заказам и автомобилям компании, скорее всего, стоит создать его заново.

Допустим, нам нужно знать, какие продукты заказывал каждый клиент.

Мы добавляем таблицы «Клиенты», «Заказы» и «Сведения о заказе» в новый запрос. Теперь мы добавляем соединение. Мы перетаскиваем поле «Код клиента» из таблицы «Клиенты» в соответствующее поле таблицы «Заказы».

Здесь мы видим линию связи и можем выделить еще одно правило: Access размещает перетаскиваемые поля слева от нового соединения. Если вы этого не хотите, выделите линию связи, нажмите клавишу DELETE и создайте связь заново.

Сделав все это, мы можем составить запрос. Добавим поля «Имя» и «Фамилия» из таблицы «Клиенты», а затем поля «Код товара», «Код заказа», «Количество» и «Цена за единицу» из таблицы «Сведения о заказе».

Запустив запрос, мы получаем нужные данные.

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

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×