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


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.