SQL Server: CROSS JOIN ve FULL OUTER JOIN arasındaki fark nedir?


Yanıtlar:


243

Ç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 onhükmü yok çünkü her şeyi her şeye katıyorsunuz.

A full outer join, left outerve right outerbirleşiminin birleşimidir. Her iki tabloda da sorgunun whereyan tümcesiyle eşleşen tüm satırları döndürür ve onkoş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.


O FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id zaman büyük tablolar durumunda her zaman daha hızlı olacak FROM t1,t2 WHERE t1.id=t2.id?
alexkovelsky

@alexkovelsky iç birleşimleri, iki tablo arasında çok az eşleşme olduğunda genellikle daha hızlıdır, çünkü dizinlerin kullanımı tablolardan birindeki tüm satırları okumayı zahmet etmeyeceği anlamına gelir. tam bir dış birleşim her zaman her iki tabloda (veya ilgili dizinlerde) tüm satırları okumalıdır. Dizinlerin yeterli olmadığı veya gerekli sütunların çıktısını almak için altta yatan bir öbek okunması durumunda, tam bir dış birleşim neredeyse her zaman bir iç birleşimden daha yavaş olacaktır.
Andrew Hill

1
outer joinhızlı veya cross join?
Shafizadeh

2
@Shafizadeh - Farklı şeyler yapıyorlar.
Donnie

9
Tam olarak DOLU KATILIRsam ne olur? sonuç / performans CROSS JOIN'e benzeyecek mi?
architectonic

65

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.


32

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.


2
Bu sınırlar olası 1-çok maç hariç mi? Tam bir dış birleşim hala (M x N) sıralar üretebilir.
maxwellb

1
Trafikten COUNT_BIG (*) seçin t ÇAPRAZ KATILAN Alıcı r ve SEÇENEKLE COUNT_BIG (*) SEÇİN Trafikten TAM KATIL Alıcı r AÇIK (1 = 1) aynı.
urlreader

2
Seninki en iyi gerçek cevap. Temel olarak: cross jointabloları katlar; a full outer join, kaç satırın eşleştiğine bağlı olarak onları en kötü durumda ekler ..
Brian Peterson

Evet .. Bu matematiği arıyordum - MAX (M, N) 'den (M + N) sıralara kadar üretin .. Teşekkürler oy verdi.
Arup Rakshit

1
Bu yanlış. FULL JOIN ON satırları INNER JOIN satırları üzerinde UNION ALL eşleşmeyen sol tablo satırları null genişletilmiş UNION ALL eşleşmeyen sağ tablo satırları null genişletilmiş. Böylece FULL JOIN, M * N satırlarını döndürebilir - muhtemelen hem MAX (M, N) hem de M + N'den daha büyüktür. Ama yine de M & N'nin bir fonksiyonu olarak döndürülen minimum ve maksimum satır sayısı yararlı değildir . Faydalı olan , INNER JOIN ON ve eşsiz satırlar açısından FULL JOIN ON'un açık bir tanımıdır .
philipxy

15

Ç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.


15

SQL Server CROSS JOIN and FULL OUTER JOINiçin farklıdır. CROSS JOINfiltre kriterlerinden veya koşullarından bağımsız olarak iki tablonun Kartezyen Ürünüdür.

FULL OUTER JOINLEFT OUTER JOIN and RIGHT OUTER JOINiki 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 JOINsonuç 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ür Cartesian Product number.

(Sıradaki Satır Sayısı ) + (Sıradaki Satır Sayısı ) - ( Sıradaki Satır Sayısı) FULL OUTER JOINdeğerine eşit olarak döndürülen satır sayısı .LEFT OUTER JOINRIGHT OUTER JOININNER JOIN


8

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
*/

1
Mükemmel örnek!
Lucas925

1
gerçek veri örneği için teşekkürler. bu daha net hale getirir.
dtc


2

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.


1

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)

1

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

  • SQL tam dış birleşim FULL JOIN olarak da bilinir

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

Referans: http://datasciencemadesimple.com/sql-cross-join/

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.