Сравнительная таблица
Основа для сравнения | Левое внешнее соединение | Правое внешнее соединение | Полное внешнее соединение |
---|---|---|---|
основной | Все кортежи левой таблицы остаются в результате. | Все кортежи правой таблицы остаются в результате. | Все кортежи как левой, так и правой таблицы остаются в результате. |
Расширение 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.
Определение правого внешнего соединения
Предположим, у нас есть « 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.
Определение полного внешнего соединения
Предположим, у нас есть « 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, результат должен включать все кортежи из обеих таблиц.
Ключевые различия между левым, правым и полным внешним соединением
- Результат Left Outer Join содержит все кортежи левой таблицы. Аналогично, результат Right Outer Join содержит все кортежи правой таблицы. И результат Full Outer Join имеет все кортежи как из левой, так и из правой таблицы.
- В левом внешнем соединении кортежи левой таблицы, которые не имеют соответствующего кортежа в правой таблице, расширяются значениями NULL для атрибутов правой таблицы. Противоположным является случай правого внешнего соединения. А в режиме полного внешнего соединения кортежи из левой и правой таблиц, у которых нет соответствующих кортежей в правой и левой таблицах соответственно, расширяются с помощью NULL для атрибутов правой и левой таблиц соответственно.
Заключение:
Позаботьтесь о позициях имен таблиц в запросе. Поскольку позиция имени таблицы в запросе решает, будет ли таблица рассматриваться как левая или правая таблица.