Diketahui terdapat table “karyawan” untuk menyimpan data karyawan dan table
“cuti_karyawan” untuk menyimpan data cuti yang dilakukan karyawan
Table karyawan
Tabel karyawan:
Tabel cuti_karyawan:
Sudah mulai terbayang kan kira-kira seperti apa struktur database-nya? Hehe,
Oke, yang akan dibahas pada part 1 ini adalah pertanyaan nomor 1 dan 2 saja.
Sebelumnya kita siapkan dulu tabel beserta datanya dengan menjalankan query
berikut ini:
Query untuk membuat tabel karyawan beserta datanya:
1
2
3
4 CREATE TABLE `karyawan` (
5 `nomor_induk` varchar(7) NOT NULL,
6 `nama` varchar(30) NOT NULL,
7 `alamat` text NOT NULL,
8 `tanggal_lahir` date NOT NULL,
9 `tanggal_masuk` date NOT NULL,
1 PRIMARY KEY (`nomor_induk`)
0 );
1
1 /* masukkan data */
1 INSERT INTO `karyawan` (`nomor_induk`, `nama`, `alamat`, `tanggal_lahir`, `tanggal_masuk`)
2 VALUES
1 ('IP06001', 'Agus', 'Jln Gajah Mada 115A, Jakarta Pusat', '1970-08-01', '2006-07-07'),
3 ('IP06003', 'Yusuf', 'Jln Yosodipuro 15, Surakarta', '1973-08-09', '2006-07-07'),
1 ('IP07004', 'Alyssa', 'Jln Cendana No. 6, Bandung', '1983-02-14', '2007-01-05'),
4 ('IP07006', 'Afika', 'Jln Pejaten Barat No. 6A', '1987-03-09', '2007-06-09'),
1 ('IP07007', 'James', 'Jln Padjdjaran No. 111, Bandung', '1988-05-19', '2006-06-09');
5
1
6
Bisa dilihat dengan jelas bahwa sintaks untuk mengurutkan data tabel adalah
ORDER BY, dan sintaks untuk mengambil tiga row teratas adalah LIMIT. Query yang
sangat sederhana, bukan? Berikut hasil query-nya:
Sekarang kita lanjut ke pertanyaan kedua: menampilkan daftar karyawan yang saat
ini sedang cuti. Daftar berisi nomor_induk, nama, tanggal_mulai, lama_cuti, dan
keterangan. Tahapan perancangan query-nya adalah:
1. Tampilkan data cuti karyawan beserta nama karyawan. Dengan kata lain, men-
join-kan tabel cuti_karyawan dengan karyawan. Query-nya adalah:
2. Hitung tanggal selesai cuti berdasarkan tanggal mulai dan lama cuti, lalu
tambahkan ke query SELECT yang sudah dibuat
1 SELECT ck.* , k.nama, date_add( tanggal_mulai, INTERVAL lama_cuti
2 DAY ) AS tanggal_selesai
3 FROM `cuti_karyawan` ck
4 JOIN `karyawan` k ON ck.nomor_induk = k.nomor_induk
Bisa dilihat di situ ada pembuatan alias untuk tabel hasil join menjadi “tgl”, gunanya
adalah agar kolom tanggal_selesai terdefinisi sehingga bisa dipakai untuk mem-filter
data pada bagian WHERE.
Jika kolom tanggal_selesai langsung dipakai tanpa membuat tabel alias, maka
kolom tersebut tidak akan dikenali oleh SQL. Dengan kata lain, seperti ini:
1 SELECT ck.* , k.nama, date_add( tanggal_mulai, INTERVAL lama_cuti
2 DAY ) AS tanggal_selesai
3 FROM `cuti_karyawan` ck
4 JOIN `karyawan` k ON ck.nomor_induk = k.nomor_induk
5 WHERE now() BETWEEN ck.tanggal_mulai AND tanggal_selesai
Jika query di atas dijalankan, maka akan terjadi error karena kolom tanggal_selesai
tidak terdefinisi. Sekarang mari kita lihat hasil dari query lengkapnya berikut ini:
Nah, bisa dilihat data yang ditampilkan sudah benar. Tanggal hari ini adalah 19
November 2015, sehingga satu-satunya karyawan yang cuti pada saat ini adalah
Agus.