MySQL Bagian 4 - Latihan Query Lanjut


I.  Tabel Pegawai

Untuk latihan kali ini, kembali menggunakan tabel Pegawai, struktur database dari tabel tersebut adalah :

mysql> desc pegawai;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| nip       | varchar(5)  | NO   | PRI | NULL    |       |
| nama      | varchar(25) | YES  |     | NULL    |       |
| alamat    | varchar(30) | YES  |     | NULL    |       |
| tgl_lahir | date        | YES  |     | NULL    |       |
| no_telp   | varchar(15) | YES  |     | NULL    |       |
| thn_masuk | year(4)     | YES  |     | NULL    |       |
| golongan  | char(1)     | YES  |     | NULL    |       |
| gaji      | int(11)     | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
8 rows in set (0.11 sec)

Isi record yang ada di dalam tabel Pegawai adalah sebagai berikut :

mysql> select * from pegawai;
+-----+-------------------+-------------------+------------+-------------+-----------+----------+---------+
| nip | nama              | alamat            | tgl_lahir  | no_telp     | thn_masuk | golongan | gaji    |
+-----+-------------------+-------------------+------------+-------------+-----------+----------+---------+
| 001 | Ahmad Burhanuddin | Jln Buah Batu 15b | 1990-12-12 | 08123334543 |      2010 | 3        | 1250000 |
| 002 | Amin Imsyorry     | Jln Cipaku 5      | 1989-12-02 | 08123337777 |      2009 | 2        | 1350000 |
| 003 | Budhy Bungaox     | Jln Cisoka 112    | 1989-01-20 | 0812367654  |      2011 | 4        | 1050000 |
| 004 | Zulkarnaen        | Jln Alhambra 2    | 1991-02-20 | 0812367655  |      2009 | 1        | 1450000 |
| 005 | Dewi Sudewa       | Jln Iman 34       | 1990-12-02 | 08123337766 |      2009 | 1        | 1450000 |
| 006 | Ina Nurlian       | Jln Cisatu 1      | 1993-08-09 | 0812345676  |      2011 | 4        | 1050000 |
| 007 | Cheppy Chardut    | Jln Cilama 13     | 1992-07-09 | 0812345688  |      2011 | 4        | 1050000 |
| 008 | Dodong M          | Jln Sutami 16     | 1990-07-10 | 0812345555  |      2010 | 3        | 1250000 |
+-----+-------------------+-------------------+------------+-------------+-----------+----------+---------+
8 rows in set (0.11 sec)           

II. Membuat Query SQL dari Tabel Pegawai

Untuk membuat query dengan persyaratan lebih dari satu kita dapat menggunakan klausa ‘or’ lebih dari sekali  seperti contoh dibawah ini, sebuah query yang menampilkan pegawai yang mempunyai nip 001 atau 002 atau 003
  • select nip, nama from pegawai where nip = '001' or nip = '002' or nip = '003';
perintah seperti diatas terasa kurang praktis karena penggunaan ‘or’ yang berulang, sebagai penggantinya dapat menggunakan perintah ‘in’ setelah field nip pada persyaratan ‘where’ seperti di bawah ini :
  • select nip, nama from pegawai where nip in ('001','002','003');
untuk lawan data diatas,tinggal sisipkan ‘not’ sebelum ‘in’
  • select nip, nama from pegawai where nip not in ('001','002','003');
untuk mencari karakter tertentu dalam sebuah field tidak hanya dapat dilakukan menggunakan perintah ‘like’ dan ‘%’ saja tetapi dapat menggunakan perintah regexp (regular expression). Perintah ini mirip dengan ‘Like’ misalnya seperti contoh dibawah ini, query yang berfungsi untuk mencari nama pegawai yang diawali karakter ‘Em’, tanda ‘^’ menyatakan awalan.  
  • select nip, nama from pegawai where nama regexp '^Em';
