Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matematicheskie_osnovy_baz_dannykh.doc
Скачиваний:
3
Добавлен:
05.09.2019
Размер:
147.46 Кб
Скачать

Объединение новой записи (union)

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

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

Пример: даны таблицы клиенты и контакты. Пусть они имеют однотипные столбцы Имя и Адрес. Чтобы заполнить данные о клиентах и таблицу Контакты, необходимо выполнить следующий запрос:

Select Имя, Адрес from клиенты

Union

Select Имя, Адрес, from контакты;

Возможно, что в объединяемых таблицах Клиент и Контакты имеются записи с одинаковыми парами значениями в столбцах Имя и Адрес. Однако в результирующей таблице запроса повторений не будет, как если использовать оператор union distinct.

Оператор union можно применять только к таблицам, удовлетворяющим требованиям

  1. Количество столбцов объединяемых таблиц должны быть равны

  2. Данные в соответствующих столбцах объединяемых таблиц должны иметь совместимые типы. Например, символьный (строковый) типы char и varchar совместимы, а числовой строковый типы – нет

Пересечение наборов записей (intersect)

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

Синтаксис: запрос1 intersect запрос2;

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

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

Пример: система 1 и система 2. Требуется получить список компонентов Входящие одновременно в эти обе таблицы.

Select *from Система1

Intersect

Select *from система2;

Вычитание наборов записей (except)

Синтаксис: запрос1 except запрос2;

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

Пример: таблицы Клиенты и Контакты

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

Select* from клиенты

Except*from контакты;

ОПЕРАЦИИ СОЕДИНЕНИЯ

(Join)

Естественные соединения

(natural join)

Пусть в БД имеются следующие 2 таблицы:

Продажи (ID_товара, количество, ID_клиента);

Клиенты (ID_клиента, Имя, Телефон)

Декартово произведение этих таблиц получается с помощью следующего запроса:

select *from продажи, Клиенты;

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

Такая таблица и будет естественным соединением указанных таблиц. Она получается с помощью следующего запроса: select Продажи.*, Клиенты.Имя, Клиенты.Телефон

From Продажи, клиенты

Where Продажи.ID_клиента=Контакты.ID_клиенты;

Эквивалентный запрос с использованием оператора natural join

Select Продажи.*, Клиенты.Имя, Клиенты.Телефон

From Продажи Natural join клиенты;

Примечание! В Access оператор natural join не поддерживается, вместо него используется используется оператор inner join (внутреннее соединение), on (при), за которым следует условие отбора.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]