Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белобжеский_Лекции_по_ББД.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5.5 Mб
Скачать

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

Все соединения таблиц, рассмотренные до сих пор, являются внутренними. Во всех примерах вместо ключевого слова 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 .

ПРЕДЛОЖЕНИЕ

СКЛАД

НАЛИЧИЕ ПРЕДЛАГАЕМ. ТОВАРОВ


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

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

Эквивалентный запрос, не использующий ключевые слова 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_товapa = Склад.ID_товара;

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

Смотри ниже пример внешнего соединения для БД Учебный процесс.