Yanıtlar:
UNION
Sorgulardan gelen satırları birbiri ardına koyar, JOIN
kartezyen 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)
UNION-JOIN
ve standart SQL'de nasıl başarabilirim? Maria DB'nin bir komutu var union join
, ancak diğer veritabanları yok. Teşekkürler.
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.
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.
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.
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.AFKId
doğru olduğu her iki tablodaki tüm satırları çıktılar .
Her ikisi için de aynı şematik açıklamaları görebilirsiniz, ancak bunlar tamamen kafa karıştırıcı.
BİRLİĞİ için:
JOIN için:
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.
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
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.
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.
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
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;
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
Ö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.
Genel farkı şöyle düşünüyorum: