JOIN adalah operasi SQL yang digunakan untuk menggabungkan data dari dua atau lebih tabel berdasarkan kolom yang saling terkait. JOIN memungkinkan kita untuk mengambil informasi yang tersimpan di tabel berbeda dalam satu query.
Mengapa JOIN Penting?
- Normalisasi Database: Data disimpan di tabel terpisah untuk menghindari redundansi
- Efisiensi: Mengurangi duplikasi data
- Fleksibilitas: Dapat menggabungkan informasi sesuai kebutuhan
- Integritas Data: Menjaga konsistensi relasi antar tabel
1. INNER JOIN
INNER JOIN menampilkan hanya baris yang memiliki kecocokan di kedua tabel yang digabungkan. Dalam kasus ini, hanya mahasiswa yang mengambil mata kuliah yang akan ditampilkan beserta detail dosen pengajarnya.
Kode SQL
sql-- Menampilkan mahasiswa yang mengambil mata kuliah beserta detail dosen pengajar
SELECT m.NIM,
m.Nama AS Nama_Mahasiswa,
mk.Nama_MK,
mk.SKS,
d.Nama AS Nama_Dosen,
d.No_HP AS HP_Dosen
FROM mahasiswa m
INNER JOIN ambil_mk a ON m.NIM = a.NIM
INNER JOIN mata_kuliah mk ON a.Kode_MK = mk.Kode_MK
INNER JOIN dosen d ON a.NIP = d.NIP;
- Menampilkan mahasiswa yang terdaftar mengambil mata kuliah
- Tidak menampilkan mahasiswa yang belum mengambil mata kuliah apapun
- Menampilkan informasi lengkap mata kuliah dan dosen pengajar
2. LEFT JOIN
LEFT JOIN menampilkan semua baris dari tabel kiri (mahasiswa) dan baris yang cocok dari tabel kanan. Jika tidak ada kecocokan, kolom dari tabel kanan akan berisi NULL.
sql-- Menampilkan semua mahasiswa, termasuk yang belum mengambil mata kuliah
SELECT m.NIM,
m.Nama AS Nama_Mahasiswa,
m.Jenis_Kelamin,
mk.Nama_MK,
d.Nama AS Nama_Dosen
FROM mahasiswa m
LEFT JOIN ambil_mk a ON m.NIM = a.NIM
LEFT JOIN mata_kuliah mk ON a.Kode_MK = mk.Kode_MK
LEFT JOIN dosen d ON a.NIP = d.NIP;
- Menampilkan semua mahasiswa tanpa kecuali
- Mahasiswa yang belum mengambil mata kuliah akan memiliki nilai NULL untuk kolom mata kuliah dan dosen
- Berguna untuk identifikasi mahasiswa yang belum aktif
3. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN menampilkan semua baris dari tabel kanan dan baris yang cocok dari tabel kiri. Dalam konteks ini, menampilkan semua mata kuliah termasuk yang belum diambil oleh mahasiswa.
sql-- Menampilkan semua mata kuliah, termasuk yang belum diambil mahasiswa
SELECT mk.Kode_MK,
mk.Nama_MK,
mk.SKS,
m.Nama AS Nama_Mahasiswa,
d.Nama AS Nama_Dosen
FROM mahasiswa m
RIGHT JOIN ambil_mk a ON m.NIM = a.NIM
RIGHT JOIN mata_kuliah mk ON a.Kode_MK = mk.Kode_MK
RIGHT JOIN dosen d ON a.NIP = d.NIP;
- Menampilkan semua mata kuliah yang tersedia
- Mata kuliah yang belum diambil mahasiswa akan memiliki nilai NULL untuk kolom mahasiswa
- Berguna untuk melihat mata kuliah mana yang kurang diminati
4. FULL OUTER JOIN (Simulasi dengan UNION)
FULL OUTER JOIN menampilkan semua baris dari kedua tabel, baik yang cocok maupun tidak. Karena MySQL tidak mendukung FULL OUTER JOIN secara langsung, kita menggunakan kombinasi LEFT JOIN dan RIGHT JOIN dengan UNION.
sql-- MySQL tidak mendukung FULL OUTER JOIN secara langsung, gunakan UNION
SELECT m.NIM,
m.Nama AS Nama_Mahasiswa,
mk.Nama_MK,
d.Nama AS Nama_Dosen
FROM mahasiswa m
LEFT JOIN ambil_mk a ON m.NIM = a.NIM
LEFT JOIN mata_kuliah mk ON a.Kode_MK = mk.Kode_MK
LEFT JOIN dosen d ON a.NIP = d.NIP
UNION
SELECT m.NIM,
m.Nama AS Nama_Mahasiswa,
mk.Nama_MK,
d.Nama AS Nama_Dosen
FROM mahasiswa m
RIGHT JOIN ambil_mk a ON m.NIM = a.NIM
RIGHT JOIN mata_kuliah mk ON a.Kode_MK = mk.Kode_MK
RIGHT JOIN dosen d ON a.NIP = d.NIP;
- Menampilkan semua mahasiswa dan semua mata kuliah
- Menghilangkan duplikasi data melalui UNION
- Memberikan gambaran lengkap tentang semua entitas dalam sistem
5. CROSS JOIN
CROSS JOIN menghasilkan produk kartesian dari kedua tabel, yaitu setiap baris dari tabel pertama dikombinasikan dengan setiap baris dari tabel kedua. Operasi ini menghasilkan jumlah baris yang sangat besar.
sql-- Menampilkan semua kombinasi mahasiswa dengan mata kuliah
SELECT m.NIM,
m.Nama AS Nama_Mahasiswa,
mk.Kode_MK,
mk.Nama_MK
FROM mahasiswa m
CROSS JOIN mata_kuliah mk;
- Menghasilkan semua kemungkinan kombinasi mahasiswa dengan mata kuliah
- Jika ada 100 mahasiswa dan 50 mata kuliah, akan menghasilkan 5000 baris
- Berguna untuk analisis teoretis atau pembuatan data dummy