Union join sql: Difference between JOIN and UNION in SQL

Разница между JOIN и UNION в SQL


JOIN и UNION — это предложения в SQL, используемые для объединения данных двух или более отношений. Но способ, которым они объединяют данные и формат полученного результата, отличается. Предложение JOIN

Как Скорпион извин�…

Please enable JavaScript

Как Скорпион извиняется?

объединяет атрибуты двух отношений для формирования результирующих кортежей, тогда как предложение UNION объединяет результат двух запросов. Давайте обсудим разницу между JOIN и UNION с помощью сравнительной таблицы, показанной ниже.

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

Основа для сравненияПРИСОЕДИНИТЬСЯUNION
основнойJOIN объединяет атрибуты кортежей, присутствующих в двух разных отношениях, которые имеют общие поля или атрибуты.UNION объединяет кортежи отношений, которые присутствуют в запросе.
СостояниеJOIN применяется, когда два вовлеченных отношения имеют хотя бы один общий атрибут.UNION применяется, когда число столбцов, присутствующих в запросе, одинаково и соответствующие атрибуты имеют одинаковый домен.
ТипыВНУТРЕННЯЯ, ПОЛНАЯ (НАРУЖНАЯ), ЛЕВАЯ РЕГИСТРАЦИЯ, ПРАВАЯ СОЕДИНЕНИЕСОЮЗ и СОЮЗ ВСЕХ.
эффектДлина результирующих кортежей больше по сравнению с длиной кортежей вовлеченных отношений.Количество результирующих кортежей больше по сравнению с количеством кортежей, присутствующих в каждом отношении, участвующем в запросе.
схема

Определение JOIN

Предложение JOIN в SQL объединяет кортежи из двух отношений или таблиц, что приводит к увеличению размера кортежа. Результирующий кортеж содержит атрибуты из обоих отношений. Атрибуты объединяются на основе общих атрибутов между ними. Различные типы JOIN в SQL: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN.

INNER JOIN объединяет кортежи из обеих таблиц, если между ними существует общий атрибут. LEFT JOIN приводит ко всем кортежам левой таблицы и соответствующим кортежу из правой таблицы. RIGHT JOIN приводит ко всем кортежам из правой таблицы и соответствует только кортежу из левой таблицы. FULL OUTER JOIN приводит ко всем кортежам из обеих таблиц, хотя они имеют совпадающие атрибуты или нет.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ — то же самое, что СОЕДИНЕНИЕ. Вы также можете удалить ключевое слово INNER и просто использовать JOIN для выполнения INNER JOIN.

Определение СОЮЗА

UNION — это операция над множествами в SQL. UNON объединяет результат двух запросов. Результат UNION включает в себя кортежи обоих отношений, присутствующих в запросе. Условия, которые должны быть выполнены для объединения двух отношений:

  1. Два отношения должны иметь одинаковое количество атрибутов.
  2. Домены соответствующего атрибута должны быть одинаковыми.

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

  1. Основное различие между JOIN и UNION состоит в том, что JOIN объединяет кортежи из двух отношений, а результирующие кортежи включают атрибуты из обоих отношений. С другой стороны, UNION объединяет результат двух запросов SELECT.
  2. Предложение JOIN применимо только тогда, когда два участвующих отношения имеют хотя бы один общий атрибут в обоих. С другой стороны, UNION применяется, когда два отношения имеют одинаковое количество атрибутов и домены соответствующих атрибутов одинаковы.
  3. Существует четыре типа РЕАГИРОВАНИЯ ВНУТРЕННЕГО РЕШЕНИЯ, ЛЕВОГО СОЕДИНЕНИЯ, ПРЯМОГО СОЕДИНЕНИЯ, ПОЛНОГО НАРУЖНОГО СОЕДИНЕНИЯ. Но есть два типа UNION, UNION и UNION ALL.
  4. В JOIN результирующий кортеж имеет больший размер, поскольку включает атрибуты обоих отношений. С другой стороны, в UNION число кортежей увеличивается, в результате чего в них входит кортеж из обоих отношений, присутствующих в запросе.

