FUNGSI PEMBULATAN DALAM SQL

FUNGSI PEMBULATAN DALAM SQL

FUNGSI PEMBULATAN DALAM SQL

          Salah satu fitur penting dalam masalah penghitungan dalam query pembulatan.Dan beruntung sekali, SQL menyediakan banyak fasilitas pembulatan yang bervariasi. Dan ini tentunya sangatmembantu bagi para programmer.
Berikut ini adalah beberapa syntax pembulatan dalam sql :

ROUND
Merupakan syntax default yang paling mainstream. Bisa dibilang, penggunaan round merupakan pilihan 'aman' bagi para programmer yang memang tak mau ribet dengan aturan pembulatan yang njelimet.
Syntax :
ROUND (angka yang akan dibulatkan, jumlah angka dibelakang koma)
Lihat? Sangat mudah dipahami dan diterapkan 'kan?
Contoh :
select round(5.123456 , 2) from dual ==> 5.12
select round(5.87654 , 2) from dual ==> 5.88
Pembulatan angka di belakang titik/koma akan disesuaikan secara otomatis seperti peraturan matematika pada umumnya. Bila angka di atas 5, maka akan dibulatkan ke bilangan lebih besar. Bila angka di bawah 5, maka akan dibulatkan lebih kecil. Ada sedikit perbedaan dengan aturan standar sih. Yaitu ketika angka desimal-nya 5, maka akan dibulatkan ke bilangan lebih besar. Tidak seperti pelajaran di SD yang tak mengalami perubahan atau pembulatan.

FLOOR
Floor adalah fungsi pembulatan dalam SQL yang akan mengubah bilangan desimal atau bilangan bulat menjadi sesuai dengan bilangan sebelum desimal.
Syntax :
select floor(5.89) from dual ==> 5
select floor(5.12) from dual ==> 5
Lihat? Berapa pun besar bilangan di belakang desimal, itu takkan berpengaruh, karena hasilnya tetap akan merujuk pada bilangan utama, atau non-pecahannya. Atau dengan kata lain, syntax floor ini adalah menghilangkan setiap angka setelah desimal- tak mempedulikan berapa pun besarannya-. Yang tersisa hanyalah bilangan utamanya.

CEIL
Fungsi Sql satu ini adalah reversi atau kebalikan dari Floor.
Syntax :
select ceil(5.89) from dual ==> 6
select ceil(5.12) from dual ==> 6
Bila floor bertugas untuk 'menghilangkan' bilangan setelah desimal-nya saja. Maka ceil ini memiliki job untuk membulatkan bilangan ke angka sesudahnya. Tidak peduli berapa pun besar dari angka di belakang koma atau titik.

Ah, benar juga. Penggunaan round juga bisa dimanfaatkan untuk melakukan pembulatan dalam tipe data date atau tanggal.
Syntax :
                round (date, format data)
contoh :
select round (to_date('01-MAR-1994','YYYY')) from dual ==> 01-JAN-1994
Dari contoh di atas, kita melakukan pembulatan terhadap tanggal 1 maret 1994 dan dibulatkan dalam format tahunan. Karena maret merupakan bulan ke-3, dan merupakan bilangan yang ada di setengah bawah dari 12 bulan(1-6 setengah bawah, 7-12 setengah atas), maka akan dibulatkan ke tahun tersebut dengan bulan pertama.
contoh lain :
select round (to_date('01-SEP-1994','YYYY')) from dual ==> 01-JAN-1995

Karena September termasuk dalam setengah atas dari 12 bulan, maka akan dibulatkan maju. Dengan kata lain, dibulatkan ke tahun selanjutnya (1995). Sedangkan bulannya, akan menjadi bulan pertama, alias Januari.
Contoh beberapa format round yang dipakai dalam pembulatan tanggal :
Format Tipe
Deskripsi
CC / SCC
Century , pembulatan ke abad terkedat
YYYY / YEAR
Year, pembulatan ke tahun terdekat
DDD / DD / D
Day, pembulatan ke hari terdekat
HH / HH12 / HH24
Hours, pembulatan ke jam terdekat
MI
Minute, pembulatan ke menit terdekat

Itulah beberapa contoh dan penggunaan dari syntax pembulatan di sql, terutama yang dipakai oleh Oracle.
Insya Allah, semoga sedikit informasi yang dibagi ini bisa bermanfaat bagi kita semua!

MENGATASI DUPLIKASI DATA DALAM QUERY

MENGATASI DUPLIKASI DATA DALAM QUERY


MENGATASI DUPLIKASI DATA DALAM QUERY

