При выполнении операции соединения данные из двух таблиц комбинируются с образованием пар связанных строк, в которых значения сопоставляемых столбцов являются одинаковыми. Если одно из значений в сопоставляемом столбце одной таблицы не совпадает ни с одним из значений в сопоставляемом столбце другой таблицы, то соответствующая строка удаляется из результирующей таблицы.
Рассмотрим пример.
Таблица Branch (информация об отделениях компании):
branchNo
bCity
B003
Glasgow
B004
Bristol
B005
London
Таблица PropertyForRent (информация о сдаваемых в аренду объектах):
propertyNo
pCity
PA14
Aberdeen
PL94
London
PG4
Glasgow
Выполним обычное (внутреннее) соединение этих таблиц с помощью следующего оператора SQL:
SELECT b.*, p.*
FROM Branch b, PropertyForRentl p
WHERE b.bCity = p.pCity;
Результат выполнения запроса:
branchNo
bCity
propertyNo
pCity
B003
Glasgow
PG4
Glasgow
B005
London
PL94
London
Результат выполнения запроса – информация об отделениях компании и сдаваемых в тех же городах в аренду объектах недвижимости. Как видно, в результате отсутствуют отделение компании в городе Bristol (в этом городе нет сдаваемых в аренду объектов) и объект в городе Aberdeen (в этом городе нет отделений компании). Чтобы в результат запроса попали также записи, которым не соответствует запись из другой таблицы, используется внешнее соединение: левое соединение (left join) – в результат попадают все записи из левой таблицы, правое соединение (right join) – все записи из правой таблицы, полное соединение (full join) – все записи из обеих таблиц.
Пример 11. Левое внешнее соединение. Перечислите отделения компании и сдаваемые в аренду объекты, которые расположены в одном и том же городе, а также прочие отделения компании, не удовлетворяющие условию запроса.
SELECT b.*, р.*
FROM Branch b LEFT JOIN PropertyForRent p ON b.bCity = p.pCity;
Результат выполнения запроса:
branchNo
bCity
propertyNo
pCity
B003
Glasgow
PG4
Glasgow
B005
London
PL94
London
B004
Bristol
NULL
NULL
Пример 11. Правое внешнее соединение. Перечислите отделения компании и сдаваемые в аренду объекты, которые расположены в одном и том же городе, а также все остальные объекты собственности, не удовлетворяющие условию запроса.
SELECT b.*, р.*
FROM Branch b RIGHT JOIN PropertyForRent p ON b.bCity = p.pCity;
Результат выполнения запроса:
branchNo
bCity
propertyNo
pCity
B003
Glasgow
PG4
Glasgow
B005
London
PL94
London
NULL
NULL
PA14
Aberdeen
Пример 12. Полное внешнее соединение. Перечислите отделения компании и сдаваемые в аренду объекты, расположенные в одном и том же городе, а также все остальные отделения и объекты собственности, не удовлетворяющие условию запроса.