Рассмотрим типы соединений в SQL на примере двух связанных таблиц, содержащих информацию о контактных лицах и компаниях (см. листинг). Код приведен для MS SQL Server 2000/2005.

Наши исходные заполненные таблицы будут выглядеть следующим образом:

Компании (companies)

 

Контакты (contacts)

Сделаем выборки с использованием различных типов соединений и посмотрим на результаты.

Обычное эквисоединение

Оно же называется и внутренним (inner) соединением:

Результаты выборки эквисоединением

Внешнее соединение слева

В предыдущую выборку не попали «безработные» контакты. Если вы этого и хотели, то примите поздравления. Чтобы показать все контакты с привязкой их к компании, включая нигде не работающих (или неизвестно где работающих), нам придется воспользоваться внешним соединением.

Результаты выборки соединением слева

Внешнее соединение справа

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

Результаты выборки соединением справа

 

Как видим, «безработный» Петр Петрович вполне может являться сотрудником НИИ ЧАВО.

Выполним для полноты эксперимента еще и внешнее соединение слева по тому же атрибуту:

Полное соединение

Полное соединение (full join) мы также проводим по неключевому атрибуту — номеру телефона:

Результат выборки полным соединением

 

Как нетрудно убедиться, результат является объединением множеств, полученных нами ранее внешними соединениями слева и справа.

Перекрестное соединение

Оно же прямое, или декартово, произведение в терминах теории множеств. Выдает все возможные упорядоченные пары элементов двух перемножаемых множеств. В случае реляционной алгебры — двух множеств кортежей (строк).

Как следует из определения, указывать атрибут для связи здесь не требуется.

Число строк в результирующем множестве будет равно произведению числа строк в исходных таблицах. Поэтому будьте осторожны при использовании декартова произведения.

Более подробно с типами соединений в SQL можно ознакомиться по книге Мартина Грабера «Введение в SQL» (изд-во «Лори», 2000 г.).

18556