Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция SELECT.docx
Скачиваний:
4
Добавлен:
21.09.2019
Размер:
44.22 Кб
Скачать

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

Выше были рассмотрены внутренние соединения таблиц базы данных. Напомним, что внутренние соединения имеют место, если в предложении WHERE указано условие

<имя столбца таблицы 1> <оператор> <имя столбца таблицы 2>

Существует также и другой вид соединения таблиц - внешнее соединение. Оно оп­ределяется в предложении FROM согласно такой спецификации:

SELECT {*|<значение1>[,<значение2>...]) FROM <таблица1><вид соединения>JOIN<таблица2>ON<условие поиска>

Внешнее соединение отличается от внутреннего тем, что в результирующий НД включаются также записи ведущей таблицы соединения, которые объединяются с. пус­тым множеством записей другой таблицы. Какая из таблиц будет ведущей, определяет вид соединения:

LEFT - (левое внешнее соединение), когда ведущей является таблица1 (расположена слева от вида соединения);

RIGHT - (правое внешнее соединение), когда ведущей является таблица2 (расположена справа от вида соединения);

FULL - (полное внешнее соединение), когда ведущими таблицами являются и таблица1, и таблица2. В результирующий НД включаются все записи обеих таблиц по следующему алгоритму. Если для записи таблицы1 имеются записи таблицы2, удовлетворяющие условию соединения, в результирующий НД бу­дут включены все комбинации соединения таких записей таблиц 1 и 2; в про­тивном случае в результирующий НД будет включена запись таблицы 1, соеди­ненная с пустой записью. То же относится и к записям таблицы 2: е.сли для за­писи таблицы 2 имеются записи таблицы 1, удовлетворяющие условию соеди­нения, в результирующий запрос будут включены все комбинации соединения таких записей таблиц 2 и 1; в противном случае в результирующий НД будет включена запись таблицы 2, соединенная с пустой записью.

Пусть имеем такие таблицы:

Таблица А

Столбец Р1

Столбец Р2

X

1

У

2

Z

2

Таблица В

Столбец Р1

Столбец Р2

Столбец РЗ

а

X

400

b

X

200

с

У

500

d

Тогда выполнение оператора

SELECT A.PI, A.P2, В.Р2 FROM A LEFT JOIN В ON A.P2 = В.PI

реализующего внешнее левое соединение, приведет к созданию такого результирую­щего НД:

Столбец A.PI

Столбец А.Р2

Столбец В.Р2

а

X

1

b

X

1

с

У

2

d

Как видно из результата, для записи таблицы А, где столбец А.Р1 имеет значение «d», нет парных записей в таблице В, для которых удовлетворялось бы условие поиска А. Р2 = в. Р1. Поэтому данная запись таблицы А показана в соединении с пустой за­писью.

В то же время выполнение оператора

SELECT A.PI, A.P2, В.Р2 FROM A RIGHT JOIN В ON A.P2 = В.PI

реализующего внешнее правое соединение, приведет к выдаче такого результирующе­го НД:

Столбец А.Р1

Столбец А.Р2

Столбец В.Р2

а

X

1

b

X

1

с

У

2

2

Для записи таблицы В, где столбец В.Р1 имеет значение «z» и столбец В.Р2 имеет значение «2», нет парных записей в таблице А, поэтому данная запись таблицы В пока­зана в соединении с пустой записью.

Выполнение оператора полного внешнего соединения таблиц А и В по условию

А.Р2 = В.Р1

SELECT A.PI, A.P2, В.PI, B.P2 FROM A FULL JOIN В ON A.P2 = В.PI

приведет к выдаче такого результата:

Столбец А.Р1

Столбец А.Р2

Столбец В.Р1

Столбец В.Р2

а

X

X

1

Ь

X

X

1

с

У

У

2

d

Z

2