Penjelasan sederhana
CROSS JOIN memasangkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua, tanpa syarat apa pun. Kalau ada 4 baris dan 2 baris, hasilnya 4 × 2 = 8 baris.
Bayangkan menu kopi: 4 jenis minuman dan 2 ukuran. CROSS JOIN membuat daftar semua kombinasi yang mungkin. Ini berguna untuk membuat kerangka laporan, misalnya semua cabang × semua bulan, sebelum diisi angka.
Sintaks
SELECT a.kolom, b.kolom
FROM tabel_a AS a
CROSS JOIN tabel_b AS b;
| Bagian | Keterangan |
|---|---|
tanpa ON | Tidak ada syarat pasangan. Jumlah hasil = baris A x baris B. |
Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.
Contoh CROSS JOIN
Data contoh: departemen
Tabel departemen
| id | nama_dept | lokasi |
|---|---|---|
| 1 | Keuangan | Jakarta |
| 2 | Marketing | Jakarta |
| 3 | IT | Bandung |
| 4 | Legal | Surabaya |
SELECT d.nama_dept, b.bulan
FROM departemen AS d
CROSS JOIN (SELECT 'Jan' AS bulan UNION ALL SELECT 'Feb') AS b
ORDER BY d.id;
Hasil 8 baris
| nama_dept | bulan |
|---|---|
| Keuangan | Jan |
| Keuangan | Feb |
| Marketing | Jan |
| Marketing | Feb |
| IT | Jan |
| IT | Feb |
| Legal | Jan |
| Legal | Feb |
4 departemen x 2 bulan = 8 baris. Berguna untuk membuat kerangka laporan sebelum diisi data.
Cara kerjanya, langkah demi langkah
- Query kecil di dalam kurung membuat tabel sementara berisi 2 bulan: Jan dan Feb.
FROM departemen AS d CROSS JOIN (...) AS b: setiap departemen dipasangkan dengan kedua bulan.- 4 departemen × 2 bulan = 8 baris: Keuangan-Jan, Keuangan-Feb, Marketing-Jan, dan seterusnya.
ORDER BY d.id: diurutkan sesuai nomor departemen.
Dipakai untuk apa di kantor?
- Membuat kerangka laporan bulanan supaya bulan tanpa transaksi tetap tampil dengan nilai 0.
- Membuat semua kombinasi ukuran dan warna produk.
Kesalahan yang sering terjadi
- Melakukan CROSS JOIN tanpa sengaja karena lupa menulis
ONdi JOIN biasa. Dua tabel berisi 10.000 baris bisa menghasilkan 100 juta baris.
UNION