0Pricing
Coding Interview Prep · Pelajaran

CROSS JOIN dan Produk Kartesius

Gunakan CROSS JOIN secara sengaja untuk membuat kombinasi dan hindari CROSS JOIN tidak sengaja yang melipatgandakan jumlah baris.

CROSS JOIN dan Produk Kartesius adalah pelajaran Coding Interview Prep 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Penggabungan yang Digunakan Pewawancara untuk Menjebak Anda

Sebuah CROSS JOIN memasangkan setiap baris tabel kiri dengan setiap baris tabel kanan. Tidak ada kondisi ON. Jika tabel A memiliki 4 baris dan tabel B memiliki 3 baris, hasilnya memiliki 4 x 3 = 12 baris.

Ini disebut produk Kartesius. Pewawancara menanyakannya karena dua alasan: untuk menguji apakah Anda dapat menghasilkan kombinasi dengan sengaja, dan untuk melihat apakah Anda mengenali penggabungan silang yang tidak disengaja yang membuat kumpulan hasil membengkak.

Sintaks CROSS JOIN Eksplisit

Cara modern dan mudah dibaca untuk menuliskan hasil kali Kartesius adalah menggunakan kata kunci CROSS JOIN secara eksplisit. Perhatikan bahwa tidak ada klausa ON, yang dengan jelas menyampaikan maksud kepada peninjau.

Di sini, kita memasangkan setiap ukuran dengan setiap warna untuk membangun matriks produk lengkap.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

Sintaks Koma Lama

Anda masih akan melihat hasil kali Kartesius ditulis menggunakan koma dalam klausa FROM tanpa kondisi penggabungan. Ini adalah sintaks ANSI lama.

Sintaks ini menghasilkan hasil yang sama persis dengan CROSS JOIN, tetapi berbahaya: jika Anda bermaksud menambahkan kondisi penggabungan tetapi lupa, Anda diam-diam mendapatkan penggabungan silang, bukan kesalahan. Lebih baik gunakan CROSS JOIN secara eksplisit.

-- Same result as CROSS JOIN, but easy to write by accident
SELECT s.size, c.color
FROM sizes s, colors c;

Contoh Praktis: Membangun Tabel Ukuran

Misalkan sebuah toko menjual kaus dalam 3 ukuran dan 4 warna serta menginginkan satu baris untuk setiap varian yang mungkin, termasuk yang belum tersedia di stok. Penggabungan silang menghasilkan 12 kombinasi dalam satu langkah.

Ini adalah penggunaan yang paling umum dan disengaja: menghasilkan kisi opsi lengkap.

SELECT s.size, c.color, 0 AS stock_qty
FROM sizes s
CROSS JOIN colors c
ORDER BY s.size, c.color;

Membuat Kisi Kalender

Penggunaan klasik lain dalam wawancara teknis untuk CROSS JOIN adalah membangun kisi padat agar setiap kombinasi tetap ada meskipun data tidak tersedia.

Di sini, kita menggabungkan silang setiap toko dengan setiap tanggal sehingga LEFT JOIN berikutnya ke data penjualan menghasilkan satu baris per toko per hari, dengan celah diisi nol. Penggabungan silang menjamin tidak ada hari-toko yang terlewat.

SELECT st.store_id, d.day
FROM stores st
CROSS JOIN calendar d
WHERE d.day BETWEEN DATE '2024-01-01' AND DATE '2024-01-31';

Ledakan Kartesius yang Tidak Disengaja

Bahaya yang sering diuji pewawancara: Anda menggabungkan dua tabel tetapi lupa kondisi penggabungannya. Alih-alih menghasilkan kesalahan, basis data dengan senang hati mengembalikan setiap kombinasi.

Jika orders memiliki 100.000 baris dan customers memiliki 50.000 baris, hasilnya adalah 5 miliar baris. Kueri menggantung, memori habis, dan angka tampak sangat membengkak. Mengenali pola ini dalam peninjauan kode merupakan pertanda baik.

-- BUG: no join condition between the two tables
SELECT o.order_id, c.name
FROM orders o, customers c;
-- returns COUNT(orders) * COUNT(customers) rows

Cara Mengenali Penggabungan Silang yang Tidak Disengaja

