Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)
Pelajari INNER, LEFT, RIGHT, FULL, CROSS, dan SELF JOIN dengan dua tabel kecil, query yang jelas, dan hasil yang tepat.
- INNER JOIN: hanya baris yang cocok di kedua tabel.
- LEFT JOIN: semua baris kiri, plus yang cocok (NULL jika tidak ada).
- RIGHT JOIN: semua baris kanan, plus yang cocok.
- FULL JOIN: semua baris kedua tabel, dicocokkan bila memungkinkan.
- Join pada kunci, gunakan alias tabel, dan indeks kolom join.
Database sungguhan tidak menyimpan semuanya dalam satu tabel. Pelanggan ada di satu tabel dan pesanan di tabel lain. Untuk menjawab “pelanggan mana yang memesan bulan ini?”, keduanya harus digabung, dan itulah fungsi SQL JOIN.
Panduan ini bersifat praktis. JOIN membingungkan pemula karena dua tabel yang sama memberi hasil berbeda tergantung jenis join. Dengan data kecil yang konkret, semuanya menjadi mudah.
Penjelasan SQL JOIN: tabel contoh
customers
| id | name |
|---|---|
| 1 | Asha |
| 2 | Ben |
| 3 | Chitra |
orders
| id | customer_id | total |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 120 |
| 103 | 2 | 90 |
| 104 | 9 | 40 |
Chitra tidak punya pesanan, dan pesanan 104 menunjuk ke pelanggan (9) yang tidak ada. Dua kasus tepi ini memperlihatkan perbedaan jenis join.
INNER JOIN
INNER JOIN hanya mengembalikan baris yang kondisinya terpenuhi di kedua tabel. Baris tanpa pasangan dibuang.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
Hasil: Asha (101), Asha (102), Ben (103). Chitra dan pesanan 104 tidak muncul. Gunakan saat Anda hanya peduli pada data yang berhubungan, seperti pesanan beserta detail pelanggannya. Menulis JOIN saja berarti INNER JOIN.
LEFT JOIN
LEFT JOIN mempertahankan semua baris tabel kiri dan menambahkan baris yang cocok dari kanan. Bila tidak cocok, kolom kanan bernilai NULL.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
Hasil: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Sekarang Chitra muncul.
Tips singkat: untuk menemukan pelanggan yang tidak pernah memesan, saring NULL di sisi kanan: WHERE o.id IS NULL mengembalikan Chitra. Penguji memakainya untuk menemukan data yatim atau hilang.
RIGHT JOIN dan FULL JOIN
RIGHT JOIN adalah cermin LEFT JOIN dan mempertahankan semua baris tabel kanan. Kebanyakan orang menukar urutan tabel dan memakai LEFT JOIN karena lebih natural dibaca.
SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;
Hasilnya menyertakan pesanan 104 dengan nama pelanggan NULL. FULL (OUTER) JOIN mengembalikan semua baris kedua tabel: Chitra tanpa pesanan dan pesanan 104 tanpa pelanggan.
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;
PostgreSQL dan SQL Server mendukungnya. MySQL tidak; gabungkan LEFT JOIN dan RIGHT JOIN dengan UNION. Untuk bacaan lanjut, manual PostgreSQL memiliki tutorial join yang jelas.
| Join | Hanya baris kiri | Hanya baris kanan | Baris yang cocok |
|---|---|---|---|
| INNER | Tidak | Tidak | Ya |
| LEFT | Ya | Tidak | Ya |
| RIGHT | Tidak | Ya | Ya |
| FULL | Ya | Ya | Ya |
CROSS JOIN dan SELF JOIN
CROSS JOIN memasangkan setiap baris satu tabel dengan setiap baris tabel lain: tiga pelanggan dan empat pesanan menghasilkan dua belas baris. Jarang dipakai, tetapi berguna untuk membuat kombinasi, misalnya data uji untuk setiap ukuran dan warna.
SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;
SELF JOIN menggabungkan tabel dengan dirinya sendiri memakai alias, misalnya untuk mencari atasan setiap karyawan.
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
SQL JOIN: kesalahan umum dan tips performa
- Lupa klausa ON tanpa sengaja membuat CROSS JOIN dan jumlah baris meledak.
- Menyaring tabel kanan di WHERE setelah LEFT JOIN mengubahnya menjadi INNER JOIN; letakkan kondisi di ON.
- Nama kolom ambigu: awali kolom dengan alias tabel.
- Join pada kolom tidak unik melipatgandakan baris dan menggelembungkan total.
- Indeks kolom join, pilih hanya kolom yang diperlukan, dan periksa query lambat dengan
EXPLAIN.
Mengapa join penting bagi penguji
Insinyur QA memakai join untuk memverifikasi bahwa data yang dibuat lewat UI atau API sampai ke database dengan benar, dan untuk menemukan data yatim. Baca bersama panduan pengujian API dengan Postman (bahasa Inggris). Untuk dasar-dasarnya lihat tutorial SQL untuk pemula (bahasa Inggris), dan untuk penyimpanan data baru baca database vektor (bahasa Inggris). Untuk menjalankan database secara lokal, lihat tutorial Docker (bahasa Inggris).
Penutup
SQL JOIN dalam satu baris: INNER hanya menyimpan yang cocok, LEFT semua di kiri, RIGHT semua di kanan, dan FULL menyimpan semuanya. Berlatihlah dengan dua tabel kecil sampai Anda bisa memprediksi hasil sebelum menjalankan query; lalu coba join tiga tabel dan gabungkan join dengan GROUP BY.
Pertanyaan yang sering diajukan
Apa beda INNER JOIN dan LEFT JOIN?
INNER JOIN hanya mengembalikan baris yang cocok di kedua tabel. LEFT JOIN mengembalikan semua baris tabel kiri dan mengisi kolom kanan yang tidak cocok dengan NULL.
SQL JOIN mana yang paling cepat?
Tidak ada jenis yang selalu tercepat. Performa bergantung pada indeks, ukuran tabel, dan rencana eksekusi. Indeks kolom join dan periksa rencana eksekusinya.
Apakah MySQL mendukung FULL OUTER JOIN?
Tidak. Di MySQL, gabungkan LEFT JOIN dan RIGHT JOIN dengan UNION untuk hasil yang sama.
Untuk apa SELF JOIN digunakan?
SELF JOIN membandingkan baris dalam tabel yang sama, misalnya mencari atasan setiap karyawan dalam satu tabel employees.
Mengapa join saya mengembalikan baris duplikat?
Duplikat muncul saat kolom join tidak unik di salah satu tabel. Periksa kunci Anda atau agregasi data sebelum join.
Terus belajar (artikel bahasa Inggris)
Butuh bantuan dengan pengujian, WordPress, atau SEO?
Kami membantu tim merilis perangkat lunak yang lebih baik dan mengembangkan situs mereka. Ceritakan apa yang Anda kerjakan dan kami sarankan langkah berikutnya.
Panduan lebih lanjut tentang pengujian, AI & pengembangan modern
Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.
