Поделиться через


Типы соединений

При соединении таблиц тип созданного соединения влияет на строки, которые отображаются в результирующем наборе.Можно создавать следующие типы соединений:

  • Внутреннее соединение — соединение, в котором отображаются только строки, имеющие соответствие в обеих соединенных таблицах.(Это установленный по умолчанию тип соединения в конструкторе запросов и представлений.) Например, можно соединить таблицы 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 
    

См. также

Основные понятия

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

Другие ресурсы

Установка условий поиска