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

Оценить
(0 голоса)

В предыдущих примерах естественного соединения результирующий набор данных включал только строки одной таблицы, которые имели соответствующие строки из другой таблицы. Иногда бывает необходимым получать в дополнение к строкам, имеющим такое соответствие, строки, не имеющие никакого соответствия, из одной или обеих таблиц. Подобная операция называется внешним соединением.

В примерах 6.58 и 6.59 показаны различия между естественным соединением и соответствующим ему внешним соединением. (Все примеры этого раздела используют таблицу employee_enh.)

 

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

 

В примере 6.58 используется естественное соединение для получения результирующего набора строк. Если вы хотите узнать все другие места проживания служащих, вам нужно использовать (левое) внешнее соединение. Оно называется левым внешним соединением, потому что возвращаются все строки таблицы с левой стороны оператора, независимо от того, есть ли соответствующая строка в таблице справа. Другими словами, если нет соответствующих строк в таблице с правой стороны, внешнее соединение все равно вернет строку из таблицы с левой стороны со значениями null для каждого столбца второй таблицы (см. пример 6.59). Database Engine использует оператор left outer join для задания левого внешнего соединения.

Правое внешнее соединение похоже на левое, только оно возвращает все строки таблицы в правой части выражения. Database Engine использует оператор right outer join для задания правого внешнего соединения.

 

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

 

Как вы можете видеть, когда не существует соответствующих строк в таблице с правой стороны (в данном случае department), левое внешнее соединение все равно возвращает строки из таблицы с левой стороны (employeeenh), а столбцы второй таблицы заполняются значениями null. В примере 6.60 показано использование операции правого внешнего соединения.

 

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

 

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

 

В дополнение к левому и правому внешнему соединению существует также и полное внешнее соединение, которое определяется как объединение левого и правого внешнего соединения. Другими словами, все строки из обеих таблиц представлены в результирующем наборе данных. Если нет соответствующей строки для одной из таблиц, ее столбцы будут возвращены с пустыми значениями null. Эта операция задается при помощи оператора full outer join.

Database Engine поддерживает внутренний синтаксис для левого и правого внешних соединений, *= и -'* только с целью обратной совместимости. Для использования этого нестандартного синтаксиса вам нужно изменить режим совместимости базы данных для SQL Server 2008, который равен 80.

Каждый оператор внешнего соединения может быть смоделирован при использовании оператора using плюс функция not exists. Пример 6.61 эквивалентен примеру с левым внешним соединением (см. пример 6.59).

 

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

 

Первый оператор select в объединении задает естественное соединение таблиц employee_enh и department со столбцами соединения domicile и location.

Этот оператор select отыскивает все города, которые в одно и то же время являются и местом проживания, и местом работы каждого служащего. Второй оператор select в объединении дополнительно отыскивает все строки из таблицы empioyeeenh, которые не соответствуют условию естественного соединения.


Другие формы операций соединения
Тета-соединение
Самосоединение или соединение таблицы самой с собой
Полусоединение
Коррелированные подзапросы

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.