Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТеоретикоМножественные операции ч7.doc
Скачиваний:
7
Добавлен:
09.09.2019
Размер:
3.43 Mб
Скачать

Левое соединение (left outer join)

При левом внешнем соединении несоответствующие записи, имеющиеся в левой таблице, сохраняются в результатной таблице, а имеющиеся в правой — удаляются.

Допустим, в базе данных есть две таблицы:

  • Предложение (ID_товара, Цена, Описание);

  • Склад (ID_товара, Количество).

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

SELECT Предложение.ID_товара, Предложение.Описание, Склад.Количество FROM предложение LEFT OUTER JOIN Склад

ON Предложение.ID_товара = Склад.ID_товара;

Здесь ключевые слова LEFT OUTER JOIN означают операцию левого внешнего соединения.

Примечание

В Microsoft Access ключевое слово OUTER не допускается. Поскольку левого внутреннего объединения не существует, то можно просто писать LEFT JOIN.

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

Рис. Таблицы Предложение, Склад и результат их левого внешнего соединения

Эквивалентный запрос, не использующий ключевые слова LEFT OUTER JOIN, выглядит довольно громоздко:

SELECT Предложение.ID_товара, Предложение.Описание, Склад.Количество

FROM Предложение, Склад

WHERE Предложение.ID_товара=Склад.ID_товара UNION SELECT Предложение.ID_товара, Предложение.Описание, NULL FROM Предложение WHERE Предложение.ID_товара NOT IN

(SELECT Предложение.ID_товара FROM Предложение, Склад WHERE Предложение.ID_товара = Склад.ID_товара);

Этот запрос состоит из объединения (UNION) двух запросов, второй из которых содержит подзапрос. Чтобы выровнять количества столбцов в объединяемых таблицах, во втором запросе в список столбцов был добавлен NULL. Впрочем, вместо NULL можно указать 0 (ноль) и тогда в столбце количество для всех отсутствующих товаров будет стоять число 0.

Правое соединение (RIGHT OUTER JOIN)

При правом внешнем соединении несоответствующие записи, имеющиеся в правой таблице, сохраняются в результатной таблице, а имеющиеся в левой — удаляются. Ключевыми словами в запросе с таким соединением являются RIGHT OUTER JOIN.

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

SELECT Предложение.ID_товара, Предложение.Описание,Склад.количество

FROM Склад RIGHT OUTER JOIN Предложение

ON Предложение.ID_товара = Склад.ID_товара;

Примечание

В Microsoft Access ключевое слово OUTER не допускается. Поскольку правого внутреннего объединения не существует, то можно просто писать RIGHT JOIN.

Полное соединение (FULL JOIN)

Полное соединение выполняет одновременно и левое, и правое внешние соединения. Ключевыми словами в запросе с таким соединением являются FULL JOIN.

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

  • Представительства (ID_пр, Адрес);

  • Отделы(ID_отд, ID_пр,Название);

  • Сотрудники (ID_сотр, ID_отд, Имя).

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

  • представительства без отделов;

  • отделы, не входящие ни в одно представительство;

  • отделы без сотрудников;

  • сотрудники, не входящие ни в один отдел.

Чтобы просмотреть все представительства, отделы и всех сотрудников, не зависимо от того, имеются ли в одних таблицах соответствующие записи в других, используется полное внешнее соединение:

SELECT *

FROM Представительства FULL JOIN Отделы

ON (Представительства.ID_пр = Отделы.ID_пр) FULL JOIN Сотрудники

ON (Отделы.ID_отд = Сотрудники.ID_отд);

Примечание

В Microsoft Access оператор FULL JOIN не поддерживается.

Объединение-соединение (UNION JOIN)

Операцию объединение-соединение еще называют объединение- слияние. Ключевыми словами в запросе с таким соединением являются UNION JOIN.

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

В качестве примера приведем простой запрос:

SELECT * FROM T1 UNION JOIN T2;

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

Обычно результат объединения-соединения рассматривается в качестве промежуточного при выполнении более сложного запроса.

Рис. Две исходных таблицы и результат их объединения-соединения