Рассмотрим типы соединений в SQL на примере двух связанных таблиц, содержащих информацию о контактных лицах и компаниях (см. листинг). Код приведен для MS SQL Server 2000/2005.
Наши исходные заполненные таблицы будут выглядеть следующим образом:
Компании (companies)
Контакты (contacts)
Сделаем выборки с использованием различных типов соединений и посмотрим на результаты.
Обычное эквисоединение
Оно же называется и внутренним (inner) соединением:
Результаты выборки эквисоединением
Внешнее соединение слева
В предыдущую выборку не попали «безработные» контакты. Если вы этого и хотели, то примите поздравления. Чтобы показать все контакты с привязкой их к компании, включая нигде не работающих (или неизвестно где работающих), нам придется воспользоваться внешним соединением.
Результаты выборки соединением слева
Внешнее соединение справа
В качестве иллюстрации проведем соединение по неключевому атрибуту — номеру телефона. На то нам и дана реляционная модель, чтобы мы не задумывались о необходимости существования физических связей между таблицами.
Результаты выборки соединением справа
Как видим, «безработный» Петр Петрович вполне может являться сотрудником НИИ ЧАВО.
Выполним для полноты эксперимента еще и внешнее соединение слева по тому же атрибуту:
Полное соединение
Полное соединение (full join) мы также проводим по неключевому атрибуту — номеру телефона:
Результат выборки полным соединением
Как нетрудно убедиться, результат является объединением множеств, полученных нами ранее внешними соединениями слева и справа.
Перекрестное соединение
Оно же прямое, или декартово, произведение в терминах теории множеств. Выдает все возможные упорядоченные пары элементов двух перемножаемых множеств. В случае реляционной алгебры — двух множеств кортежей (строк).
Как следует из определения, указывать атрибут для связи здесь не требуется.
Число строк в результирующем множестве будет равно произведению числа строк в исходных таблицах. Поэтому будьте осторожны при использовании декартова произведения.
Более подробно с типами соединений в SQL можно ознакомиться по книге Мартина Грабера «Введение в SQL» (изд-во «Лори», 2000 г.).