Kekuatan relational database ada pada kemampuan merangkai data yang terpisah di banyak tabel. Section ini membedah setiap jenis join dengan tabel contoh kecil supaya kita bisa melihat persis baris mana yang lolos dan baris mana yang hilang di setiap tipe join.
Mengapa data database relasional dipecah ke banyak tabel, bagaimana relasi satu-ke-banyak dibangun lewat foreign key pada kolom kunci, serta cara menggabungkan kembali data terpisah dari dua tabel sebelum mengenal JOIN.
Buka → # INNER JOINBedah INNER JOIN di MySQL: menggabungkan pelanggan dan pesanan lewat klausa ON, memakai alias tabel pendek, membuktikan bahwa baris tanpa pasangan tidak ikut tampil, varian USING untuk kolom bernama sama, serta kombinasi JOIN dengan WHERE dan ORDER BY.
Buka → # LEFT JOINBedah LEFT JOIN di MySQL: mempertahankan seluruh baris sisi kiri dengan pengisi NULL untuk baris tanpa pasangan, pola anti-join LEFT JOIN + IS NULL untuk mencari pelanggan yang belum pernah memesan, serta jebakan COUNT(*) versus COUNT kolom kanan saat menghitung pesanan per pelanggan.
Buka → # RIGHT JOINBedah RIGHT JOIN di MySQL: mempertahankan seluruh baris sisi kanan dengan pengisi NULL di sisi kiri, mengapa desain foreign key membuat hasilnya bisa terlihat sama dengan INNER JOIN, serta kebiasaan menulis ulang RIGHT JOIN sebagai LEFT JOIN terbalik demi portabilitas.
Buka → # CROSS JOINBedah CROSS JOIN di MySQL: hasil perkalian Cartesian baris a×b, perbandingan sintaks CROSS JOIN eksplisit dengan koma lama, kombinasi ukuran×warna produk sebagai kasus nyata, bahaya lupa klausa ON yang diam-diam memicu Cartesian product, serta penyaringan hasil dengan WHERE.
Buka → # SELF JOINBedah self join di MySQL: meng-join satu tabel dengan dirinya sendiri memakai dua alias — pegawai dipasangkan dengan manajernya lewat kolom manajer_id, pegawai ber-induk NULL ditangani LEFT JOIN, serta pola rekan satu atasan dengan kondisi tambahan di ON.
Buka → # Multiple JoinsBedah join bertingkat tiga tabel di MySQL: merangkai pelanggan, pesanan, dan detail pesanan dalam satu query, membuktikan urutan join bebas asalkan rantai kunci tersambung, lalu menggabungkan tiga tabel dengan agregat SUM dan COUNT(DISTINCT) per pelanggan.
Buka → # JOIN dengan KondisiBedah kondisi tambahan pada klausa ON join MySQL: memfilter pesanan langsung dari ON, perbedaan mendasar kondisi di ON versus WHERE pada LEFT JOIN yang bisa diam-diam merosot menjadi INNER JOIN, serta non-equi join dengan kondisi pertidaksamaan seperti total pesanan terhadap syarat promo.
Buka → # Menghindari Duplikasi Hasil JOINBedah duplikasi baris hasil join 1-N di MySQL: satu pelanggan tiga pesanan menjadi tiga baris, jebakan klasik SUM yang melonjong saat pesanan digandakan detailnya, solusi agregat di subquery sebelum join, penggunaan DISTINCT yang sah dan yang menutup masalah, serta teaser EXISTS dari section subqueries.
Buka →