sedangkan untuk mencari akhiran dengan karakter tertentu gunakan tanda ‘$’ dibelakang karakter yang akan dicari seperti contoh berikut
  • select nip, nama from pegawai where nama regexp 'di$';
berikut ini query untuk menampilkan data pegawai yang diawali dengan karakter A, B dan C
  • select nip, nama from pegawai where nama regexp '^[ABC]';
kadang kala kita ingin menampilkan seluruh data dari sebuah tabel dengan urutan tertentu (sorting) berdasarkan urutan dari sebuah field. Untuk mengurutkan, gunakan perintah ‘order by’ pada field yang menjadi patokan seperti contoh berikut, dimana tabel Pegawai diurutkan berdasarkan field tgl_lahir, default pengurutan adalah ascending (dari kecil ke besar)
  • select * from pegawai order by tgl_lahir;
jika urutan ingin descending, buatlah query seperti berikut
  • select * from pegawai order by thn_masuk desc;
query berikut menggunakan perintah ‘group by’ yang berfungsi menggabungkan beberapa record yang mempunyai isi field tertentu yang sama, duplikasi akan dihilangkan. Query berikut akan mengelompokan data pegawai berdasarkan field golongan
  • select * from pegawai group by golongan;
gunakan perintah ‘having’ untuk menambah persyaratan dalam pengelompokan, contoh query berikut mirip dengan query diatas hanya saja golongan = 1 tidak ditampilkan
  • select nip from pegawai group by golongan having golongan <> '1';

III. Query SQL dengan menggunakan fungsi aggregasi

Fungsi aggregat kadang-kadang disebut pula fungsi ringkasan. Fungsi ini akan menampilkan ringkasan dari sebuah field yang bisa dihitung, dalam latihan ini kita akan menggunakan field gaji yang bertipe integer. Contoh pertama adalah mencari rata-rata (average) dari seluruh gaji pegawai dengan menggunakan fungsi avg
  • select avg(gaji) from pegawai;
mencari rata-rata gaji yang dikelompokan berdasarkan field golongan
  • select golongan, avg(gaji) from pegawai
group by golongan;
mencari gaji terkecil gunakan fungsi min
  • select min(gaji) from pegawai;
mencari gaji terbesar gunakan fungsi max
  • select max(gaji) from pegawai;
hitung jumlah pegawai menggunakan fungsi count dengan berpatokan pada field nip
  • select count(nip) from pegawai;
hitung jumlah pegawai berdasarkan pengelompokan golongan
  • select golongan, count(*) from pegawai
group by golongan;
hitung jumlah pegawai dengan menghilangkan duplikasi
  • select count(distinct golongan) from pegawai;
jumlahkan seluruh gaji pegawai dalam tabel Pegawai dengan fungsi sum (summarize)
  • select sum(gaji) from pegawai;

IV. Latihan

Buatlah query dari tabel Pegawai untuk menjawab permintaan data berikut ini :
1.      Cari nama pegawai yang dimulai dengan huruf ‘B’.
2.      Tampilkan seluruh nama pegawai, kecuali yang namanya dimulai dengan huruf ‘A’.
3.      Cari nip, nama dan alamat pegawai yang mulai masuk kerja tahun 2010.
4.      Tampilkan nip dan nama pegawai yang mulai masuk kerja antara tahun 2010 sampai dengan tahun 2012.
5.      Cari seluruh field pegawai yang gajinya lebih dari atau sama dengan Rp. 1.250.000,-
6.      Tampilkan nip pegawai yang gajinya antara Rp. 1.000.000,- sampai dengan Rp. 1.500.000,-
7.      Tampilkan seluruh field pegawai yang memiliki golongan 1, 2 dan 3.
8.      Tampilkan seluruh field pegawai kecuali yang memiliki golongan 2.
9.      Cari nip, nama, alamat dan gaji pegawai yang lahir tahun 1989.

10.  Cari nip, nama, alamat dan gaji pegawai yang lahir tahun 1988 sampai dengan 1990. 

Comments