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:

Jenis-jenis JOIN

Ada beberapa jenis JOIN dalam SQL:

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

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.