Яка різниця між ПРИЄДНАЮТЬСЯ та СОЮЗ?


252

У чому різниця між JOINі UNION? Чи можу я мати приклад?


Будь-який сучасний DBS, як MariaDB , виконує команду UNION JOIN. Це команда SQL & nbsp; 3 , але вона недостатньо відома і не використовується. Дізнайтеся більше про UNION JOIN .
— Остон

Відповіді:


301

UNIONставить рядки з запитів один за одним, при цьому JOINробить декартовий продукт і підмножини - зовсім інші операції. Тривіальний приклад UNION:

mysql> SELECT 23 AS bah
    -> UNION
    -> SELECT 45 AS bah;
+-----+
| bah |
+-----+
|  23 | 
|  45 | 
+-----+
2 rows in set (0.00 sec)

подібний тривіальний приклад JOIN:

mysql> SELECT * FROM 
    -> (SELECT 23 AS bah) AS foo 
    -> JOIN 
    -> (SELECT 45 AS bah) AS bar
    -> ON (33=33);
+-----+-----+
| foo | bar |
+-----+-----+
|  23 |  45 | 
+-----+-----+
1 row in set (0.01 sec)

6
Скажіть, будь ласка, що таке UNION-JOINі як я можу виконати це у стандартному SQL? Maria DB має команду union join, але інші бази даних не мають. Дякую.
— Ерран Морад

72

Приєднання та об'єднання можуть використовуватися для об'єднання даних з однієї або декількох таблиць. Різниця полягає в тому, як поєднуються дані.

Простіше кажучи, приєднання об'єднує дані в нові стовпці . Якщо дві таблиці з'єднані разом, то дані з першої таблиці відображаються в одному наборі стовпців поряд зі стовпцем другої таблиці в тому ж рядку.

Профспілки об'єднують дані в нові рядки. Якщо дві таблиці "об'єднані" разом, то дані з першої таблиці знаходяться в одному наборі рядків, а дані з другої таблиці - в іншому. Рядки - однаковий результат.

Ось наочне зображення з'єднання. Стовпці таблиці А та В об'єднані в єдиний результат.

введіть тут опис зображення

Кожен рядок результату містить стовпці з таблиці BOTH та B. Рядки створюються, коли стовпці з однієї таблиці відповідають стовпцям з іншої. Цей матч називається умовою приєднання.

Це робить об'єднання справді чудовими для пошуку цінностей та включення їх до результатів. Зазвичай це результат денормалізації (повернення нормалізації) і передбачає використання зовнішнього ключа в одній таблиці для пошуку значень стовпців за допомогою первинного ключа в іншій.

Тепер порівняйте наведене зображення із зображенням союзу. У об'єднанні кожен рядок у результаті є з однієї таблиці АБО з іншої. У об'єднанні стовпці не поєднуються для створення результатів, рядки об'єднуються.

введіть тут опис зображення

Як об'єднання, так і об'єднання можуть використовуватися для об'єднання даних з однієї або декількох таблиць в єдині результати. Вони обидва йдуть по цьому різними шляхами. Якщо об'єднання використовується для об'єднання стовпців з різних таблиць, об'єднання використовується для об'єднання рядків.

Джерело


4
Це приголомшливий візуальний приклад. Я був майже впевнений, що зрозумів після інших відповідей, але це повністю прояснило це.
— seadoggie01

На прикладі з'єднання, технічно кажучи, чи не повинно бути 10 стовпців для результату?
— Бхарат Рам

60

UNION об'єднує результати двох або більше запитів в єдиний набір результатів, який включає всі рядки, що належать до всіх запитів у об'єднанні.

Використовуючи JOIN , ви можете отримати дані з двох або більше таблиць на основі логічних зв’язків між таблицями. Приєднання вказують, як SQL повинен використовувати дані з однієї таблиці для вибору рядків в іншій таблиці.

Операція UNION відрізняється від використання JOIN, які поєднують стовпці з двох таблиць.

Приклад об'єднання:

SELECT 1 AS [Column1], 2 AS [Column2]
UNION
SELECT 3 AS [Column1], 4 AS [Column2]

