0
0
0
share
#sql#sql#mysql#mysql
0 Komentar
MySQL: Full-Outer-Join
![MySQL: Full-Outer-Join](https://www.codepolitan.com/uploads/image/source/13629/codepolitan_mysql_banner_700_350.png)
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](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/fullouterjoin-diagram.png)
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](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/table-pemasukan.png)
Pengeluaran
Table ini seperti table Pemasukan. Yang berbeda datanya.
![alt text](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/table-pengeluaran.png)
Target
Yang kita harapkan hasilnya seperti dibawah. Dan kalau diperhatikan akan sama seperti pada diagram.
![alt text](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/resultset-tsql.png)
SQL Server
Untuk SQL-Server cukup dibuat seperti pada gambar dibawah. Fitur yang ada membuat query sederhana sekali.
< T-SQL >
![alt text](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/fullouterjoin-tsql.png)
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](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/fullouterjoin-mysql.png)
Dan kita bisa melihat hasilnya sama dan seperti yang diharapkan.
![alt text](https://dede.gitlab.io/a/i/p/sql-full-outer-Join/resultset-mysql.png)
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
- link reference
- MySQL
- Mariadb
- Microsoft SQL Server
- Wikipedia: SQL-92
- Wikipedia: Join (SQL)
- MSDN: FROM (Transact-SQL)
- MySQL Doc: JOIN
- MySQL Doc: UNION
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.
0
0
0
share