Левое соединение (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;
На рис. ниже показаны две таблицы и результат их, соединения.
Обычно результат объединения-соединения рассматривается в качестве промежуточного при выполнении более сложного запроса.
Рис. Две исходных таблицы и результат их объединения-соединения