Perintah INNER JOIN
📚 Pengenalan Perintah INNER JOIN
INNER JOIN mengembalikan baris yang memiliki nilai yang cocok di kedua tabel. Ini adalah jenis JOIN yang paling umum digunakan dan juga merupakan default jika Anda hanya menuliskan JOIN tanpa menentukan jenisnya.
Sintaks INNER JOIN
Sintaks untuk INNER JOIN adalah:
SELECT tabel1.kolom1, tabel2.kolom2, ... FROM tabel1 INNER JOIN tabel2 ON tabel1.kolom_kunci = tabel2.kolom_kunci;
Atau tanpa kata kunci INNER (karena INNER JOIN adalah default):
SELECT tabel1.kolom1, tabel2.kolom2, ... FROM tabel1 JOIN tabel2 ON tabel1.kolom_kunci = tabel2.kolom_kunci;
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 |
Contoh INNER JOIN
Untuk menggabungkan tabel 'pelanggan' dan 'pesanan' berdasarkan id pelanggan:
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 |
Perhatikan bahwa:
- Bob Johnson tidak muncul karena tidak ada pesanan yang terkait dengannya
- Pesanan dengan id 104 tidak muncul karena pelanggan dengan id 4 tidak ada
INNER 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;
INNER 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;
INNER JOIN dengan WHERE
Anda dapat menggabungkan INNER 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;
INNER JOIN dengan ORDER BY
Anda dapat mengurutkan hasil dari INNER JOIN:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id ORDER BY pe.tanggal DESC;
INNER JOIN dengan Agregat
Anda dapat menggunakan fungsi agregat dengan INNER JOIN:
SELECT p.nama, COUNT(pe.id) AS jumlah_pesanan, SUM(pe.jumlah) AS total_belanja FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id GROUP BY p.id, p.nama ORDER BY total_belanja DESC;
INNER JOIN dengan Multiple Conditions
Anda dapat menggunakan beberapa kondisi dalam klausa ON:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id INNER JOIN kota AS k ON p.kota_id = k.id AND k.nama = 'Jakarta';
INNER JOIN vs. WHERE
Sebelum standar SQL-92, JOIN sering dilakukan dengan klausa WHERE:
-- Cara lama (tidak disarankan) SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p, pesanan AS pe WHERE p.id = pe.pelanggan_id; -- Cara modern (disarankan) SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id;
Catatan: Menggunakan sintaks INNER JOIN modern lebih disarankan karena lebih jelas dan memisahkan kondisi penggabungan dari kondisi filter.
Coba Sendiri
Anda dapat mencoba kode SQL di atas di editor berikut:
💡 Tips Perintah INNER JOIN
Saat menggunakan INNER JOIN, pastikan Anda memiliki indeks pada kolom yang digunakan untuk JOIN. Ini akan meningkatkan kinerja query secara signifikan, terutama untuk tabel yang besar.