Вихід:

Column1    Column2
-------------------
1          2
3          4

ПРИЄДНАЙТЕСЬ Приклад:

SELECT a.Column1, b.Column2 FROM TableA a INNER JOIN TableB b ON a.Id = b.AFKId

Це виведе всі рядки з обох таблиць, для яких умова a.Id = b.AFKIdсправжня.


Приєднання може отримати дані з однієї * або декількох таблиць. Не обов’язково два
— Кеннет Селесте

51

Можливо, ви побачите однакові схематичні пояснення для обох, але вони зовсім заплутані.

Для союзу:

Введіть тут опис зображення

ПРИЄДНАЙТЕСЬ:

Введіть тут опис зображення


9
З цих зображень випливає, що FULL OUTER JOINце те саме UNION, що мають різниці
— icc97

1
Ця відповідь вказує на те, що ці зображення є заплутаними (який IMO вони є), але далі не пояснюють, чому або пропонують якісь пояснення до оригінального питання.
— Джош Д.

1
Кожне зображення із схемами чудово пояснює ситуацію. Немає єдиного зображення, яке може об'єднати всі діаграми. Це буде більш заплутано.
— Java Main

41

ПРИЄДНАЙТЕСЬ:

Об'єднання використовується для відображення стовпців з однаковими або різними іменами з різних таблиць. Виведений результат матиме всі стовпці, що відображаються окремо. Тобто стовпчики будуть вирівняні поруч один з одним.

СОЮЗ:

Оператор набору UNION використовується для комбінування даних із двох таблиць, що містять стовпці з однаковим типом даних. Коли виконується UNION, дані з обох таблиць збиратимуться в одну колонку, що має однаковий тип даних.

Наприклад:

Дивіться дві таблиці, показані нижче:

Table t1
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table t2
manufacturer_id manufacturer
1 ABC Gmbh
2 DEF Co KG

Тепер для виконання типу JOIN запит наведено нижче.

SELECT articleno, article, manufacturer
FROM t1 JOIN t2 ON (t1.manufacturer_id =
t2.manufacturer_id);

articelno article manufacturer
1 hammer ABC GmbH
2 screwdriver DEF Co KG

Це приєднання.

UNION означає, що вам потрібно таблиці або набір результатів з однаковою кількістю та типом стовпців, і ви додаєте це до таблиць / наборів результатів разом. Подивіться на цей приклад:

Table year2006
Articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2

Table year2007
Articleno article price manufacturer_id
1 hammer 6 $ 3
2 screwdriver 7 $ 4

SELECT articleno, article, price, manufactruer_id
FROM year2006
UNION
SELECT articleno, article, price, manufacturer_id
FROM year2007

articleno article price manufacturer_id
1 hammer 3 $ 1
2 screwdriver 5 $ 2
1 hammer 6 $ 3
2 screwdriver 7 $ 4

21

Вони абсолютно різні речі.

Приєднатися дозволяє зв'язати аналогічні дані в різних таблицях.

Союз повертає результати двох різних запитів як єдиний набір записів.


9

Union робить два запити схожими на один. Приєднання призначене для вивчення двох або більше таблиць в одному заяві запиту


3

Приєднання та об'єднання можуть використовуватися для об'єднання даних з однієї або декількох таблиць. Різниця полягає в тому, як поєднуються дані.

Простіше кажучи, приєднання об'єднує дані в нові стовпці. Якщо дві таблиці з'єднані разом, то дані з першої таблиці відображаються в одному наборі стовпців поряд зі стовпцем другої таблиці в тому ж рядку.

Профспілки об'єднують дані в нові рядки. Якщо дві таблиці "об'єднані" разом, то дані з першої таблиці знаходяться в одному наборі рядків, а дані з другої таблиці - в іншому. Рядки - однаковий результат.


1

Пам'ятайте, що об'єднання об'єднає результати ( SQL Server впевнений) (функція чи помилка?)

select 1 as id, 3 as value
union
select 1 as id, 3 as value

id, значення

1,3

select * from (select 1 as id, 3 as value) t1 inner join (select 1 as id, 3 as value) t2 on t1.id = t2.id

