JOIN ve UNION arasındaki fark nedir?


Yanıtlar:


301

UNIONSorgulardan gelen satırları birbiri ardına koyar, JOINkartezyen bir ürün yapar ve alt kümeler - tamamen farklı işlemler. Önemsiz örnek UNION:

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

benzer önemsiz örneği 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
Bana bir nedir UNION-JOINve standart SQL'de nasıl başarabilirim? Maria DB'nin bir komutu var union join, ancak diğer veritabanları yok. Teşekkürler.
Erran Morad

74

Birleşimler ve Birlikler, bir veya daha fazla tablodaki verileri birleştirmek için kullanılabilir. Aradaki fark verinin nasıl birleştirildiği ile ilgilidir.

Basit bir ifadeyle, birleşimler verileri yeni sütunlarda birleştirir . İki tablo birleştirilirse, ilk tablodaki veriler, aynı satırdaki ikinci tablonun sütununun yanında bir sütun kümesinde gösterilir.

Sendikalar verileri yeni satırlarda birleştirir. İki tablo birlikte “birleştirilirse”, ilk tablodaki veriler bir satır kümesinde ve ikinci tablodaki veriler başka bir kümede bulunur. Satırlar aynı sonuçtadır.

İşte bir birleştirmenin görsel bir tasviri. Tablo A ve B'nin sütunları tek bir sonuçta birleştirilir.

resim açıklamasını buraya girin

Sonuçtaki her satır İKİ tablo A ve B'den sütunlar içerir. Bir tablodaki sütunlar diğerinden sütunlarla eşleştiğinde satırlar oluşturulur. Bu eşleşmeye katılma koşulu denir.

Bu, değerleri aramak ve sonuçlara dahil etmek için birleştirmeleri gerçekten harika kılar. Bu genellikle denormalizasyonun (ters normalizasyon) sonucudur ve bir tablodaki yabancı anahtarın, diğerinde birincil anahtarı kullanarak sütun değerlerini aramak için kullanılmasını içerir.

Şimdi yukarıdaki tasviri sendika tasviri ile karşılaştırın. Bir birleşimde, sonuçtaki her satır bir tablodan VEYA diğerinden olur. Bir birleşimde, sütunlar sonuç oluşturmak için birleştirilmez, satırlar birleştirilir.

resim açıklamasını buraya girin

Hem birleştirmeler hem de birlikler bir veya daha fazla tablodaki verileri tek bir sonuçta birleştirmek için kullanılabilir. İkisi de bunun farklı yolları olduğunu düşünüyor. Birleştirme, farklı tablolardaki sütunları birleştirmek için kullanılırken, birleşim satırları birleştirmek için kullanılır.

Kaynak


4
Bu harika bir görsel örnektir. Diğer cevaplardan sonra anladığımdan emindim, ama bu tamamen ortadan kalktı.
seadoggie01

Birleştirme örneği için, teknik olarak, sonuç için 10 sütun bulunmamalı mı?
Bharath Ram

60

UNION , iki veya daha fazla sorgunun sonuçlarını, birleşmedeki tüm sorgulara ait tüm satırları içeren tek bir sonuç kümesinde birleştirir.

JOIN'leri kullanarak , tablolar arasındaki mantıksal ilişkilere dayalı olarak iki veya daha fazla tablodan veri alabilirsiniz. Birleşimler, SQL'in bir tablodaki verileri başka bir tablodaki satırları seçmek için nasıl kullanması gerektiğini belirtir.

BİRLİĞİ işlemi, iki tablodaki sütunları birleştiren JOIN'leri kullanmaktan farklıdır.

UNION Örneği:

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

Çıktı:

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

BİRLEŞTİR Örnek:

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

Bu, koşulun a.Id = b.AFKIddoğru olduğu her iki tablodaki tüm satırları çıktılar .


Join, bir * veya daha fazla tablodan veri alabilir. Mutlaka iki değil
Kennet Celeste

51

Her ikisi için de aynı şematik açıklamaları görebilirsiniz, ancak bunlar tamamen kafa karıştırıcı.

BİRLİĞİ için:

Resim açıklamasını buraya girin

JOIN için:

Resim açıklamasını buraya girin


9
Bu görüntüler ima FULL OUTER JOINaynıdır UNION, hangi farklılıklar var
icc97

1
Bu cevap, bu görüntülerin kafa karıştırıcı olduğuna (hangi IMO olduklarına) işaret ediyor, ancak daha sonra orijinal soruya neden açıklanmadığını veya herhangi bir açıklama sunmadığını gösteriyor.
Josh D.

1
Diyagramlı her görüntü durumu mükemmel bir şekilde açıklar. Tüm diyagramları birleştirebilecek tek bir görüntü yoktur. Bu daha kafa karıştırıcı olacak.
Java Main

41

KATILMAK:

Birleştirme, farklı tablolardan aynı veya farklı adlara sahip sütunları görüntülemek için kullanılır. Görüntülenen çıktıda tüm sütunlar ayrı ayrı gösterilir. Yani, sütunlar yan yana hizalanacaktır.

BİRLİK:

UNION set işleci, aynı veri tipine sahip sütunları olan iki tablodaki verileri birleştirmek için kullanılır. Bir UNION gerçekleştirildiğinde, her iki tablodaki veriler aynı veri tipine sahip tek bir sütunda toplanır.

Örneğin:

Aşağıda gösterilen iki tabloya bakın:

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

Şimdi bir JOIN türü gerçekleştirmek için sorgu aşağıda gösterilmiştir.

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

