Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.3.docx
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
1.64 Mб
Скачать

2.4. Внешние соединения

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

С помощью специальных ключевых слов LEFT OUTER, RIGHT OUTER, FULL и UNION, написанных перед JOIN, можно выполнить соответственно левое, правое, полное соединение и объединение-соединение. В SQL-выражении запроса таблица, указанная слева от оператора JOIN, называется левой, а указанная справа от него — правой.

Левое соединение (LEFT OUTER JOIN)

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

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

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

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

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

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

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

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

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

Примечание:

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

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

Правое соединение (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_пp, Адрес);

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

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

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

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

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

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

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

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

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

ON (Представительства.ID__пp = Отделы. ID_пp)

FULL JOIN Сотрудники

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

Примечание:

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

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

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

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

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

SELECT * FROM T1 UNION JOIN T2;

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

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