Заключение:

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

Как использовать соединение SQL Union

Объединение SQL чрезвычайно полезно. В отличие от других типов соединения SQL, соединение union не пытается сопоставить строку из левой исходной таблицы с какими-либо строками в правой исходной таблице. Он создает новую виртуальную таблицу, содержащую SQL-объединение всех столбцов в обеих исходных таблицах. В виртуальной таблице результатов столбцы, полученные из левой исходной таблицы, содержат все строки, которые были в левой исходной таблице. Для этих строк все столбцы, полученные из правой исходной таблицы, имеют нулевое значение.

Аналогично, столбцы, полученные из правой исходной таблицы, содержат все строки, которые были в правой исходной таблице. Для этих строк все столбцы, полученные из левой исходной таблицы, имеют нулевое значение. Таким образом, таблица, полученная в результате объединения, содержит все столбцы обеих исходных таблиц, а количество содержащихся в ней строк равно сумме количества строк в двух исходных таблицах.

В большинстве случаев результат SQL-объединения сам по себе бесполезен; он создает таблицу результатов с большим количеством нулей. Но вы можете получить полезную информацию от объединения, когда используете его в сочетании с COALESCE выражение. Посмотрите на пример.

Предположим, вы работаете в компании, которая проектирует и производит экспериментальные ракеты. У вас в работе несколько проектов. У вас также есть несколько инженеров-конструкторов, обладающих навыками в нескольких областях. Как руководитель вы хотите знать, какие сотрудники, обладающие какими навыками, над какими проектами работали. В настоящее время эти данные разбросаны по таблицам EMPLOYEE, PROJECTS и SKILLS.

Таблица EMPLOYEE содержит данные о сотрудниках, и EMPLOYEE.EmpID — его первичный ключ. В таблице PROJECTS есть строка для каждого проекта, над которым работал сотрудник. PROJECTS.EmpID — это внешний ключ, который ссылается на таблицу EMPLOYEE. Таблица SKILLS показывает опыт каждого сотрудника. SKILLS.EmpID — это внешний ключ, ссылающийся на таблицу EMPLOYEE.

Таблица EMPLOYEE содержит по одной строке для каждого сотрудника; таблица PROJECTS и таблица SKILLS содержат ноль или более строк.

В следующих таблицах приведены примерные данные.

СОТРУДНИК Таблица
EmpID Имя
1 Фергюсон
2 Фрост
3 Тойон
ПРОЕКТЫ Таблица
Имя проекта EmpID
Структура X-63 1
Структура X-64 1
Х-63 Руководство 2
Х-64 Руководство 2
X-63 Телеметрия 3
X-64 Телеметрия 3
Таблица НАВЫКОВ
Навык EmpID
Механический дизайн 1
Аэродинамическая нагрузка 1
Аналоговый дизайн 2
Конструкция гироскопа 2
Цифровой дизайн 3
Дизайн RF/F 3

Из таблиц видно, что Фергюсон работал над конструкцией X-63 и X-64 и имеет опыт в области механического проектирования и аэродинамических нагрузок.

Теперь предположим, что вы как менеджер хотите видеть всю информацию обо всех сотрудниках. Вы решили применить эквивалентное соединение к таблицам EMPLOYEE, PROJECTS и SKILLS:

 ВЫБОР *
  ОТ СОТРУДНИКА E, ПРОЕКТЫ P, НАВЫКИ S
  ГДЕ E.EmpID = P.EmpID
   И E.EmpID = S.EmpID ; 

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

Обе формулировки дают одинаковый результат.

