Типы соединений
Обновлен: Ноябрь 2007
При соединении таблиц тип созданного соединения влияет на строки, которые отображаются в результирующем наборе. Можно создавать следующие типы соединений:
Внутреннее соединение — соединение, в котором отображаются только строки, имеющие соответствие в обеих соединенных таблицах. (Это установленный по умолчанию тип соединения в конструкторе запросов и представлений.) Например, можно соединить таблицы titles и publishers, чтобы создать результирующий набор, в котором будет отображаться имя издателя для каждого издания. Во внутреннем соединении издания, для которых отсутствуют сведения об издателе, а также издатели без изданий не включены в результирующий набор. Конечная инструкция SQL для такого соединения может выглядеть следующим образом:
SELECT title, pub_name FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id
Примечание.
Столбцы, содержащие значения NULL, не соответствуют ни одному из значений при создании внутреннего соединения и поэтому исключаются из результирующего набора. Значения NULL не соответствуют другим значениям NULL.
Внешнее соединение — соединение, которое содержит строки даже в том случае, если они не имеют связанных строк в соединенной таблице. Доступно создание трех разновидностей внешнего соединения, которые позволяют указать, какие строки, не имеющие соответствия, должны быть включены в таблицу:
Левое внешнее соединение — будут включены все строки именованной первой таблицы (таблицы, которая отображается в предложении JOIN крайней слева). Не имеющие соответствия строки правой таблицы не отображаются. Например, в следующей инструкции SQL демонстрируется левое внешнее соединение между таблицами titles и publishers, в которое включены все издания, в том числе не имеющие данных об издателе:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles LEFT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Правое внешнее соединение — будут включены все строки второй именованной таблицы (таблицы, которая отображается в предложении JOIN крайней справа). Не имеющие соответствия строки левой таблицы не отображаются. Например, можно создать правое внешнее соединение между таблицами titles и publishers, в которое будут включены все издатели, в том числе не имеющие изданий в таблице titles. Конечный код SQL может выглядеть следующим образом:
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles RIGHT OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Полное внешнее соединение — включаются все строки во всех соединяемых таблицах независимо от того, имеют ли они соответствие. Например, в полном внешнем соединении между таблицами titles и publishers отображаются все издания и все издатели, в том числе не имеющие соответствующего значения в другой таблице.
SELECT titles.title_id, titles.title, publishers.pub_name FROM titles FULL OUTER JOIN publishers ON titles.pub_id = publishers.pub_id
Примечание.
В некоторых базах данных, например Oracle, полные внешние соединения не поддерживаются.
Перекрестное соединение — соединение, результирующий набор которого содержит одну строку для каждой возможной пары строк из двух таблиц. Например, при перекрестном соединении таблиц авторов и издателей (инструкция CROSS JOIN) будет получен результирующий набор с одной строкой для каждой возможной пары автора и издателя. Конечный код SQL может выглядеть следующим образом:
SELECT * FROM authors CROSS JOIN publishers
См. также
Основные понятия
Работа с данными в области результатов