SQL Server'da CROSS JOIN ve FULL OUTER JOIN arasındaki fark nedir?
Aynı mı, değil mi? Lütfen açıkla. Bunlardan herhangi biri ne zaman kullanılır?
SQL Server'da CROSS JOIN ve FULL OUTER JOIN arasındaki fark nedir?
Aynı mı, değil mi? Lütfen açıkla. Bunlardan herhangi biri ne zaman kullanılır?
Yanıtlar:
Çapraz birleştirme, iki tablo arasında kartezyen bir ürün üretir ve tüm satırların tüm olası kombinasyonlarını döndürür. Hiçbir on
hükmü yok çünkü her şeyi her şeye katıyorsunuz.
A full outer join
, left outer
ve right outer
birleşiminin birleşimidir. Her iki tabloda da sorgunun where
yan tümcesiyle eşleşen tüm satırları döndürür ve on
koşulun bu satırlar için karşılanamadığı durumlarda null
, doldurulmamış alanlar için değerler koyar .
Bu wikipedia makalesi, çeşitli tablo türlerini verilen çıktı örnekleri ile çeşitli birleştirme türlerini açıklamaktadır.
outer join
hızlı veya cross join
?
Bazıları için her zaman açık olmayan bir şey, boş bir tabloyla (veya sonuç kümesiyle) çapraz birleşimin boş tabloyla sonuçlanmasıdır (M x N; dolayısıyla M x 0 = 0)
Hem M hem de N 0 olmadığı sürece, tam bir dış birleşimde her zaman satır bulunur.
Bu konuyu bana en iyi şekilde açıklayan diğer cevaplara önemli bir yön eklemek istiyorum:
Birleştirilmiş 2 tablo M ve N satır içeriyorsa, çapraz birleşim her zaman (M x N) satır üretir, ancak tam dış birleşim MAX (M, N) ila (M + N) satırları üretir (gerçekte kaç satır olduğuna bağlı olarak) yüklem "açık" yüklem).
DÜZENLE:
Mantıksal sorgu işleme açısından, CROSS JOIN aslında her zaman M x N satırları üretir. FULL OUTER JOIN ile olan şey, hem sol hem de sağ tabloların, hem SOL hem de SAĞ birleşim varmış gibi "korunduğu" şeklindedir. Sonuç kümesine hem sol hem de sağ tablolardan AÇIK yüklemesini karşılamayan satırlar eklenir.
cross join
tabloları katlar; a full outer join
, kaç satırın eşleştiğine bağlı olarak onları en kötü durumda ekler ..
Çapraz birleştirme: Çapraz Birleştirmeler, iki veya daha fazla tablodaki her satır kombinasyonundan oluşan sonuçlar üretir. Bu, tablo A'da 3 satır ve tablo B'de 2 satır varsa, bir CROSS JOIN 6 satır ile sonuçlanacağı anlamına gelir. İki tablo arasında herhangi bir ilişki yoktur - kelimenin tam anlamıyla olası her birleşimi üretersiniz.
Tam dış birleşim: TAM DIŞ BİRLEŞME ne "sol" ne de "sağ" değildir - her ikisi de! JOIN'a katılan tabloların veya sonuç kümelerinin tüm satırlarını içerir. JOIN "sol" tarafında satırlar için eşleşen satır yoksa, "sağ" sonuç kümesinde Null değerleri görürsünüz. Tersine, JOIN "sağ" tarafında satırlar için eşleşen satır yoksa, "sol" sonuç kümesinden Null değerleri görürsünüz.
SQL Server CROSS JOIN and FULL OUTER JOIN
için farklıdır.
CROSS JOIN
filtre kriterlerinden veya koşullarından bağımsız olarak iki tablonun Kartezyen Ürünüdür.
FULL OUTER JOIN
LEFT OUTER JOIN and RIGHT OUTER JOIN
iki tablonun benzersiz sonuç kümesini verir . Tabloların iki sütununu eşlemek için de ON yan tümcesi gerekir.
Tablo 1, 10 satır ve Tablo 2, belirli sütunlarla eşleşen 5 satır içeren 20 satır içerir.
Sonra
CROSS JOIN
sonuç kümesinde 10 * 20 = 200 satır döndürür.
FULL OUTER JOIN
sonuç kümesinde 25 satır döndürür.
FULL OUTER JOIN
(veya başka bir JOIN) daima sonuç kümesinden küçük veya ona eşit bir sonuç kümesi döndürürCartesian Product number
.(Sıradaki Satır Sayısı ) + (Sıradaki Satır Sayısı ) - ( Sıradaki Satır Sayısı)
FULL OUTER JOIN
değerine eşit olarak döndürülen satır sayısı .LEFT OUTER JOIN
RIGHT OUTER JOIN
INNER JOIN
Döndürülen NULL değeri dışında aynı kavramlardır.
Aşağıya bakınız:
declare @table1 table( col1 int, col2 int );
insert into @table1 select 1, 11 union all select 2, 22;
declare @table2 table ( col1 int, col2 int );
insert into @table2 select 10, 101 union all select 2, 202;
select
t1.*,
t2.*
from @table1 t1
full outer join @table2 t2 on t1.col1 = t2.col1
order by t1.col1, t2.col1;
/* full outer join
col1 col2 col1 col2
----------- ----------- ----------- -----------
NULL NULL 10 101
1 11 NULL NULL
2 22 2 202
*/
select
t1.*,
t2.*
from @table1 t1
cross join @table2 t2
order by t1.col1, t2.col1;
/* cross join
col1 col2 col1 col2
----------- ----------- ----------- -----------
1 11 2 202
1 11 10 101
2 22 2 202
2 22 10 101
*/
Çapraz Katılım : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; 2 tablo arasında olası tüm kombinasyonları üretir (Carthesian ürün)
(Tam) Dış Katılma : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Her iki tabloda da her satırı ve aynı değerlere sahip sonuçları döndürür (CONDITION ile eşleşir)
Tam bir dış birleşim sol dış birleşimi ve sağ dış birleşimi birleştirir. Sonuç kümesi, koşulların karşılandığı her iki tablodaki satırları döndürür, ancak eşleşmenin olmadığı boş sütunları döndürür.
Çapraz birleştirme, tablolara katılmak için herhangi bir koşul gerektirmeyen Kartezyen bir üründür . Sonuç kümesi, her iki tablonun çarpımı olan satır ve sütunlar içerir.
Hem FULL OUTER JOIN hem de CROSS JOIN'in NULL döndürülmeden aynı sonuç kümesini döndürdüğü bir örnek. Lütfen FULL OUTER JOIN için ON yan tümcesinde 1 = 1'e dikkat edin:
declare @table1 table ( col1 int, col2 int )
declare @table2 table ( col1 int, col2 int )
insert into @table1 select 1, 11 union all select 2, 22
insert into @table2 select 10, 101 union all select 2, 202
select *
from @table1 t1 full outer join @table2 t2
on 1 = 1
(2 satır etkilendi) (2 satır etkilendi) col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10101 1 11 2220 2 22 2220
select *
from @table1 t1 cross join @table2 t2
col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10101 1 11 2220 2 22 2220 (4 satır etkilendi)
SQL TAM DIŞ KATILIM
FULL OUTER JOIN, maçtan bağımsız olarak soldaki tablodan (tablo1) ve sağ tablodan (tablo2) tüm satırları döndürür.
FULL OUTER JOIN anahtar kelimesi, LEFT OUTER JOIN ve RIGHT OUTER JOIN öğelerinin sonuçlarını birleştirir
Referans: http://datasciencemadesimple.com/sql-full-outer-join/
SQL ÇAPRAZ KATILIM
SQL CROSS JOIN'da İlk tablonun her satırı, ikinci tablonun her bir satırıyla eşlenir.
Bir sonuç CROSS JOIN işlemi kümesi tarafından üretilen satır sayısı, ilk tablodaki satır sayısıyla ikinci tablodaki satır sayısıyla çarpılır.
CROSS JOIN, Kartezyen ürün / Kartezyen birleşim olarak da bilinir
Tablo A'daki satır sayısı m, Tablo B'deki satır sayısı n ve sonuçtaki tabloda m * n satır olacaktır
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
zaman büyük tablolar durumunda her zaman daha hızlı olacakFROM t1,t2 WHERE t1.id=t2.id
?