Результат внутреннего соединения SQL
E.EmpID Имя P.EmpID ИмяПроекта S.EmpID Навык
1 Фергюсон 1 Структура Х-63 1 Механический дизайн
1 Фергюсон 1 Структура Х-63 1 Аэродинамическая нагрузка
1 Фергюсон 1 Структура Х-64 1 Механический дизайн
1 Фергюсон 1 Структура Х-64 1 Аэродинамическая нагрузка
2 Фрост 2 Х-63 Руководство 2 Аналоговый дизайн
2 Фрост 2 Х-63 Руководство 2 Конструкция гироскопа
2 Фрост 2 Х-64 Руководство 2 Аналоговый дизайн
2 Фрост 2 Х-64 Руководство 2 Конструкция гироскопа
3 Тойон 3 X-63 Телеметрия 3 Цифровой дизайн
3 Тойон 3 X-63 Телеметрия 3 Дизайн R/F
3 Тойон 3 X-64 Телеметрия 3 Цифровой дизайн
3 Тойон 3 X-64 Телеметрия 3 Дизайн R/F

Такое расположение данных не особенно информативно. Идентификационные номера сотрудников появляются три раза, а проекты и навыки дублируются для каждого сотрудника. Итог: внутренние соединения SQL не очень подходят для ответа на этот тип вопросов. Здесь вы можете использовать SQL union join вместе с некоторыми стратегически выбранными SELECT , чтобы получить более подходящий результат. Вы начинаете с базового объединения SQL:

Обратите внимание, что объединение не имеет условия ON . Он не фильтрует данные, поэтому предложение ON не требуется. Этот оператор дает результат, показанный в следующей таблице.

Результат соединения SQL Union
E.EmpID Имя P.EmpID ИмяПроекта S.EmpID Навык
1 Фергюсон НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ 1 Структура Х-63 НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ 1 Структура Х-64 НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 1 Механический дизайн
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 1 Аэродинамическая нагрузка
2 Фрост НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ 2 Х-63 Руководство НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ 2 Х-64 Наведение НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 2 Аналоговый дизайн
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 2 Конструкция гироскопа
3 Тойон НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЕ 3 X-63 Телеметрия НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ 3 X-64 Телеметрия НУЛЕВОЙ НУЛЕВОЙ
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 3 Цифровой дизайн
НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ НУЛЕВОЙ 3 Дизайн R/F

Каждая таблица была расширена вправо или влево с помощью нулей, и эти строки с нулевым расширением были объединены. Порядок строк произвольный и зависит от реализации. Теперь вы можете массировать данные, чтобы привести их в более полезную форму.

Обратите внимание, что в таблице есть три столбца идентификаторов, два из которых пусты в любой строке. Вы можете улучшить отображение, объединив столбцы ID. Выражение COALESCE принимает значение первого ненулевого значения в списке значений. В данном случае он принимает значение единственного ненулевого значения в списке столбцов:

 ВЫБЕРИТЕ ОБЪЕДИНЕНИЕ (E.EmpID, P.EmpID, S.EmpID) КАК ИДЕНТИФИКАТОР,
   E.Name, P.ProjectName, S.Skill
  ОТ СОТРУДНИКА E СОЮЗ ПРИСОЕДИНЯЙТЕСЬ К ПРОЕКТАМ P
   СОЮЗ ПРИСОЕДИНЯЙТЕСЬ К НАВЫКАМ S
  ЗАКАЗАТЬ ПО ID ; 

Предложение FROM такое же, как и в предыдущем примере, но теперь три столбца EMP_ID объединены в один столбец с именем ID . Вы также упорядочиваете результат по ID . В следующей таблице показан результат.

