Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_N4_сложные_запросы.doc
Скачиваний:
6
Добавлен:
28.07.2019
Размер:
286.72 Кб
Скачать

Лекция 4 Запросы по нескольким таблицам и перекрестные запросы

Соединение таблиц для создания многотабличного запроса

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

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

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

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

  • Рекурсивное соединение связывает данные в одной таблице. Создание этого типа соединения выполняется путем добавления в запрос копии таблицы (Access назначает псевдоним для копии) и связывания полей идентичных таблиц.

  • Соединение по отношению (или тэта-соединение) связывает данные некоторым отношением (это может быть любое отношение, исключая равенство). Соединение по отношению выполняется с помощью предложения where, а не с помощью ключевого слова SQL join. Кроме того, в окне конструктора запросов соединения по отношению не выводятся, также как они не отображаются в окне схемы данных.

Создание внутреннего соединения по одному полю

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

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

  • Отношение "многие-ко-многим", например, связь между таблицами "Заказы" и "Товары", реализуется на основе промежуточной таблицы (в данном случае таблицы "Заказано"), которая связана с одной таблицей отношением "один-ко-многим" (таблица "Заказы" с таблицей "Заказано"), а с другой таблицей отношением "многие-к-одному" (таблица "Заказано" с таблицей "Товары").

Повторяющиеся данные, там, где это только возможно, необходимо извлечь в новую таблицу, имеющую первичный ключ, совпадений значений которого не допускается, и связать с таблицей, из которой эти данные были получены отношением "один-ко-многим". Чтобы однозначно определить извлеченные данные, часто требуется использовать первичный ключ, состоящий из нескольких полей, т. к. одно поле может включать повторяющиеся данные. Однако, комбинация значений ключевых полей (известная также как конкатенация) должна быть уникальной. Мастер по анализу таблиц (Table Analyze Wizard) находит и извлекает почти всю повторяющуюся информацию автоматически.