Sebagai bentuk implementasi dari Normalisasi, data-data yang diimpan dipisahkan kedalam beberapa tabel yang saling berelasi. Relasi ini, dalam logical design, direpresentasikan oleh Primary Key (PK) dan Foreign Key (FK). Misal, kita ingin mengetahui nama-nama karyawan yang berada di departemen Marketing, sedangkan nama departemen berada di tabel Departemen dan nama karyawan berada di tabel Karyawan. Penghubung antara Departemen dan Karyawan adalah id_dept.
Solusinya, kita bisa mencari id_dept milik departemen Marketing di tabel Departemen, dari hasil query ini, kita lakukan pencarian seluruh nama karyawan di tabel Karyawan yang bekerja di id_dept tersebut. 2x kerja. Tentunya kita ingin solusi yang lebih ringan, betul. Solusi lain adalah dengan menggabungkan tabel Karyawan dan Departemen menjadi derivated table. Dari hasil penggabungan tersebut, kita bisa melakukan SELECT layaknya pada satu tabel. Penggabungan ini dalam dunia SQL disebut sebagai JOIN.
Untuk menyelesaikan permasalahan diatas, kita bisa menggunakan EQUI JOIN, yaitu join yang menggabungkan data-data yang sama. Perhatikan query berikut:
SELECT k.nama karyawan, d.nama departemen
FROM Karyawan k, Departemen d
WHERE k.id_dept=d.id_dept
AND d.nama=’Marketing’;
Pada query tersebut, kita menggunakan WHERE sebagai kondisi penggabungan. Seluruh tabel yang didefinisikan dalam klausa FROM harus digabungkan, sehingga ada n-1 kondisi untuk n tabel. Dan ini belum termasuk kondisi-kondisi lain yang mempengaruhi data.
Bagaimana jika ada karyawan yang belum mempunyai departemen karena mungkin karyawan tersebut masih dalam proses in-house training? Jika kita menampilkan seluruh datanya dari tabel Karyawan, Mamik (karyawan baru tersebut) ikut tampil. Tetapi ketika kita men-join-kan dengan tabel Departemen, Mamik tidak akan tampil. Untuk mengatasi hal ini, kita perlu OUTER JOIN. Perhatikan query berikut:
SELECT k.nama karyawan, d.nama departemen
FROM Karyawan k LEFT OUTER JOIN Departemen d
ON k.id_dept=d.id_dept;
Berbeda dengan query sebelumnya, query LEFT OUTER JOIN tidak menggunakan WHERE untuk kondisi penggabungannya, tetapi menggunakan JOIN…ON. Dengan query LEFT OUTER JOIN, seluruh data di tabel kiri (dalam hal ini adalah Karyawan) ditampilkan semua setelah itu dilakukan pencarian data-data dengan id_dept yang sama di tabel sebelah kanan (tabel Departemen).
Semoga bermanfaat.