Perintah JOIN
📚 Pengenalan Perintah JOIN
Perintah JOIN digunakan untuk menggabungkan baris dari dua atau lebih tabel berdasarkan kolom yang terkait di antara mereka. JOIN memungkinkan Anda untuk mengambil data yang terdistribusi di beberapa tabel dalam satu query.
Mengapa Kita Perlu JOIN?
Dalam desain database yang baik, data sering kali dibagi menjadi beberapa tabel untuk menghindari redundansi dan mempertahankan integritas data. JOIN memungkinkan kita untuk menggabungkan kembali data ini saat diperlukan.
Contoh: Daripada menyimpan informasi pelanggan dan pesanan dalam satu tabel, kita dapat memiliki dua tabel terpisah:
- pelanggan - menyimpan informasi pelanggan
- pesanan - menyimpan informasi pesanan dengan referensi ke pelanggan
Jenis-jenis JOIN
Ada beberapa jenis JOIN dalam SQL:
- INNER JOIN - Mengembalikan baris yang memiliki nilai yang cocok di kedua tabel
- LEFT JOIN - Mengembalikan semua baris dari tabel kiri dan baris yang cocok dari tabel kanan
- RIGHT JOIN - Mengembalikan semua baris dari tabel kanan dan baris yang cocok dari tabel kiri
- FULL OUTER JOIN - Mengembalikan semua baris ketika ada kecocokan di salah satu tabel
Contoh Tabel
Misalkan kita memiliki dua tabel berikut:
Tabel 'pelanggan'
| id | nama | |
|---|---|---|
| 1 | John Doe | john@example.com |
| 2 | Jane Smith | jane@example.com |
| 3 | Bob Johnson | bob@example.com |
Tabel 'pesanan'
| id | pelanggan_id | tanggal | jumlah |
|---|---|---|---|
| 101 | 2 | 2023-01-15 | 150000 |
| 102 | 1 | 2023-01-20 | 200000 |
| 103 | 2 | 2023-02-05 | 75000 |
| 104 | 4 | 2023-02-10 | 300000 |
Sintaks Dasar JOIN
Sintaks dasar untuk JOIN adalah:
SELECT tabel1.kolom1, tabel2.kolom2, ... FROM tabel1 JOIN_TYPE tabel2 ON tabel1.kolom_kunci = tabel2.kolom_kunci;
INNER JOIN
INNER JOIN mengembalikan baris yang memiliki nilai yang cocok di kedua tabel:
SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah FROM pelanggan INNER JOIN pesanan ON pelanggan.id = pesanan.pelanggan_id;
Hasilnya akan menjadi:
| nama | tanggal | jumlah |
|---|---|---|
| Jane Smith | 2023-01-15 | 150000 |
| John Doe | 2023-01-20 | 200000 |
| Jane Smith | 2023-02-05 | 75000 |
LEFT JOIN
LEFT JOIN mengembalikan semua baris dari tabel kiri (pelanggan) dan baris yang cocok dari tabel kanan (pesanan):
SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah FROM pelanggan LEFT JOIN pesanan ON pelanggan.id = pesanan.pelanggan_id;
Hasilnya akan menjadi:
| nama | tanggal | jumlah |
|---|---|---|
| John Doe | 2023-01-20 | 200000 |
| Jane Smith | 2023-01-15 | 150000 |
| Jane Smith | 2023-02-05 | 75000 |
| Bob Johnson | NULL | NULL |
RIGHT JOIN
RIGHT JOIN mengembalikan semua baris dari tabel kanan (pesanan) dan baris yang cocok dari tabel kiri (pelanggan):
SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah FROM pelanggan RIGHT JOIN pesanan ON pelanggan.id = pesanan.pelanggan_id;
Hasilnya akan menjadi:
| nama | tanggal | jumlah |
|---|---|---|
| Jane Smith | 2023-01-15 | 150000 |
| John Doe | 2023-01-20 | 200000 |
| Jane Smith | 2023-02-05 | 75000 |
| NULL | 2023-02-10 | 300000 |
FULL OUTER JOIN
FULL OUTER JOIN mengembalikan semua baris ketika ada kecocokan di salah satu tabel:
SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah FROM pelanggan FULL OUTER JOIN pesanan ON pelanggan.id = pesanan.pelanggan_id;
Hasilnya akan menjadi:
| nama | tanggal | jumlah |
|---|---|---|
| John Doe | 2023-01-20 | 200000 |
| Jane Smith | 2023-01-15 | 150000 |
| Jane Smith | 2023-02-05 | 75000 |
| Bob Johnson | NULL | NULL |
| NULL | 2023-02-10 | 300000 |
Catatan: FULL OUTER JOIN tidak didukung di MySQL. Anda dapat mensimulasikannya dengan menggunakan UNION dari LEFT JOIN dan RIGHT JOIN.
JOIN dengan Alias
Anda dapat menggunakan alias untuk nama tabel untuk membuat query lebih pendek:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id;
JOIN dengan Beberapa Tabel
Anda dapat menggabungkan lebih dari dua tabel:
SELECT p.nama, pe.tanggal, pr.nama_produk FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id INNER JOIN produk AS pr ON pe.produk_id = pr.id;
JOIN dengan WHERE
Anda dapat menggabungkan JOIN dengan WHERE untuk memfilter hasil:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id WHERE pe.jumlah > 100000;
SELF JOIN
SELF JOIN adalah JOIN dari tabel ke dirinya sendiri. Ini berguna untuk membandingkan baris dalam tabel yang sama:
SELECT p1.nama AS pelanggan1, p2.nama AS pelanggan2, p1.kota FROM pelanggan AS p1 INNER JOIN pelanggan AS p2 ON p1.kota = p2.kota WHERE p1.id < p2.id;
Coba Sendiri
Anda dapat mencoba kode SQL di atas di editor berikut:
💡 Tips Perintah JOIN
Saat menggunakan JOIN, pastikan Anda memiliki indeks pada kolom yang digunakan untuk JOIN. Ini akan meningkatkan kinerja query secara signifikan, terutama untuk tabel yang besar.