0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan6 halaman

Studi Kasus SQL

Tabel karyawan dan cuti_karyawan digunakan untuk menyimpan data karyawan dan cuti. Pertanyaan diminta menampilkan 3 karyawan pertama masuk dan daftar karyawan sedang cuti dengan join tabel dan filter tanggal.

Diunggah oleh

saorise 22
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan6 halaman

Studi Kasus SQL

Tabel karyawan dan cuti_karyawan digunakan untuk menyimpan data karyawan dan cuti. Pertanyaan diminta menampilkan 3 karyawan pertama masuk dan daftar karyawan sedang cuti dengan join tabel dan filter tanggal.

Diunggah oleh

saorise 22
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 6

STUDI KASUS SQL

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

Table karyawan

Nomor_induk Nama Alamat Tanggal_lahir Tanggal_masuk


[PK] character text data date
character varying(30)
varying(10)

IP06001 Agus Jln. Gajah Mada 1970-08-01 2006-07-07


115A, Jakarta Pusat

IP06002 Amin Jln. Bungur sari v 1977-05-03 2006-07-07


No, 178, bandung

IP06003 Yusuf Jln. Yosodpuro 15, 1973-08-09 2006-07-07


surabaya

IP07004 Alyssa Jln. Cendana 1983-02-14 2007-01-05


No. 6 Bandung

IP07005 Maulana Jln. Ampera Raya No 1 1985-10-10 2007-02-05

IP07006 Afika Jln. Pejaten Barat No 6A 1987-03-09 2007-06-09

IP07007 James Jln. Padjadjaran 1988-05-19 2007-06-09


No. 111, bandung

IP09008 Octavanus Jln. Gajah Mada 1988-10-07 2008-08-08


101. Semarang

IP09009 Nugroho Jln. Duren Tiga 1988-01-20 2008-11-11


196, Jakarta selatan

IP090010 Raisa Jln. Nangka Jakarta 1989-12-29 2009-02-09


selatan
 
Table cuti_karyawan

No id nomor_induk Tanggal_mulai Lama_cuti keterangan


[PK] character date smallint text
serial varying(10)

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.

gambaran untuk tabel database cuti karyawan sebagai berikut:

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

Query untuk membuat tabel cuti_karyawan beserta datanya:


1
2
3
4
CREATE TABLE `cuti_karyawan` (
5
  `id` int(11) NOT NULL AUTO_INCREMENT,
6
  `nomor_induk` varchar(7) NOT NULL,
7
  `tanggal_mulai` date NOT NULL,
8
  `lama_cuti` int(11) NOT NULL,
9
  `keterangan` text NOT NULL,
1
  PRIMARY KEY (`id`)
0
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
1
 
1
/* masukkan data */
1
INSERT INTO `cuti_karyawan` (`id`, `nomor_induk`, `tanggal_mulai`, `lama_cuti`, `keterangan`)
2
VALUES
1
(1, 'IP06001', '2015-11-18', 3, 'Acara Keluarga'),
3
(2, 'IP06001', '2012-02-13', 2, 'Anak sakit'),
1
(3, 'IP07007', '2012-02-15', 1, 'Nenek sakit'),
4
(4, 'IP06003', '2012-02-17', 1, 'mendaftar sekolah untuk anak'),
1
(5, 'IP07006', '2012-02-20', 5, 'menikah'),
5
(6, 'IP07004', '2012-02-27', 1, 'imunisasi anak');
1
6
1
7
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:
1 SELECT *
2 FROM `karyawan`
3 ORDER BY tanggal_masuk ASC
4 LIMIT 3

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:

1 SELECT ck.* , k.nama


2 FROM `cuti_karyawan` ck
3 JOIN `karyawan` k ON ck.nomor_induk = k.nomor_induk

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

3. Filter data berdasarkan tanggal_mulai dan tanggal_selesai, lalu SELECT semua


kolom yang dibutuhkan. Sehingga query lengkapnya adalah sebagai berikut:
1 SELECT tgl.nomor_induk, tgl.nama, tgl.tanggal_mulai, tgl.lama_cuti, tgl.keterangan
2 FROM (
3 SELECT ck.* , k.nama, date_add( tanggal_mulai, INTERVAL lama_cuti
4 DAY ) AS tanggal_selesai
5 FROM `cuti_karyawan` ck
6 JOIN `karyawan` k ON ck.nomor_induk = k.nomor_induk
7 ) AS tgl
8 WHERE now() BETWEEN tgl.tanggal_mulai AND tgl.tanggal_selesai

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.

Demikianlah jawaban pertanyaan nomor 1 dan 2

Anda mungkin juga menyukai