CROSS JOIN dan Hasil Kali Kartesius
Gunakan CROSS JOIN secara sengaja untuk memasangkan kombinasi, dan hindari ledakan Kartesius akibat kunci penggabungan yang hilang.
CROSS JOIN dan Hasil Kali Kartesius adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Cross Join?
CROSS JOIN menghasilkan setiap kombinasi baris: m × n baris keluaran. Tidak ada klausa ON.
SELECT * FROM a CROSS JOIN b;
-- Equivalent:
SELECT * FROM a, b; -- comma join, no conditionProduk Kartesius yang Tidak Disengaja
Kesalahan klasik: lupa kondisi JOIN sehingga setiap baris A dipasangkan dengan setiap baris B.
SELECT u.email, o.id
FROM users u, orders o; -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!Kasus Penggunaan yang Disengaja
CROSS JOIN berguna ketika Anda memang menginginkan semua pasangan:
- Kombinasi kategori × periode waktu untuk laporan dengan wadah kosong
- Data pengujian: setiap pengguna × setiap produk
- Kalender: setiap toko × setiap tanggal
Contoh Kalender × Toko
Isi hari dengan nilai nol untuk setiap toko:
SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;Produk Kartesius dan EXPLAIN
Produk kartesius yang tidak disengaja muncul sebagai jumlah baris yang sangat besar dalam EXPLAIN ANALYZE:
EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop (rows=10000000) ← warning signLATERAL: Cross Join Bersyarat
LATERAL JOIN mirip CROSS JOIN, tetapi sisi kanan dapat merujuk ke sisi kiri — hal ini dibahas dalam pelajaran berikutnya.
Permutasi dan Kombinasi
Untuk pasangan (A,B) tanpa duplikat, tambahkan perbandingan dalam ON:
SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)CROSS JOIN dengan VALUES
Sisipkan himpunan kecil secara langsung:
SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);Menghindari Sintaks Join dengan Koma
Join implisit dengan koma (FROM a, b) memang sah, tetapi menyamarkan maksud. Sebaiknya gunakan CROSS JOIN secara eksplisit:
-- Don't (looks like a typo):
FROM users, orders
-- Do:
FROM users CROSS JOIN ordersKinerja
CROSS JOIN itu sendiri murah — tidak ada kondisi yang perlu dievaluasi. Biayanya terletak pada jumlah baris keluaran: 10k × 10k = 100M baris.
Ringkasan
CROSS JOIN = semua pasangan.
- Gunakan dengan sengaja untuk membuat kombinasi
- Waspadai produk kartesius yang tidak disengaja (WHERE tidak ada)
- Gabungkan dengan generate_series untuk laporan pengisian celah
Pemeriksaan Singkat
Anda menulis SELECT * FROM users u, orders o; tanpa WHERE. Apa keluarannya?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “CROSS JOIN dan Hasil Kali Kartesius” gratis?
Ya — teks lengkap “CROSS JOIN dan Hasil Kali Kartesius” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “CROSS JOIN dan Hasil Kali Kartesius”?
Gunakan CROSS JOIN secara sengaja untuk memasangkan kombinasi, dan hindari ledakan Kartesius akibat kunci penggabungan yang hilang. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “CROSS JOIN dan Hasil Kali Kartesius” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- CROSS JOIN dan Hasil Kali Kartesius
- Lateral Join (LATERAL JOIN)
- Anti-Join dan Semi-Join (NOT EXISTS)
- Penyetelan Kinerja Join Multi-Tabel