Studi Kasus Sebuah Soal Query SQL Data Cuti Karyawan

Suggested by SMS

Assalamu’alaikum wr. wb, para pembaca yang budiman. Seperti artikel sebelumnya (tentang query jadwal kuliah), artikel kali ini pun saya akan membahas cara merancang query SQL. Perbedaannya, kali ini yang akan saya bahas adalah studi kasus tentang data cuti karyawan

Disini saya membuat beberapa soal tentang query SQL. Sekaligus saya akan membahasnya dari soalnya yang saya buat ini.

Berikut pertanyaanya….??

Diketahui terdapat table “karyawan” untuk menyimpan data karyawan dan table “cuti_karyawan” untuk menyimpan data cuti yang dilakukan karyawan

Table karyawan

No Nomor_induk

[PK] character varying(10)

Nama

character varying(30)

Alamat

text

Tanggal_lahir

data

Tanggal_masuk

date

1 IP06001 Agus Jln. Gajah Mada 115A, Jakarta Pusat 1970-08-01 2006-07-07
2 IP06002 Amin Jln. Bungur sari v No, 178, bandung 1977-05-03 2006-07-07
3 IP06003 Yusuf Jln. Yosodpuro 15, surabaya 1973-08-09 2006-07-07
4 IP07004 Alyssa Jln. Cendana No. 6 Bandung 1983-02-14 2007-01-05
5 IP07005 Maulana Jln. Ampera Raya No 1 1985-10-10 2007-02-05
6 IP07006 Afika Jln. Pejaten Barat No 6A 1987-03-09 2007-06-09
7 IP07007 James Jln. Padjadjaran No. 111, bandung 1988-05-19 2007-06-09
8 IP09008 Octavanus Jln. Gajah Mada 101. Semarang 1988-10-07 2008-08-08
9 IP09009 Nugroho Jln. Duren Tiga 196, Jakarta selatan 1988-01-20 2008-11-11
10 IP090010 Raisa Jln. Nangka Jakarta selatan 1989-12-29 2009-02-09

 

Table cuti_karyawan

No id

[PK] serial

nomor_induk

character varying(10)

Tanggal_mulai

date

Lama_cuti

smallint

keterangan

text

1 1 IP06001 2012-02-01 3 Acara keluar
2 2 IP06001 2012-02-13 2 Anak sakit
3 3 IP07007 2012-02-15 1 Nenek sakit
4 4 IP06003 2012-02-17 1 Mendaftar sekolah anak
5 5 IP07006 2012-02-20 5 Menikah
6 6 IP07004 2012-02-27 1 Imunisasi anak

 

Tuliskan SQL untuk :

  1. Menampilkan 3 karyawan yang pertama kali masuk.
  2. Menampilkan daftar karyawan yang saat ini sedang cuti. Daftar berisi nomor_induk, nama, tanggal_mulai, lama_cuti dan keterangan.
  3. Menampilkan daftar karyawan yang sudah cuti lebih dari satu kali. Daftar berisi no_induk, nama, jumlah (berapa kali cuti).
  4. Menampilkan sisa cuti tiap karyawan tahun ini, jika di ketahui jatah cuti setiap karyawan tahun ini adalah 12. Daftar berisi no_induk, nama, sisa_cuti

 

Sebelum membahas pertanyaannya, saya berikan gambaran untuk tabel database cuti karyawan sebagai berikut:

Tabel karyawan:

tabel1

Tabel cuti_karyawan:

tabel2

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:

Query untuk membuat tabel cuti_karyawan beserta datanya:

Sekarang mari kita perhatikan pertanyaan pertama: menampilkan 3 karyawan yang pertama kali masuk. Untuk bisa menampilkan datanya, pertama kita urutkan dulu karyawan berdasarkan tanggal_masuk secara ascending (dari kecil ke besar) lalu diambil tiga row teratas. Berikut query-nya:

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:

tabellll

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

3. Filter data berdasarkan tanggal_mulai dan tanggal_selesai, lalu SELECT semua kolom yang dibutuhkan. Sehingga query lengkapnya adalah sebagai berikut:

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:

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:
tabel2

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.

Demikianlah jawaban pertanyaan nomor 1 dan 2 pada artikel part 1 ini, semoga bermanfaat bagi para pembaca sekalian. Untuk jawaban pertanyaan nomor 3 dan 4 silakan simak artikel berikutnya alias part 2.

Wassalamu’alaikum wr. wb.

(Visited 5,510 times, 1 visits today)

2 thoughts on “Studi Kasus Sebuah Soal Query SQL Data Cuti Karyawan

  1. November 23, 2015

    Ferry Reply

    Inspiratif ….
    jadi tau caranya mendefinisikan kolom bayangan mnjdi filter di where … trims….

    • November 27, 2015

      admin Reply

      nah seperti itu lah…
      sama sama

Leave a Reply

Your email address will not be published. Required fields are marked *