Fungsi Statistik Dasar
Sekarang siapa saja yang gajinya diantara Rp 1.500.000 dan
Rp 2.500.000? Tampilan data diurut
berdasarkan kolom gaji dan nama karyawan
mysql> select * from karyawan
-> where gaji >=
1500000
-> and gaji <= 2500000
-> order by gaji,
nama ;
+------+------------+--------+------------+---------+------------+---------+
| noid | nama | jenkel
| kota | kodepos | tgllahir | gaji
|
+------+------------+--------+------------+---------+------------+---------+
| 3 | Ryan Cakep | L | Jakarta | 12111
| 1981-03-21 | 1500000 |
| 14 | Wawan | P
| Semarang | 40123 | 1971-11-12 | 1600000 |
| 36 | Mardiatun | P
| Bogor | 12345 | 1975-07-07 | 1625000 |
| 18 | Dian | P
| Jakarta | 12345 | 1980-07-07 | 1650000 |
| 15 | The Cute | L
| Jakarta | 12111 | 1977-03-21 | 1700000 |
| 37 | Andika | L
| Bandung | 41011 | 1978-10-02 | 1725000 |
| 4 | Zukarman | L
| Bekasi | 17211 | 1978-08-10 | 1750000 |
| 16 | Marpaung | L
| Surabaya | 17211 | 1988-08-10 | 1800000 |
| 38 | Siti | P
| Medan | 40123 | 1988-11-12 | 1825000 |
| 19 | Donno | L
| Bandung | 41011 |
1971-10-02 | 1850000 |
| 17 | Yono | P
| Bogor | 00000 | 1989-06-09 | 1900000 |
| 39 | Rohimat | L
| Jakarta | 12111 | 1980-03-21 | 1925000 |
| 20 | Ratu | P
| Yogyakarta | 40123 |
1972-11-12 | 1950000 |
| 5 | Yuliawati | P
| Bogor | 00000 | 1982-06-09 | 2000000 |
| 21 | Bambang | L
| Jakarta | 12111 | 1982-03-21 | 2100000 |
| 28 | Gunadi | L
| Bekasi | 17211 | 1978-08-10 | 2125000 |
| 25 | Subur |
L | Bandung | 41011
| 1977-10-02 | 2150000 |
| 22 | Dadang | L
| Surabaya | 17211 | 1977-08-10 | 2200000 |
| 29 | Yossy | P
| Bogor | 00000 | 1982-06-09 | 2225000 |
| 6 | Mawar | P
| Bogor | 12345 | 1985-07-07 | 2250000 |
| 23 | Yuliawati | P
| Bogor | 00000 | 1974-06-09 | 2300000 |
| 30 | Melia | P
| Malang | 12345 | 1981-07-07 | 2325000 |
| 26 | Banowati | P
| Malang | 40123 | 1978-11-12 | 2350000 |
| 24 | Miranda | P
| Bogor | 12345 | 1980-07-07 | 2400000 |
| 31 | Anwar | L
| Purwakarta | 41011 |
1972-10-02 | 2425000 |
| 27 | Gungun | L
| Jakarta | 12111 | 1981-03-21 | 2450000 |
+------+------------+--------+------------+---------+------------+---------+
26 rows in set (0.00 sec)
Sekarang berapa orang karyawan yang gajinya di bawah Rp
2.000.000?
mysql> select count(*) from karyawan
-> where gaji <
2000000 ;
+----------+
| count(*) |
+----------+
| 29 |
+----------+
1 row in set (0.01 sec)
Berapakah gaji rata-rata karyawan?
mysql> select avg(gaji) from karyawan ;
+--------------+
| avg(gaji) |
+--------------+
| 1719642.8571 |
+--------------+
1 row in set (0.41 sec)
Berapakah nilai gaji yang terbesar?
mysql> select max(gaji) from karyawan ;
+-----------+
| max(gaji) |
+-----------+
| 2450000 |
+-----------+
1 row in set (0.00 sec)
Berapakah nilai gaji yang terkecil?
mysql> select min(gaji) from karyawan ;
+-----------+
| min(gaji) |
+-----------+
| 1000000 |
+-----------+
1 row in set (0.00 sec)
Dan berapakah jumlah gaji seluruh karyawan?
mysql> select sum(gaji) from karyawan ;
+-----------+
| sum(gaji) |
+-----------+
| 72225000 |
+-----------+
1 row in set (0.00 sec)
Operator Precedence
Operator precedence adalah tingkatan hirarki dalam
memproses serangkaian operator.
Tingkatan
hirarki
Paling Tinggi
Paling Rendah
Jenis Operator
BINARY
NOT !
- (unary minus)
* / %
+ -
<< >>
&
|
< <= = <=> != <> >= > IN IS LIKE
REGEXP RLIKE
BETWEEN
AND &&
OR ||
Semakin keatas posisi operator, maka semakin tinggi tingkat
hirarki operator tersebut. Begitu pula
sebaliknya, semakin rendah posisinya maka akan semakin
lemah hirarkinya.
Untuk operator yang sama kuat, misal + dan - digabung
dengan operator * / %, maka akan
ditentukan hirarkinya tergantung dari posisi mana yang
paling kiri/paling awal ditemukan. Dan
untungnya posisi hirarki ini dapat diubah dengan bantuan
tanda kurung "(" dan ")". Sekarang kita
lihat penerapannya.
mysql> select 10+15-11*2, (10+15-11)*2,
-> 2*6-5, 2*(6-5) ;
+------------+--------------+-------+---------+
| 10+15-11*2 | (10+15-11)*2 | 2*6-5 | 2*(6-5) |
+------------+--------------+-------+---------+
| 3 | 28 | 7 |
2 |
+------------+--------------+-------+---------+
1 row in set (0.00 sec)
Anda bisa perhatikan bahwa walaupun angka dan operatornya
sama, tapi hasilnya bisa berbeda.
Dan itu karena adanya peranan dari tanda kurung
"(" dan ")" yang akan mengubah peta posisi
hirarki operator....
Operator LIKE, NOT LIKE, REGEXP
Operator LIKE, NOT LIKE, REGEXP akan banyak kita
gunakan terutama dalam operasi
karakter.
Sekarang kita kan coba menggunakan operator LIKE.
Operator LIKE ini digunakan untuk mencari
data yang "menyerupai" atau "hampir
sama" dengan kriteria tertentu. Biasanya untuk mencari
data string/teks. Simbol "%" digunakan
untuk membantu pelaksanaan operator LIKE. Posisi "%"
sangat berpengaruh dalam menentukan kriteria. Kita langsung
dengan contoh-contohnya saja ya
biar lebih jelas penggunaannya...
Tampilkan data karyawan yang namanya berawalan huruf
"a": (perhatikan posisi simbol persennya
"%")
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
"a%" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berawalan huruf
"d":
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
"d%" ;
+------+--------+
| noid | nama |
+------+--------+
| 13 | Dadan |
| 18 | Dian |
| 19 | Donno |
| 22 | Dadang |
+------+--------+
4 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berakhiran
huruf "i". Perhatikan posisi penulisan tanda
"%".:
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
"%i" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 2 | Sundariwati |
| 5 | Yuliawati |
| 7 | Sobari |
| 23 | Yuliawati |
| 26 | Banowati |
| 28 | Gunadi |
| 32 | Susilowati |
| 38 | Siti |
| 41 | Yanti |
| 42 | Miranti |
+------+--------------+
11 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berakhiran "wati":
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
"%wati" ;
+------+-------------+
| noid | nama |
+------+-------------+
| 2 | Sundariwati |
| 5 | Yuliawati |
| 23 | Yuliawati |
| 26 | Banowati |
| 32 | Susilowati |
+------+-------------+
5 rows in set (0.00 sec)
Bagaimana caranya agar operator LIKE dapat membedakan huruf
besar dan kecil... Sederhana saja,
cukup dengan menambahkan kata BINARY saja setelah
perintah LIKE (sehingga perintahnya
menjadi LIKE BINARY). Kita lihat contohnya...
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
BINARY "a%" ;
Empty set (0.34 sec)
Kenapa hasilnya menjadi "Empty set"? Kita
coba dengan mengubah perintah tadi menjadi:
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
BINARY "A%" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
Ya dengan menggunakan LIKE BINARY, penulisan huruf
"a" akan dibedakan artinya dengan "A".
Jelas kan?
Sekarang bagaimana kalau kita ingin menampilkan data,
dengan kriteria bukan diawal atau diakhir
kalimat, tapi berada diantara sebuah kata/kalimat?
Misal ada berapa nama karyawan yang
memiliki kata "lia"?
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
BINARY "%lia%" ;
+------+-----------+
| noid | nama |
+------+-----------+
| 5 | Yuliawati |
| 8 | Melia |
| 23 | Yuliawati |
| 30 | Melia |
+------+-----------+
4 rows in set (0.00 sec)
Atau memiliki kata"Di" pada namanya?
mysql> select noid, nama
-> from karyawan
-> where nama LIKE
BINARY "%Di%" ;
+------+------+
| noid | nama |
+------+------+
| 18 | Dian |
+------+------+
1 row in set (0.00 sec)
Operator REGEXP (singkatan dari REGular EXPressions)
merupakan bentuk lain dari operator
LIKE, dengan fungsi yang lebih disempurnakan. Operator
REGEXP biasanya ditemani juga dengan
simbol-simbol tertentu dalam melaksanakan tugasnya,
seperti:
.
[?]
^
$
Simbol
Keterangan
Satu tanda titik (.) untuk mewakili satu
karakter
Untuk mewakili beberapa karakter atau
range yang ditentukan.
Untuk posisi awal dari sebuah kriteria
yang ditentukan
Untuk posisi akhir dari sebuah kriteria
yang ditentukan
Kita langsung saja pada contohnya. Tampilkan nama karyawan
yang berawalan huruf 'a':
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"^a" ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 31 | Anwar |
| 37 | Andika |
+------+--------------+
3 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berawalan huruf
"d".
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"^d" ;
+------+--------+
| noid | nama |
+------+--------+
| 13 | Dadan |
| 18 | Dian |
| 19 | Donno |
| 22 | Dadang |
+------+--------+
4 rows in set (0.00 sec)
Tampilkan nama karyawan yang berawalan huruf 'a' sampai
dengan huruf 'd':
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"^[a-d]"
-> order by nama ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 37 | Andika |
| 31 | Anwar |
| 21 | Bambang |
| 26 | Banowati |
| 40 | Beno |
| 13 | Dadan |
| 22 | Dadang |
| 18 | Dian |
| 19 | Donno |
+------+--------------+
10 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berakhiran huruf
"i":
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"i$"
-> order by nama ;
+------+--------------+
| noid | nama |
+------+--------------+
| 1 | Ahmad Sobari |
| 26 | Banowati |
| 28 | Gunadi |
| 42 | Miranti |
| 38 | Siti |
| 7 | Sobari |
| 2 | Sundariwati |
| 32 | Susilowati |
| 41 | Yanti |
| 5 | Yuliawati |
| 23 | Yuliawati |
+------+--------------+
11 rows in set (0.00 sec)
Tampilkan data karyawan yang namanya berakhiran
"wati":
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"wati$"
-> order by nama ;
+------+-------------+
| noid | nama |
+------+-------------+
| 26 | Banowati |
| 2 | Sundariwati |
| 32 | Susilowati |
| 5 | Yuliawati |
| 23 | Yuliawati |
+------+-------------+
5 rows in set (0.00 sec)
Tampilkan nama karyawan yang panjangnya 10 karakter:
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"^..........$" ;
+------+------------+
| noid | nama |
+------+------------+
| 3 | Ryan Cakep |
| 9 | Zanda Cute |
| 32 | Susilowati |
+------+------------+
3 rows in set (0.00 sec)
Atau perintah diatas bisa juga ditulis dengan:
mysql> select noid, nama
-> from karyawan
-> where nama REGEXP
"^.{10}$" ;
+------+------------+
| noid | nama |
+------+------------+
| 3 | Ryan Cakep |
| 9 | Zanda Cute |
| 32 | Susilowati |
+------+------------+
3 rows in set (0.00 sec)