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


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

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

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

См. также

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

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

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

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