Результат объединения SQL с выражением COALESCE
ID Имя ИмяПроекта Навык
1 Фергюсон Структура Х-63 НУЛЕВОЙ
1 Фергюсон Структура Х-64 НУЛЕВОЙ
1 Фергюсон НУЛЕВОЙ Механический дизайн
1 Фергюсон НУЛЕВОЙ Аэродинамическая нагрузка
2 Фрост Х-63 Руководство НУЛЕВОЙ
2 Фрост Х-64 Руководство НУЛЕВОЙ
2 Фрост НУЛЕВОЙ Аналоговый дизайн
2 Фрост НУЛЕВОЙ Конструкция гироскопа
3 Тойон X-63 Телеметрия НУЛЕВОЙ
3 Тойон X-64 Телеметрия НУЛЕВОЙ
3 Тойон НУЛЕВОЙ Цифровой дизайн
3 Тойон НУЛЕВОЙ Дизайн R/F

Каждая строка в этом результате содержит данные о проекте или навыке, но не о том и другом. Когда вы читаете результат, вы сначала должны определить, какой тип информации находится в каждой строке (проект или навык). Если ProjectName 9Столбец 0008 имеет ненулевое значение, в строке указан проект, над которым работал сотрудник. Если столбец Skill не равен нулю, в строке указывается один из навыков сотрудника.

Вы можете сделать результат более ясным, добавив еще одно COALESCE к оператору SELECT следующим образом:

 ВЫБЕРИТЕ ОБЪЕДИНЕНИЕ (E.EmpID, P.EmpID, S.EmpID) КАК ИДЕНТИФИКАТОР,
   E.Name, COALESCE (P.Type, S.Type) AS Type,
   P.ProjectName, S.Skill
  ОТ СОТРУДНИКА E
   UNION JOIN (ВЫБРАТЬ «Проект» КАК Тип, P.*
           ИЗ ПРОЕКТОВ) П
   UNION JOIN (ВЫБЕРИТЕ «Skill» AS Type, S.*
           ОТ НАВЫКОВ) С
  ЗАКАЗАТЬ ПО ID, Тип ; 

В этом объединении таблица PROJECTS в предыдущем примере заменяется вложенным SELECT , который добавляет столбец с именем P.Type с постоянным значением «Проект» к столбцам, поступающим из таблицы PROJECTS. Точно так же таблица SKILLS заменяется вложенным SELECT , который добавляет столбец с именем S.Type с постоянным значением «Skill» к столбцам, поступающим из таблицы SKILLS. В каждой строке P.Type имеет значение null или 9.0007 "Проект" и S.Type либо нулевой, либо "Навык" .

Внешний список SELECT указывает COALESCE из этих двух столбцов Type в один столбец с именем Type . Затем вы указываете Введите в предложении ORDER BY , которое сортирует строки с одинаковым идентификатором в порядке, в котором все проекты располагаются первыми, а затем все навыки. Результат показан в следующей таблице.

Уточненный результат соединения SQL Union с выражениями COALESCE
ID Имя Тип ИмяПроекта Навык
1 Фергюсон Проект Структура Х-63 НУЛЕВОЙ
1 Фергюсон Проект Структура Х-64 НУЛЕВОЙ
1 Фергюсон Навык НУЛЕВОЙ Механический дизайн
1 Фергюсон Навык НУЛЕВОЙ Аэродинамическая нагрузка
2 Фрост Проект Х-63 Руководство НУЛЕВОЙ
2 Фрост Проект Х-64 Руководство НУЛЕВОЙ
2 Фрост Навык НУЛЕВОЙ Аналоговый дизайн
2 Фрост Навык НУЛЕВОЙ Конструкция гироскопа
3 Тойон Проект X-63 Телеметрия НУЛЕВОЙ
3 Тойон Проект X-64 Телеметрия НУЛЕВОЙ
3 Тойон Навык НУЛЕВОЙ Цифровой дизайн
3 Тойон Навык НУЛЕВОЙ Дизайн R/F

Таблица результатов теперь представляет собой очень удобочитаемый отчет об опыте проекта и наборах навыков всех сотрудников в таблице EMPLOYEE.

Учитывая количество доступных операций SQL JOIN , связывание данных из разных таблиц не должно быть проблемой, независимо от структуры таблиц. Вы можете быть уверены, что, если в вашей базе данных существуют необработанные данные, у SQL есть средства для их извлечения и отображения в осмысленной форме.