Gejala yang ingin Anda sebutkan saat wawancara:

  • Jumlah baris kira-kira merupakan hasil kali ukuran kedua tabel, bukan jumlahnya.
  • Agregat seperti SUM membesar dengan kelipatan konstan.
  • Rencana kueri menampilkan Perulangan Bertingkat tanpa penyaring penggabungan.

Perbaikannya hampir selalu berupa kesetaraan ON atau WHERE yang hilang di antara kedua tabel.

CROSS JOIN vs INNER JOIN dengan ON yang Selalu Benar

Sebuah CROSS JOIN secara logis identik dengan INNER JOIN ... ON 1=1. Keduanya menghasilkan hasil kali Kartesius lengkap.

Faktanya, penggabungan dalam hanyalah penggabungan silang yang diikuti penyaringan berdasarkan kondisi ON. Model mental ini menjelaskan mengapa kondisi yang hilang mengubah penggabungan dalam menjadi penggabungan silang.

-- These two queries return identical results
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b ON 1 = 1;

Penggabungan Silang dengan Tabel Angka

Trik yang ampuh: lakukan penggabungan silang dengan tabel kecil numbers atau generate_series untuk sengaja menggandakan baris. Ini digunakan untuk memperluas satu baris menjadi banyak baris, misalnya mengubah kuantitas menjadi baris untuk setiap unit.

Di sini, setiap baris produk diulang sebanyak qty kali dengan menggabungkannya ke suatu deret dan mempertahankan angka hingga kuantitas tersebut.

SELECT p.product_id, n.n AS unit_number
FROM products p
CROSS JOIN generate_series(1, 100) AS n(n)
WHERE n.n <= p.qty;

Kinerja dan Praktik Aman

Karena keluaran bertumbuh secara perkalian, jangan pernah melakukan penggabungan silang pada dua tabel besar. Pastikan setidaknya satu sisi berukuran sangat kecil (daftar ukuran, kalender kecil, tabel angka).

Dalam wawancara, nyatakan secara eksplisit: 'CROSS JOIN hanya aman jika salah satu sisinya kecil dan memiliki batas; jika tidak, hasilnya tidak dapat dikelola.' Kalimat itu menunjukkan pertimbangan yang baik, bukan sekadar pengetahuan sintaks.

Kapan Menggunakan CROSS JOIN

Gunakan CROSS JOIN secara sengaja ketika Anda memerlukan setiap kombinasi dari dua himpunan:

  • Membuat matriks opsi (ukuran x warna).
  • Memadatkan deret waktu (toko x hari) sebelum LEFT JOIN.
  • Memperluas baris melalui tabel angka.

Jika Anda tidak menginginkan setiap kombinasi, hampir pasti Anda memerlukan penggabungan dengan kondisi ON.

Pemeriksaan Singkat

Uji pemahaman Anda tentang hasil kali Kartesius.

Ringkasan: CROSS JOIN

Poin utama:

  • Sebuah CROSS JOIN memasangkan setiap baris kiri dengan setiap baris kanan; ukuran keluaran adalah hasil kali input.
  • Sintaks koma tanpa kondisi menghasilkan hasil kali Kartesius yang sama, sering kali secara tidak sengaja.
  • Gunakan secara sengaja untuk kisi kombinasi, pemadatan deret waktu, dan perluasan baris melalui tabel angka.
  • Penggabungan dalam dengan ON yang hilang diam-diam berubah menjadi penggabungan silang, bug ledakan yang sangat disukai pewawancara.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “CROSS JOIN dan Produk Kartesius” gratis?

Ya — teks lengkap “CROSS JOIN dan Produk Kartesius” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “CROSS JOIN dan Produk Kartesius”?

Gunakan CROSS JOIN secara sengaja untuk membuat kombinasi dan hindari CROSS JOIN tidak sengaja yang melipatgandakan jumlah baris. Kamu berlatih Coding Interview Prep 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 Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep 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 Produk 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 Coding Interview Prep ini?

Ya. Setiap pelajaran Coding Interview Prep 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

  1. CROSS JOIN dan Produk Kartesius
  2. SELF JOIN untuk Hierarki
  3. Membandingkan Baris dalam Satu Tabel
  4. Memilih Jenis JOIN yang Tepat
← Kembali ke Coding Interview Prep