MySQL: Full-Outer-Join

Soeleman 18 Januari 2017

MySQL: Full-Outer-Join

Walaupun sudah ada dalam spesifikasi seperti SQL-92. Kadang tidak semua itu diimplementasikan kedalam database-nya. Seperti Full Outer Join yang tidak ada pada MySQL. Sedangkan untuk database seperti Microsoft SQL Server pengunanya sudah dapat menikmati fitur ini.

Full Outer Join biasanya menggabungkan dua table atau lebih(akan rumit) kedalam resultset yang akan menduplikasi data apabila sesuai dengan kondisinya. Dan apabila tidak ada persamaannya maka Null akan ditempatkan pada join-nya. Lebih mudahnya kita bisa melihat gambar dibawah.

alt text

Table

Untuk melihat seperti apa fitur ini. Kita siapkan table-nya dahulu. Dan datanya kita dibuat seperti pada diagram diatas.

Pemasukan

Table ini terdiri dari Id(Int), Ket(VarChar(10)) dan Nominal(Int). Dan bisa datanya, seperti pada gambar dibawah.

alt text

Pengeluaran

Table ini seperti table Pemasukan. Yang berbeda datanya.

alt text

Target

Yang kita harapkan hasilnya seperti dibawah. Dan kalau diperhatikan akan sama seperti pada diagram.

alt text

SQL Server

Untuk SQL-Server cukup dibuat seperti pada gambar dibawah. Fitur yang ada membuat query sederhana sekali.

< T-SQL >
alt text

MySQL

Pada database ini memang tidak menimplementasikan fitur ini. Bukan berarti tidak bisa dilakukan, hanya sedikit lebih panjang.

Prinsipnya sama seperti yang didiagram. Dengan Union untuk mengkombinasikan Left Outer Join dan Right Outer Join. Bisa saja pakai Union All tapi perlu ada tambahan filter NULL-nya.

Jadi pertanyaan kenapa mesti buat alias di table Pengeluaran? Karena kedua table memiliki column-name yang sama, maka akan muncul dua Id dan itu akan membuatnya tidak bisa dibuat alias di level query diatasnya.

< MySql >
alt text

Dan kita bisa melihat hasilnya sama dan seperti yang diharapkan.

alt text

Penutup

Walau MySQL tidak memiliki fitur Full Outer Join. Bukan berarti tidak bisa mensimulasi seperti itu. Dan juga dalam MySQL melakukan itu, kadang perlu juga di buat alias agar column-nya tidak terjadi konflik.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code.
Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production.
Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.