Разница между JOIN и UNION в SQL

Оба типа предложений в SQL. Мы используем их оба для объединения данных из двух или более двух отношений.

Существует большое различие между JOIN и UNION в SQL. С помощью предложения JOIN мы объединяем атрибуты двух заданных отношений и в результате формируем кортежи. В то время как мы используем предложение UNION, когда хотим объединить результаты, полученные из двух запросов. Они оба объединяют данные по-разному. Формат результата, который они получают, также различается. В этой статье мы углубимся в разницу между JOIN и UNION в SQL. Но давайте сначала разберемся в отдельных функциях обоих пунктов.

Что такое JOIN в SQL?

Это предложение объединяет кортежи в SQL из двух таблиц или отношений. Таким образом, предложение JOIN приводит к формированию кортежей большего размера. Этот результирующий кортеж имеет атрибуты обоих связанных отношений. Предложение JOIN объединяет их оба на основе общих атрибутов между ними. Это предложение бывает разных типов: RIGHT JOIN, LEFT JOIN, FULL OUTER JOIN и INNER JOIN.

  • Тип #1 INNER JOIN — помогает объединять кортежи из двух таблиц, когда они имеют общий атрибут.
  • Тип #2 FULL OUTER JOIN — объединяет кортежи из обеих таблиц. Наличие общего атрибута в данном случае не является обязательным условием.
  • Тип #3 LEFT JOIN — Это предложение приводит к кортежам из левой таблицы и только к соответствующим кортежам из правой таблицы.
  • Тип #4 RIGHT JOIN — Это предложение приводит к получению кортежей из правой таблицы и только соответствующих кортежей из левой таблицы.

Здесь INNER JOIN действует так же, как предложение JOIN. Таким образом, за использование этого пункта можно опустить ключевое слово INNER и напрямую используйте ключевое слово JOIN для выполнения INNER JOIN.

Что такое UNION в SQL?

Это предложение, которое мы используем для операций над множествами в SQL. Предложение UNION объединяет результат, полученный из двух запросов. Результат, сгенерированный UNION, включает кортежи из обоих отношений, присутствующих в запросе. Чтобы применить предложение UNION к двум отношениям, они должны удовлетворять обоим этим условиям:

  • Оба отношения должны иметь одинаковое количество атрибутов.
  • Соответствующие атрибуты должны иметь один и тот же домен.

UNION бывает двух основных типов: UNION и UNION ALL. Результат, который мы получаем с помощью предложения UNION, не имеет дубликатов. Но результаты, которые мы получаем с помощью UNION ALL, всегда сохраняют все свои дубликаты.

Разница между JOIN и UNION в SQL

Параметры СОЕДИНЕНИЕ в SQL ОБЪЕДИНЕНИЕ в SQL
Основы Предложение JOIN объединяет кортежи и их атрибуты из двух разных таблиц/отношений, если они имеют общий атрибут или поле. Предложение UNION объединяет кортежи тех отношений, которые вы найдете в запросе.
Типы Существует четыре основных типа предложения JOIN: LEFT, RIGHT, FULL OUTER и INNER JOIN. Существует два основных типа предложения UNION: UNION и UNION ALL.
Применимые условия Мы можем использовать предложение JOIN только в том случае, если два вовлеченных в него отношения имеют один (по крайней мере) общий атрибут. Мы можем использовать предложение UNION, когда общее количество столбцов в запросе одинаково, а соответствующий атрибут имеет аналогичный домен.
Эффект Результирующий кортеж, полученный после применения предложения JOIN, оказывается больше длины тех кортежей, которые мы задействовали в отношениях. Общее количество результирующих кортежей, полученных после применения предложения UNION, всегда больше по сравнению с кортежами, присутствующими в обоих отношениях запроса.

Imacros | Все права защищены © 2021