Dalam mengotak-atik query, terkadang kita harus menggunakan beberapa tabel dalam database. Dan tentu saja, dari masing-masing tabel terdapat key yang identik, sehingga tabel-tabel bisa saling dihubungkan.Anggap Anda telah memahami tentang penjoinan tabel. Nah, masalah yang sering muncul adalah, duplikasi data pada query. Ya, duplikasi ini bisa disebabkan beberapa hal. Misalkan dua tabel yang dihubungkan tidak memiliki key yang unik. Pemasangan non-unique key memang bisa dilakukan. Namun, resiko ada data kembar kemungkinan besar terjadi.
           Kedua, tidak adanya key penghubung yang cukup kuat. Dalam kasus tabel dengan banyak field, kita sering menemui adanya lebih daru satu primary key yang bisa dimanfaatkan. Nah, kesalahan yang sering terjadi adalah, kita tidak memasangkan cukup banyak atau spesifik dari key tabel satu ke tabel lainnya.
Pahit nih...
       Untuk database dengan sedikit tabel, field, dan data, tentu relatif mudah dalam memeriksa atau menelusuri penyebab terjadinya duplikasi. Tapih, bagaimana kalau database sudah complicated secara struktur dan isiny?. Aduh, perlu kerja keras sekeras-kerasnya...
Beberapa tips untuk mengatasi data kembar dalam melakukan query. Dimulai dari tindakan pencegahan dulu.
Pertama, selalu upayakan tiap tabel paling tidak memiliki satu unique primary key, yang menjadi 'identitas' dari sang tabel.  Dengan kata lain, pastikan ada satu field yang isinya tidak pernah sama meski data menjulang hingga ribuan.
Kedua, membuat strukturasi antar tabel dengan jelas dan mudah ditelaah. Ini gampang diomongin tapi sedikit sulit diterapkan. Kita harus bisa memilah tiap tabel sesuai dengan fungsinya, pastikan untuk meminimalisir pemborosan kolom. Dalam istilah kerennya sering disingkat normalisasi database. Pasti pernah dengar normalisasi waduk di Jakarta,'kan? Nah, mirip-mirip kok. Hehehe...
          Tujuannya adalah sama-sama menghilangkan jumlah data yang berlebihan. Jika satu kolom bisa dipakai untuk dependency banyak tabel, kenapa harus memasukkan kolom itu disetiap tabel? Tentunya akan membengkakkan kapasitas tabel. Kalau datanya cuma puluhan mungkin tak terasa. Tapi di instansi besar yang memiliki data hingga puluhan hingga ratusan ribu, ini hal sentimen yang kudu diperhatikan.
Nah, sekarang dari tindakan non-preventif.
Tips untuk menghilangkan data ganda pada query adalah dengan pemakaian distinct.
Syntax :
select distinct bla bla bla...
Mudah 'kan?
Yang perlu dilakukan hanyalah menempatkan kata distinct setelah select. Distinct sendiri berasal dari bahasa Inggris yang artinya jelas, terang, atau berbeda. Nah, dengan adanya command ini, maka query akan memproses data yang pure beda.
Contoh data tanpa distinct:
Select nama_pegawai, nomor_induk, status from tpegawai
Maka muncul hasil seperti di bawah :
Nama_pegawai
Nomor_induk
Status
John
12300
Lajang
Herman
12301
Duda
Budi
12302
Lajang
Anduk
12303
Menikah
Budi
2302
Lajang

Perhatikan. Dari contoh di atas, terdapat dua data Budi. Hal ini bisa terjadi karena salah input dua kali, atau join table yang kurang tepat. (Dalam kasus ini hanya memakai satu tabel, jadi tidak ada join).
Wah, gak lucu dong kalau muncul data dua kali. Untuk itu, kita bisa menambahkan perintah distinct setelah select sehingga hasil query menjadi :
Nama_pegawai
Nomor_induk
Status
John
12300
Lajang
Herman
12301
Duda
Budi
12302
Lajang
Anduk
12303
Menikah

Lihat, hanya tinggal ada 4 row. Data yang duplikat telah lenyap dan yang muncul hanyalah data yang memang berbeda. Eitss.. Ada beberapa hal yang perlu diperhatikan dalam pemakaian distinct.
1.      Distinct tidak menghapus data di tabel. Ya, distinct hanya 'menghilangkan' data dobel di query. Sedangkan di source aslinya tetap ada ganda. Distinct tidak menghilangkan duplikasi satu kolom saja. Ya, lihat dari contoh di atas. Ada 3 buah kolom dan 4 row yang muncul.
Contohnya :
Nama_pegawai
Jenis_kelamin
Umur
Budi
Pria
27
Budi
Pria
27
Budi
Pria
25
Dari contoh itu, maka yang dimaksud duplikat adalah nomor 1 dan 2. Kenapa? Karena datanya sama! Dari kolom 1 hingga akhir tidak ada yang berbeda. Sementara itu, meski data nomor tiga Budi dan Prianya sama dengan yang lain. Tapi tidak dianggap duplikasi. Karena ada kolom lain yang berbeda, yaitu umurnya 25. Jadi, distinct melakukan pengecekan duplikasi tidak per kolom. Tapi menyeluruh semua kolom pada tiap row.
Insya Allah, semoga sedikit informasi ini dapat bermanfaat!

