Рекомендуем, 2020

Выбор редакции

Разница между левым, правым и полным внешним соединением

Ранее мы обсуждали различия между внутренним соединением и внешним соединением, где мы рассмотрели типы внешнего соединения. Внешнее соединение - это тот, кто сохраняет кортежи в результате, который был бы потерян во время операции соединения. В этой статье; мы собираемся обсудить различия между типами внешнего соединения. Есть три типа внешнего соединения; Левое внешнее соединение, правое внешнее соединение и полное внешнее соединение. Левое, правое и полное внешнее соединение различаются планом выполнения и полученными результатами. Мы можем опустить Внешнее слово слева, справа и Полное внешнее соединение. Давайте рассмотрим различия между левым, правым и полным внешним соединением с помощью сравнительной таблицы, показанной ниже.

Сравнительная таблица

Основа для сравненияЛевое внешнее соединениеПравое внешнее соединениеПолное внешнее соединение
основнойВсе кортежи левой таблицы остаются в результате.Все кортежи правой таблицы остаются в результате.Все кортежи как левой, так и правой таблицы остаются в результате.
Расширение NULLКортежи левой таблицы, которые не имеют совпадающих кортежей в правой таблице, расширяются значением NULL для атрибутов правой таблицы.Кортежи правой таблицы, которые не имеют совпадающих кортежей в левой таблице, расширяются значением NULL для атрибутов левой таблицы.
Кортежи левой и правой таблиц, которые не имеют соответствующих кортежей в правой и левой таблицах соответственно, расширяются со значением NULL для атрибутов правой и левой таблиц.

Определение левого внешнего соединения

Предположим, у нас есть « Table_A Left Outer Join Table_B ». Таким образом, Table_A - это наша левая таблица, как кажется слева от операции Left Outer Join, а Table_B - это наша правая таблица.

Первоначально, внутреннее соединение будет применено к Table_A и Table_B, которое вернет весь соответствующий кортеж из таблиц A и B.

Затем он вернет все кортежи из Table_A, у которых нет соответствующего кортежа в Table_B. Таким образом, результирующие кортежи будут дополнены значениями NULL для атрибутов правой таблицы.

Следовательно, результат, полученный из левого внешнего соединения, сохраняет все кортежи из левой таблицы и только совпадающие кортежи из правой таблицы.

Давайте обсудим левое внешнее соединение с примером; у нас есть две таблицы ниже: таблица студентов и таблица кафедры .

Теперь мы будем применять левое внешнее соединение на столе ученика и факультета.

ВЫБЕРИТЕ * ОТ СЛЕДУЮЩЕГО ВНЕШНЕГО ОБЪЕДИНЕНИЯ
НА Студента. Student_ID = Department.Student_ID

В приведенном выше запросе таблица Student является левой таблицей, а таблица Department - правой. Таким образом, согласно левому внешнему соединению, результат должен иметь все кортежи из таблицы Student и только соответствующие кортежи из таблицы Department.

Обратите внимание на результат, полученный из левого внешнего соединения; в нем есть все кортежи из таблицы Student и соответствующие кортежи из таблицы Student и Department. Student_id Джимми, Джозеф Гарри из Студенческого стола не присутствовал в таблице Департамента. Следовательно, значения атрибутов таблицы Department для Jimmy, Joseph Harry расширены до NULL.

Определение правого внешнего соединения

Предположим, у нас есть « Table_A Right Outer Join Table_B ». Таким образом, Table_A - это наша левая таблица, как кажется слева от операции Right Outer Join, а Table_B - наша правая таблица.

Как и в левом внешнем соединении, изначально, внутреннее объединение будет применено к Table_A и Table_B, которое возвратит весь соответствующий кортеж из таблиц A и B.

Затем он вернет все кортежи из Table_B, которые не имеют соответствующего кортежа в Table_A. Таким образом, результирующие кортежи будут дополнены значениями NULL для атрибутов левой таблицы.