Bu bir birleşim.

BİRLİĞİ, aynı miktarda ve türde sütun içeren tablolara veya sonuç kümesine sahip olmanız gerektiği ve bunu tablolara / sonuç kümelerine birlikte eklediğiniz anlamına gelir. Şu örneğe bakın:

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

Tamamen farklı şeyler.

bir katılmak Eğer farklı tablolarda benzer verileri ilişkilendirmek sağlar.

Birlik, iki farklı sorgunun sonuçlarını tek bir kayıt kümesi olarak döndürür.


9

Birlik iki sorguyu bire benzetir. Birleştirmeler, iki veya daha fazla tabloyu tek bir sorgu deyiminde incelemek içindir


3

Birleşimler ve birlikler bir veya daha fazla tablodaki verileri birleştirmek için kullanılabilir. Aradaki fark verinin nasıl birleştirildiği ile ilgilidir.

Basit bir ifadeyle, birleşimler verileri yeni sütunlarda birleştirir. İki tablo birleştirilirse, ilk tablodaki veriler, aynı satırdaki ikinci tablonun sütununun yanında bir sütun kümesinde gösterilir.

Sendikalar verileri yeni satırlarda birleştirir. İki tablo birlikte “birleştirilirse”, ilk tablodaki veriler bir satır kümesinde ve ikinci tablodaki veriler başka bir kümede bulunur. Satırlar aynı sonuçtadır.


1

Birliğin sonuçları birleştireceğini unutmayın ( emin olmak için SQL Server ) (özellik veya hata?)

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

id, değer

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, değer, kimlik, değer

1,3,1,3


6
Bu ANSI standardına göre, UNION ALL sonuçları birleştirmiyor
vzczc

1
Ayrıca bkz. UNIONVs UNION ALL stackoverflow.com/questions/49925/…
Jaider

0

1. SQL Joins yan tümcesi, bir veritabanındaki iki veya daha fazla tablodaki kayıtları birleştirmek için kullanılır. JOIN, her biri için ortak değerleri kullanarak iki tablodaki alanları birleştirmek için bir araçtır.

2. SQL UNION işleci iki veya daha fazla SELECT ifadesinin sonucunu birleştirir. UNION içindeki her SELECT deyimi aynı sayıda sütuna sahip olmalıdır. Sütunlar da benzer veri türlerine sahip olmalıdır. Ayrıca, her SELECT deyimindeki sütunlar aynı sırada olmalıdır.

örneğin: tablo 1 müşteriler / tablo 2 siparişler

iç birleşim:

ID, NAME, MİKTAR, TARİH SEÇ

MÜŞTERİLERDEN


İÇ KATILIM SİPARİŞLERİ


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

Birlik:

ID, NAME, MİKTAR, TARİH SEÇ


MÜŞTERİLERDEN


SOL SİPARİŞLER


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID

BİRLİK

MÜŞTERİLERDEN KİMLİK, AD, MİKTAR, TARİH SEÇİN


DOĞRU SİPARİŞ VER


ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;


0

BİRLİĞİ KULLANMA

UNION, iki veya daha fazla sorgunun sonuçlarını, birleşmedeki tüm sorgulara ait tüm satırları içeren tek bir sonuç kümesinde birleştirir.

UNION Örneği:
SEÇ 121 AS [Sütun1], 221 AS [Sütun2]
BİRLİK
SEÇ 321 AS [Sütun1], 422 AS [Sütun2]
Çıktı:

Sütun1 Sütun2
-------------------
121221
321 422

JOIN'leri kullanma

JOINs, tablolar arasındaki mantıksal ilişkilere dayalı olarak iki veya daha fazla tablodan veri alabilirsiniz.

BİRLEŞTİR Örnek:
Sütun1, b Sütun2 SEÇİN TblA'DAN BİR İÇ KATILIN TblB b AÇIK a.Id = b.id


-1

Özetde, iki tablo veya sonuç kümesinin birleştirilmesinde benzerdirler, ancak UNION sonuç kümelerini AYNI SÜTUN SAYISI ile BENZER VERİ TÜRLERİNE SAHİP KOLONLAR ile birleştirmek içindir. YAPI aynıdır, yalnızca yeni satırlar eklenir.

Birleştirmelerde, tabloları / sonuç kümelerini, paylaşılan / benzer sütunların YOK olduğu kartezyen birleştirme de dahil olmak üzere olası herhangi bir yapı ile birleştirebilirsiniz.


-1

UNION operatörü yalnızca iki veya daha fazla SELECT ifadesini birleştirmek içindir.

JOIN her tablodan satırları iç, dış, sol veya sağ yöntemle seçmek içindir.

Buraya ve buraya bakın . Örneklerle daha iyi bir açıklama var.


-1

Birlik İşlemi satırların Dikey Toplamı, Birleşik Birlik İşlemi Sütunların Yatay Toplamı sonucudur .


-3

Genel farkı şöyle düşünüyorum:

  • JOINS masalara katıl
  • UNION (et all) sorguları birleştirir.

1
Bu, “birleştirme” anlamında birleşimden bahsedilir ve açıklanamayan “birleştirmeler” açısından birlikten bahsedilir. Her neyse, bu "faydalı" yapan diğer yüksek oy alan 10 yaşındaki cevapların ötesine ne ekleyeceğinizi düşünüyorsunuz? (Retorik.) Oylama oku fareyle üzerine gelme metnine bakın.
philipxy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.