id, значення, id, значення

1,3,1,3


6
Це відповідно до стандарту ANSI, UNION ALL не об'єднує результати
— vzczc

1
Дивіться також UNIONпроти UNION ALL stackoverflow.com/questions/49925 / ...
— Jaider

0

1. Стаття SQL Joins використовується для об'єднання записів з двох або більше таблиць у базі даних. ПРИЄДНАЙТЕ - це засіб для комбінування полів з двох таблиць за допомогою значень, загальних для кожної.

2. Оператор SQL UNION поєднує результат двох або більше операторів SELECT. Кожен оператор SELECT в рамках UNION повинен мати однакову кількість стовпців. Стовпці також повинні мати подібні типи даних. Також стовпці кожного оператора SELECT повинні бути в одному порядку.

наприклад: таблиця 1 клієнтів / таблиця 2 замовлення

внутрішнє з'єднання:

ВИБІР ІДЕНТИФІКАЦІЙ, ІМ'Я, СУМА, ДАТА

ВІД КЛІЄНТІВ


ВНУТРІШНЯ ПРИЄДНАЙТЕ ЗАМОВЛЕННЯ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

союз:

ВИБІР ІДЕНТИФІКАЦІЙ, ІМ'Я, СУМА, ДАТА


ВІД КЛІЄНТІВ


ЛІВО ПРИЄДНАЙТЕ ЗАМОВЛЕННЯ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

СОЮЗ

Виберіть ідентифікатор, ім’я, суму, дату від клієнтів


ПРАВО ПРИЄДНАЙТЕ ЗАМОВЛЕННЯ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

Ussing UNION

UNION об'єднує результати двох або більше запитів в єдиний набір результатів, який включає всі рядки, що належать до всіх запитів у об'єднанні.

Приклад об'єднання:
ВИБІР 121 АС [Стовпчик1], 221 АС [Стовпчик2]
СОЮЗ
ВИБІР 321 AS [Стовпчик1], 422 AS [Стовпець2]
Вихід:

Колонка1 Стовпчик2
-------------------
121 221
321 422

Ussing ПРИЄДНАЄТЬСЯ

ПРИЄДНАЙТЕСЬ, ви можете отримати дані з двох або більше таблиць на основі логічних зв’язків між таблицями.

ПРИЄДНАЙТЕСЬ Приклад:
ВИБІРТЕ a.Column1, b.Column2 ВІД TblA a ВНУТРІШНЕ ПРИЄДНАННЯ TblB b ON a.Id = b.id


-1

У рефераті вони подібні тим, що поєднуються дві таблиці або набори результатів, але UNION дійсно для комбінування наборів результатів з ІНШИМОЮ НОМЕРИ КОЛОНІВ з КОЛІНЯМИ, ЩО ВИДАЮТЬ ПОДІЛЬНІ ВИДИ ДАНИХ. СТРУКТУРА така ж, додаються лише нові рядки.

При об'єднанні ви можете комбінувати таблиці / набори результатів з будь-якою можливою структурою, включаючи декартову приєднання, де немає Спільних / подібних стовпців.


-1

Оператор UNION призначений лише для комбінування двох або більше операторів SELECT.

Хоча JOIN призначений для вибору рядків з кожної таблиці, або внутрішнім, зовнішнім, лівим або правим методом.

Зверніться сюди і сюди . Краще пояснення з прикладами.


-1

Операція союзу - це об'єднаний результат вертикальної сукупності рядків, операція "Союз" - об'єднаний результат горизонтального агрегата стовпців.


-3

Мені подобається думати про загальну різницю як таке:

  • ПРИЄДНАЙТЕСЬ приєднуйтесь до таблиць
  • UNION (тощо) поєднує запити.

1
Це ставить питання - приєднання згадується в термінах "приєднатися", а союз згадується в термінах нез'ясованих "комбайнів". У будь-якому разі, що ви думаєте, що ви додали б більше інших високоголосних 10-річних відповідей, що робить це "корисним"? (Риторичне.) Дивіться текст стрілки для голосування.
— philipxy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.