Следовательно, результат, полученный из правого внешнего соединения, сохраняет все кортежи из правой таблицы и только совпадающие кортежи из левой таблицы.

Давайте обсудим Right Outer Join с примером; выше у нас есть две таблицы: таблица учеников и таблица отделов.

Теперь мы применим приложение Right Outer Join к столу ученика и столу кафедры.

ВЫБЕРИТЕ * ИЗ СЛУЖЕБНОГО ПРАВА НА СТУДЕНТ
НА Студента. Student_ID = Department.Student_ID

В приведенном выше запросе таблица учеников - это наша левая таблица, а таблица отделов - наша правая таблица. Согласно операции Right Outer Join, результат должен включать все кортежи из таблицы Department и только соответствующие кортежи из таблицы Student.

Обратите внимание на результат, полученный из правого внешнего соединения; в нем есть все кортежи из таблицы Department вместе с соответствующими кортежами из таблицы Student и Department. Student_ID 10536 и 00954 таблицы отдела отсутствуют в таблице Student. Следовательно, значение атрибута Name для Student_ID 10536 и 00954 расширяется до NULL.

Определение полного внешнего соединения

Предположим, у нас есть « Table_A Full Outer Join Table_B ». Таким образом, Table_A - это наша левая таблица, как кажется слева от операции полного внешнего соединения, а Table_B - наша правая таблица.

Полное внешнее соединение - это комбинация левого внешнего соединения и правого внешнего соединения . Первоначально он применяет внутреннее соединение к Table_A и Table_B для извлечения соответствующих кортежей из обеих таблиц. Затем он расширяет те кортежи Table_A с NULL, которые не имеют соответствующего кортежа в Table_B. Кроме того, он расширяет те кортежи из Table_B с NULL, которые не имеют соответствующего кортежа в Table_A.

Следовательно, Full Outer Join сохраняет все кортежи как левой, так и правой таблицы вместе с соответствующими кортежами обеих таблиц.

Давайте обсудим FULL Outer Join с примером; у нас есть две таблицы выше, таблица студентов и таблица кафедры .

Теперь мы применим приложение Full Outer Join к столу ученика и столу кафедры.

ВЫБЕРИТЕ * ИЗ СТУДЕНТА ПОЛНОГО ВНЕШНЕГО СОЕДИНЕНИЯ
НА Студента. Student_ID = Department.Student_ID

В приведенном выше запросе таблица учеников - это наша левая таблица, а таблица отделов - наша правая таблица. Согласно Full Outer Join, результат должен включать все кортежи из обеих таблиц.

Соблюдайте результат, полученный при полном внешнем соединении; в нем есть все кортежи из таблицы Student и Department, а также соответствующие кортежи из таблицы Student и Department. Student_id Джимми, Джозефа Гарри, т. Е. 10026, 02256, 56362, соответственно, из таблицы Student, отсутствовал в таблице Department. Следовательно, значения атрибутов таблицы Department для Джимми Джозефа Гарри расширены до NULL . Student_ID 10536 и 00954 таблицы Department отсутствуют в столбце Student_ID таблицы Student. Следовательно, значение атрибута атрибута Name для Student_ID 10536 и 00954 расширяется до NULL .

Ключевые различия между левым, правым и полным внешним соединением

  1. Результат Left Outer Join содержит все кортежи левой таблицы. Аналогично, результат Right Outer Join содержит все кортежи правой таблицы. И результат Full Outer Join имеет все кортежи как из левой, так и из правой таблицы.
  2. В левом внешнем соединении кортежи левой таблицы, которые не имеют соответствующего кортежа в правой таблице, расширяются значениями NULL для атрибутов правой таблицы. Противоположным является случай правого внешнего соединения. А в режиме полного внешнего соединения кортежи из левой и правой таблиц, у которых нет соответствующих кортежей в правой и левой таблицах соответственно, расширяются с помощью NULL для атрибутов правой и левой таблиц соответственно.

Заключение:

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

Top