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 email
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:

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.