+++ ARJUNA +++: Juni 2011
SELAMAT DATANG DI BLOGKU " ARJUNA"

tulisan arjun

Senin, 27 Juni 2011

tutorial Mysql 11


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)