Teknik random data adalah mengambil sebuah data atau beberapa data secara acak dari sekumpulan data yang tersedia. Sebagai contoh sederhana, misalkan kita memiliki 10 buah data berupa bilangan bulat, kemudian kita ingin mengambil sebuah data 10 buah data tersebut secara acak.
Di dalam bahasa pemrograman, biasanya sudah tersedia sebuah function yang langsung bisa digunakan untuk merandom data, baik datanya berupa kumpulan bilangan (number) atau berupa array.
Selanjutnya, bagaimana dengan MySQL? misalkan kita memiliki sejumlah data di dalam sebuah tabel. Bisakah kita mengambil sejumlah data secara random? Yup.. jawabannya adalah bisa.
Artikel kali ini akan membahas bagaimana teknik merandom data bilangan float, bilangan bulat, dan yang ada di dalam sebuah tabel pada database MySQL. Tidak hanya itu, bagaimana kita merandom data berupa tanggal yang kita generate dalam interval waktu tertentu di MySQL juga akan dibahas.
Merandom Bilangan Float
Sebuah bilangan float mulai dari 0 hingga mendekati 1 dapat digenerate di MySQL, yaitu dengan menggunakan function RAND(), contohnya:
SELECT RAND()
Dari perintah di atas nantinya akan dihasilkan sebuah bilangan float tertentu, misalnya:

Beberapa bilangan float juga bisa digenerate sekaligus, dengan cara:
SELECT RAND() as bil1, RAND() as bil2, RAND() as bil3
Contoh hasilnya adalah:

Merandom Bilangan Bulat
Bilangan bulat pun dapat digenerate secara random di MySQL. Namun, teknik untuk merandom bulangan bulat perlu trik khusus, mengingat satu-satunya function untuk merandom bilangan di MySQL adalah RAND() seperti di atas, yang mengenerate secara random bilangan float.
Untuk merandom bilangan bulat di MySQL di antara range a dan b, formulanya adalah:
SELECT FLOOR(RAND() * (b-a+1) + a)
Dalam hal ini, function FLOOR() digunakan untuk membulatkan ke bawah dari bilangan float. Mengapa formulanya demikian? Begini logikanya.
Kita tahu bahwa RAND() adalah menghasilkan bilangan float mulai dari 0 hingga mendekati 1. Sehingga nilai RAND() paling kecil adalah 0. Apabila ini terjadi, maka nilai RAND() * (b-a+1) adalah 0. Akibatnya nilai RAND() * (b-a+1) + a sama dengan a.
Selanjutnya nilai RAND() terbesar adalah nilai yang mendekati 1. Dalam hal ini nilai dari RAND() * (b-a+1) adalah mendekati (b-a+1). Sehingga nilai dari RAND() * (b-a+1) + a adalah mendekati b+1. Dikarenakan ada function FLOOR(), oleh karenanya nilai yang mendekati b+1 dibulatkan ke bawah sehingga sama dengan b.
Dengan formula di atas, misalkan kita akan mengenerate bilangan bulat antara 1 dan 10, perintah yang digunakan adalah
SELECT FLOOR(RAND() * (10-1+1) + 1) as bil
Contoh outputnya adalah dihasilkan bilangan bulat sebagai berikut:

Sama seperti float, beberapa bilangan bulat juga bisa digenerate sekaligus, misalnya:
SELECT FLOOR(RAND() * (10-1+1) + 1) as bil1, FLOOR(RAND() * (10-1+1) + 1) as bil2, FLOOR(RAND() * (10-1+1) + 1) as bil3
Contoh outputnya adalah

Merandom Data Dari Tabel
Misalkan kita punya sebuah tabel berisi sejumlah data. Selanjutnya kita ingin mengambil sebuah data secara random dari seluruh data yang ada dalam tabel. Bagaimana caranya? Caranya adalah dengan menggunakan function RAND() di bagian ORDER BY di dalam SELECT nya. Sekaligus kita tambahkan LIMIT untuk membatasi berapa jumlah data yang diambil secara random.
Secara umum, sintaksnya adalah sebagai berikut
SELECT * FROM mytabel ORDER BY RAND() LIMIT n
Perintah di atas digunakan untuk merandom n data dari tabel mytable.
Sebagai contoh misalkan, akan diambil 1 data secara random dari tabel rental. Perintahnya adalah:
SELECT * FROM rental ORDER BY RAND() LIMIT 1
Merandom Tanggal
Data format date pun, dapat digenerate secara random di MySQL dalam selang tanggal tertentu. Untuk melakukan hal ini juga perlu tekniknya.
Secara umum untuk merandom sebuah tanggal dari tanggal tertentu (misal: x) sampai dengan d hari ke depan, sintaks perintahnya adalah sebagai berikut:
SELECT x + INTERVAL FLOOR(RAND() * d) DAY
Mengapa formulanya seperti di atas? Begini logikanya. Misalkan hasil RAND() terkecil muncul, yaitu 0. Sehingga nilai RAND() * d = 0. Akibatnya nilai FLOOR(RAND() * D) = 0 sebagai interval tanggalnya. Sehingga diperoleh tanggal acaknya adalah x ditambah 0 hari ke depan yaitu tanggal x itu sendiri. Sedangkan misalkan hasil RAND() terbesar muncul, yaitu bilangan float yang mendekati 1. Sehingga nilai RAND() * d adalah mendekati d. Akibatnya tanggal random terbesar yang muncul adalah x ditambah d hari ke depan.
Sehingga misalkan kita ingin merandom sebuah tanggal antara tanggal ’20 Des 2021′ sampai 10 hari ke depan, perintahnya adalah:
SELECT '2021-12-20' + INTERVAL FLOOR(RAND() * 10) DAY as tgl
Salah satu contoh tanggal yang dihasilkan adalah

Oya, bagaimana juga tanggal yang dirandom adalah antara tanggal tertentu sampai d hari ke belakang? Caranya cukup mudah, yaitu dengan mengganti tanda + (plus) menjadi - (minus) pada SELECT di atas, misalnya:
SELECT CURRENT_DATE - INTERVAL FLOOR(RAND() * 10) DAY as tgl
Perintah di atas adalah mengenerate sebuah tanggal random antara hari ini (CURRENT DATE) sampai 10 hari sebelumnya.
Bagaimana mudah bukan caranya? In syaa allah, di pembahasan berikutnya akan dijelaskan pemanfaatan teknik random data di MySQL untuk mengenerate banyak data dummy di mana datanya bersifat referensial menggunakan stored procedure. Biasanya data dummy ini digunakan untuk menguji performa sebuah sistem atau aplikasi dalam mengolah sejumlah besar data sebelum diimplementasikan secara riil.