PEMAKAIAN FUNGSI ADD_MONTHS PADA SQL ORACLE

PEMAKAIAN FUNGSI ADD_MONTHS PADA SQL ORACLE
PEMAKAIAN FUNGSI ADD_MONTHS PADA SQL ORACLE

Kembali lagi bertemu! Kali ini saya siap share lagi ilmu tentang sql!

     Terkadang, dalam sql oracle, kita tidak hanya melakukan manipulasi terhadap data bertipe numeric dan string saja. Tipe data Date pun sesekali meramaikan query yang memusingkan kepala. Salah satu fitur sql Oracle untuk melakukan manipulasi data tanggal adalah add_months...

Add_months? Hah, terdengar simpel...

     Yah, sepertinya tidak perlu dijelaskan dengan detail. Dari namanya saja sudah ketahuan ya, hehe. Add_months merupakan syntax yang digunakan untuk menambahkan jumlah bulan dari tanggal yang kita inputkan. Proses ini tidak hanya untuk menambahkan dari bulan sekarang, tapi juga bisa untuk melakukan pengurangan bulan.
Syntax :
Add_months(tanggal, jumlah bulan yang ingin ditambahkan)
Contoh :
Select Add_months('12-SEP-2013',1) from dual
Maka akan memiliki result :
12-OCT-2013
     Coba perhatikan, angka 1 mewakili jumlah bulan yang kita inginkan. Angka ini merupakan bilangan bulat mutlak tanpa desimal. Dengan kata lain, jika kita memasukkan bilangan desimal misalkan 1.5 atau 1, keduanya tetap akan dihitung sebagai 1. Ini juga berlaku untuk bilangan setelah koma pada 0, misalkan 0.5 atau 0.8. Meskipun data bisa dibulatkan menjadi 1, namun sql tetap membaca sebagai 0. Sehingga pemberian syntax seperti ini tidak akan berarti apa pun. Karena sekali lagi, yang dihitung adalah bulan, bukan hari, minggu, atau punjam.
Contoh :
Select Add_months('12-SEP-2013',0) from dual
Maka akan memiliki result :
12-SEP-2013 -- hasil tetap konstan, tidak terjadi perubahan.
     Bagian n jumlah di belakang ini tidak memiliki batas sih. Meski pun bulan cuma ada 12, kita tetap bisa menginputkannya dengan nominal sebesar 50, bahkan 1000. Sungguh super sekali. (Kalau ini udah aneh-aneh nih...)
Contoh :
Select Add_months('12-SEP-2013',1000) from dual
Maka akan memiliki result :
12-JAN-2097
     Penggunaan lain yang tidak kalah penting yaitu adalah pemakaian minus pada fitur ini. Yup, dengan minus bulan akan dikurangi dari tanggal yang kita inputkan.
Contoh :
Select Add_months('12-SEP-2013',-1) from dual
Maka akan memiliki result :
12-AUG-2013
     Lalu pertanyaannya, untuk apa sih syntax aneh macam begini digunakan? Memangnya ada orang yang akan melakukan penghitungan bulan?
Jawabannya : ADA!
Jelas, jelas, jelas. Setiap hari setiap saat, disadari atau tidak kita tak bisa lepas dari yang namanya tanggal alias Date. Dalam dunia bisnis dan perusahaan, tanggal merupakan komponen penting karena menyangkut masalah administrasi internal, koneksi dengan mitra usaha, hingga menjadi patokan dalam urusan pelanggan. Dan simak saja, banyak database di perusahaan besar, MAU TAK MAU menginputkan tanggal dalam setiap transaksi. Baik itu transaksi dengan stakeholder luar, transaksi jual beli dengan pelanggan, maupun untuk audit internal.
Nah, tugas kita sebagai seorang programmer, sudah barang tentu dituntut untuk bisa menyediakan data yang pas. Dan tanggal merupakan data yang sangat sensitif. Kesalahan satu hari, satu jam saja terkadang bisa menimbulkan petaka. Apalagi jika kita mendapatkan job untuk melakukan penghitungan tanggal. Hmm.. Dengan fitur Add_months ini, setidaknya kita bisa melakukan peringkasan script dalam proses tersebut, dan juga mudah untuk dipahami oleh programmer lain yang menjadi rekan kerja kita. Dan yang paling penting, fitur add_months membantu melakukan penghitungan bulan tidak secara manual, sehingga bisa meminimalisir kesalahan dari counting kita.

Insya Allah, semoga sedikit informasi ini bisa bermanfaat!