Masalah:
Anda ingin mendapatkan semua kombinasi baris dari dua tabel di SQL.
Contoh:
Berikut adalah dua tabel:satu berisi huruf (letters
), dan yang lainnya berisi angka (numbers
):
surat |
---|
X |
Y |
angka |
---|
0 |
1 |
2 |
Solusi 1:
Untuk menggabungkan setiap baris letters
tabel dengan setiap baris numbers
tabel, kita akan menggunakan CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Hasil querynya seperti ini:
surat | angka |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Solusi 2:
Cara lain untuk melakukan CROSS JOIN adalah sebagai berikut:
SELECT * FROM letters, numbers;
Ini akan mendapatkan hasil yang sama persis yang dihasilkan oleh kueri sebelumnya.
Diskusi:
Sebagai aturan umum, CROSS JOIN
menghasilkan himpunan hasil di mana setiap baris dari satu tabel digabungkan ke setiap baris tabel lain. Dengan kata lain, jika tabel pertama menyimpan n baris dan tabel kedua menyimpan m baris, lalu CROSS JOIN
akan menghasilkan produk Cartesian dari n × m baris. Inilah sebabnya mengapa ada enam baris yang dikembalikan oleh kueri dalam contoh di atas.
Karena CROSS JOIN
menghasilkan semua kemungkinan kombinasi baris di antara tabel yang digabungkan, tidak perlu menentukan hubungan. Jadi, tidak seperti JOINs
lainnya , tidak ada ON
klausa dalam CROSS JOIN
.