Rasa-rasanya sudah lama sekali saya tidak bikin postingan yang sedikit teknis. Kalau ga curhat ya kuliner ya jalanan, heheu. Nah, pagi ini saya melihat postingan Mas Pay di Google+ yang share masalah SQL Join ini.
Kalau masalah database, terutama bagian SQL nya, masalah Join ini kadang bisa jadi salah satu yang bisa bikin bingung. Semacem belajar rekursifnya programming. Iya ga si? Emang beberapa orang bisa lancar dan cepet paham, tapi ada juga beberapa yang tidak, harus banyak latihan dulu. Kayak saya, heheu.
Selain itu, SQL join juga sering banget digunakan untuk bahan interview buat nyari orang yang akan dipekerjakan sebagai DBA (Database Administrator). Kadang disinggung soal perbedaan dari berbagai jenis join yang ada atau simplenya langsung disuruh nulis query yang menandakan operasi join ini.
Dari gambar di postingan ini sudah terlihat kan beberapa jenis operasi join yang ada.
- LEFT JOIN
- RIGHT JOIN
- INNER JOIN
- OUTER JOIN
Penjelasannnya pun lebih mudah jika digambarkan sebagai himpunan bagian seperti itu kan? A dan B merupakan nama tabel, sedangkan warna merah menandakan hasil query join terhadap isi tabel.
Perbedaan mendasarnya, INNER JOIN hanya menghasilkan records yang cocok antara kedua tabel, sedangkan OUTER JOIN akan menghasilkan semua records, termasuk yang tidak cocok antara kedua tabel.
Contoh Sederhana
mysql> select * from employee;
+--------+----------+---------+--------+
| emp_id | emp_name | dept_id | salary |
+--------+----------+---------+--------+
| 103 | Jack | 1 | 1400 |
| 104 | John | 2 | 1450 |
| 108 | Alan | 3 | 1150 |
| 107 | Ram | NULL | 600 |
+--------+----------+---------+--------+
mysql> select * from department;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 1 | Sales |
| 2 | Finance |
| 3 | Accounts |
| 4 | Marketing |
+---------+-----------+
mysql> select e.emp_id, e.emp_name, d.dept_name from employee e LEFT JOIN department d on e.dept_id=d.dept_id;
+--------+----------+-----------+
| emp_id | emp_name | dept_name |
+--------+----------+-----------+
| 103 | Jack | Sales |
| 104 | John | Finance |
| 108 | Alan | Accounts |
| 107 | Ram | NULL |
+--------+----------+-----------+
mysql> select e.emp_id, e.emp_name, d.dept_name from employee e RIGHT JOIN department d on e.dept_id=d.dept_id;
+--------+----------+-----------+
| emp_id | emp_name | dept_name |
+--------+----------+-----------+
| 103 | Jack | Sales |
| 104 | John | Finance |
| 108 | Alan | Accounts |
| NULL | NULL | Marketing |
+--------+----------+-----------+
Jika LEFT JOIN, maka walaupun record valuenya NULL, akan tetap ikut menjadi hasil query dengan nilai NULL, sesuai dengan jumlah baris tabel sebelah kiri. Begitu pula RIGHT JOIN, akan di sesuaikan dengan tabel yang sebelah kanan walaupun ada nilai NULL di tabel kiri.
@ariffsetiawan