Apa perbedaan antara CROSS JOIN dan FULL OUTER JOIN di SQL Server?
Apakah mereka sama, atau tidak? Tolong jelaskan. Kapan seseorang akan menggunakan salah satu dari ini?
Apa perbedaan antara CROSS JOIN dan FULL OUTER JOIN di SQL Server?
Apakah mereka sama, atau tidak? Tolong jelaskan. Kapan seseorang akan menggunakan salah satu dari ini?
Jawaban:
Gabung silang menghasilkan produk kartesius di antara kedua tabel, mengembalikan semua kemungkinan kombinasi dari semua baris. Tidak adaon
klausa karena Anda hanya menggabungkan segalanya untuk segalanya.
A full outer join
adalah kombinasi dari a left outer
dan right outer
gabung. Ini mengembalikan semua baris di kedua tabel yang cocok dengan where
klausa kueri , dan dalam kasus di mana on
kondisi tidak dapat dipenuhi untuk baris yang diletakkannyanull
nilai dalam bidang yang tidak dihuni.
Ini wikipedia artikel menjelaskan berbagai jenis bergabung dengan contoh-contoh output diberikan satu set sampel tabel.
outer join
cepat atau lebih cross join
?
Satu hal yang mungkin tidak selalu jelas bagi sebagian orang adalah bahwa gabungan silang dengan tabel kosong (atau set hasil) menghasilkan tabel kosong (M x N; maka M x 0 = 0)
Gabungan luar penuh akan selalu memiliki baris kecuali jika M dan N adalah 0.
Saya ingin menambahkan satu aspek penting ke jawaban lain, yang sebenarnya menjelaskan topik ini kepada saya dengan cara terbaik:
Jika 2 tabel gabungan berisi baris M dan N, maka join silang akan selalu menghasilkan baris (M x N), tetapi join luar penuh akan menghasilkan dari baris MAX (M, N) hingga (M + N) (tergantung pada berapa banyak baris yang sebenarnya cocok dengan predikat "on").
EDIT:
Dari perspektif pemrosesan query logis, CROSS JOIN memang selalu menghasilkan baris M x N. Apa yang terjadi dengan FULL OUTER JOIN adalah bahwa tabel kiri dan kanan "dipertahankan", seolah-olah gabungan KIRI dan KANAN terjadi. Jadi baris, tidak memuaskan predikat ON, dari tabel kiri dan kanan ditambahkan ke set hasil.
cross join
mengalikan tabel; a full outer join
menambahkan mereka dalam kasus terburuk, tergantung pada berapa banyak baris yang cocok ..
Cross join: Cross Joins menghasilkan hasil yang terdiri dari setiap kombinasi baris dari dua tabel atau lebih. Itu berarti jika tabel A memiliki 3 baris dan tabel B memiliki 2 baris, CROSS JOIN akan menghasilkan 6 baris. Tidak ada hubungan yang dibangun antara dua tabel - Anda benar-benar hanya menghasilkan setiap kombinasi yang mungkin.
Full outer Join: A FULL OUTER JOIN bukan "kiri" atau "kanan" - keduanya! Ini termasuk semua baris dari kedua tabel atau set hasil yang berpartisipasi dalam GABUNG. Saat tidak ada baris yang cocok untuk baris di sisi "kiri" dari JOIN, Anda melihat nilai Null dari hasil yang ditetapkan di "kanan." Sebaliknya, ketika tidak ada baris yang cocok untuk baris di sisi "kanan" dari JOIN, Anda melihat nilai Null dari hasil yang ditetapkan di "kiri."
Untuk SQL Server, CROSS JOIN and FULL OUTER JOIN
berbeda.
CROSS JOIN
hanyalah Produk Cartesian dari dua tabel, terlepas dari kriteria filter apa pun atau kondisi apa pun.
FULL OUTER JOIN
memberikan hasil yang unik LEFT OUTER JOIN and RIGHT OUTER JOIN
dari dua tabel. Ini juga membutuhkan klausa ON untuk memetakan dua kolom tabel.
Tabel 1 berisi 10 baris dan Tabel 2 berisi 20 baris dengan 5 baris yang cocok pada kolom tertentu.
Kemudian
CROSS JOIN
akan mengembalikan 10 * 20 = 200 baris dalam hasil yang ditetapkan.
FULL OUTER JOIN
akan mengembalikan 25 baris dalam hasil yang ditetapkan.
FULL OUTER JOIN
(atau GABUNGAN lainnya) selalu mengembalikan hasil yang disetel dengan kurang dari atau sama denganCartesian Product number
.Jumlah baris yang dikembalikan
FULL OUTER JOIN
sama dengan (Jumlah Baris perLEFT OUTER JOIN
) + (Jumlah Baris perRIGHT OUTER JOIN
) - (Jumlah Baris perINNER JOIN
).
Mereka adalah konsep yang sama, terlepas dari nilai NULL yang dikembalikan.
Lihat di bawah:
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
*/
Cross Join : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Menghasilkan semua kemungkinan kombinasi antara 2 tabel (produk Carthesian)
(Lengkap) Outer Bergabung : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Mengembalikan setiap baris di kedua tabel dan juga hasil yang memiliki nilai yang sama (cocok dalam KONDISI)
Gabungan luar penuh menggabungkan gabungan luar kiri dan gabungan luar kanan. Set hasil mengembalikan baris dari kedua tabel di mana kondisi terpenuhi tetapi mengembalikan kolom nol di mana tidak ada kecocokan.
Cross join adalah produk Cartesian yang tidak memerlukan persyaratan apa pun untuk bergabung dengan tabel. Set hasil berisi baris dan kolom yang merupakan perkalian dari kedua tabel.
Berikut adalah contoh di mana FULL OUTER JOIN dan CROSS JOIN mengembalikan hasil yang sama tanpa NULL. Harap perhatikan 1 = 1 pada klausa ON untuk FULL OUTER JOIN:
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 baris terpengaruh) (2 baris terpengaruh) col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10 101 1 11 2 202 2 22 2 202
select *
from @table1 t1 cross join @table2 t2
col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10 101 1 11 2 202 2 22 2 202 (4 baris terpengaruh)
SQL FULL OUTER BERGABUNG
FULL OUTER JOIN mengembalikan semua baris dari tabel kiri (table1) dan dari tabel kanan (table2) terlepas dari pertandingan.
Kata kunci FULL OUTER JOIN menggabungkan hasil dari kedua LEFT OUTER JOIN dan RIGHT OUTER JOIN
Referensi: http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS BERGABUNG
Dalam SQL CROSS JOIN Setiap baris dari tabel pertama dipetakan dengan masing-masing dan setiap baris dari tabel kedua.
Jumlah baris yang dihasilkan oleh himpunan hasil operasi CROSS JOIN sama dengan jumlah baris di tabel pertama dikalikan dengan jumlah baris di tabel kedua.
CROSS JOIN juga dikenal sebagai produk Cartesian / Cartesian join
Jumlah baris dalam tabel A adalah m, Jumlah baris dalam tabel B adalah n dan tabel yang dihasilkan akan memiliki m * n baris
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
akan selalu lebih cepat daripadaFROM t1,t2 WHERE t1.id=t2.id
?