LEFT (OUTER) - тип соединения "левое (внешнее)". Левое соединение таблиц включает в себя все строки из левой таблицы и те строки из правой таблицы, для которых выполняется условие соединения. Для строк из левой таблицы, для которых не найдено соответствия в правой, в столбцы, извлекаемые из правой таблицы, заносятся значения NULL.
Левое внешнее соединение чаще всего используется в наших операторах по причине его естественности. Итак найдем все аэропорты, даже если код города в котором он находится не указан. [35]
SELECT C.CT_NAMEAS"Город",
A.AP_NAMEAS"Аэропорт"
FROM AIRPORTA LEFT OUTER JOINCITYC
ON A.AP_CT_CODE=C.CT_CODE
ORDER BY C.CT_NAME,A.AP_NAME
Получаем:
Листинг 17. Результат левого внешнего объединения таблиц AIROPORT и CITY - список всех аэропортов с указанием города в том случае, если аэропорт располагается в городе.
Город
Аэропорт
Екатиренбург
Кольцово
Москва
Быково
Москва
Внуково
Москва
Домодедово
Москва
Шереметьево
Пермь
Савино
С. Петербург
Пулково
NULL
Аэропорт Н-ской ВЧ
Вначале отбираются строки первой, "главной", таблицы на основании условий, заданных в предложении WHERE. Затем к выбранным строкам добавляются данные из второй, присоединяемой, таблицы в соответствии с условиями соединения, заданными в предложении ON. Особенностью внешних соединений является то, что в выходной набор данных попадают и те строки, которые содержат пустые значения (NULL) в тех столбцах главной таблицы, которые присутствуют в условии соединения в предложении ON. В нашем случае в результат попала строка
NULL
Аэропорт Н-ской ВЧ
т.е. мы видим аэропорт, для которого код города не указан (этот аэропорт не находится ни в одном из известных городов).
Продемонстрированное левое внешнее соединение позволяет получить список аэропортов находящихся вне города, для этого необходимо отобрать только те строки, где поля из таблицы CITY будут содержать пустые значения (NULL). Отбираем эти строки при помощи предложения WHERE.[36]