Bab 9. Studi Kasus
A. Penjelasan Studi Kasus Kapal Laut
Pada bab ini dibuat sebuah studi kasus dimana pada operasional sebuah kapal laut terdapat nama kapal laut pada tabel kapal, biodata singkat nahkoda pada tabel nahkoda, sekilas training nahkoda pada tabel training. Ketiga tabel diatas merupakan tabel master sebagai tabel utama yang diakses oleh tabel lain dalam sebuah relasi.
Selanjutnya terdapat tabel job sebagai tabel yang menyimpan jadwal nahkoda berlayar dengan kapal tertentu. Tabel tutor training merupakan tabel yang berisi daftar nahkoda senior yang berhak memberikan training pada nahkoda junior. Tabel mengikuti_training merupakan tabel yang menyimpan jadwal nahkoda junior yang mengikuti training
Gambar 9 Desain database kapal_laut
B. DDL Kapal Laut
create database kapal_laut;
use kapal_laut;
# TABEL NAHKODA create table nahkoda ( id_nahkoda int (3) not null, nama_nahkoda char(15) not null, rating int (2),
umur int (2),
PRIMARY KEY (id_nahkoda) );
show tables;
desc nahkoda;
insert into nahkoda values ('22', 'Mulyadi','7','45');
insert into nahkoda values ('29', 'Antoni','1','28');
insert into nahkoda values ('31', 'Eko Lelono','8','55');
insert into nahkoda values ('32', 'Mike','8','35');
insert into nahkoda values ('58', 'Lewis','8','44');
insert into nahkoda values ('64', 'Saputro','9','63');
insert into nahkoda values ('71', 'Eka Hadi','3','29');
insert into nahkoda values ('74', 'Dede H','3','30');
insert into nahkoda values ('85', 'Hanan S','5','37');
insert into nahkoda values ('95', 'Surendra','5','35');
select * from nahkoda;
# TABEL KAPAL create table kapal ( id_kapal int (3) not null, nama_kapal char(15) not null, warna_kapal char (10),
PRIMARY KEY (id_kapal) );
show tables;
desc kapal;
insert into kapal values ('101', 'Jaya Loka','Merah');
insert into kapal values ('102', 'Jaya Loka','Biru');
insert into kapal values ('103', 'Makmur Abadi','Hijau');
#TABEL JOB create table job (
id_nahkoda int (3) not null, id_kapal int (3) not null, tanggal date,
PRIMARY KEY (id_nahkoda,id_kapal) );
show tables;
desc job;
insert into job values ('22','101','2016-9-5');
insert into job values ('22','102','2016-9-8');
insert into job values ('22','103','2016-9-15');
insert into job values ('22','104','2016-9-20');
insert into job values ('31','102','2016-10-8');
insert into job values ('31','103','2016-10-15');
insert into job values ('31','104','2016-10-2');
insert into job values ('64','101','2016-10-5');
insert into job values ('64','102','2016-11-8');
insert into job values ('74','103','2016-11-15');
insert into job values ('29','104','2016-11-20');
insert into job values ('32','101','2016-11-5');
insert into job values ('58','104','2016-12-20');
insert into job values ('85','102','2016-12-8');
insert into job values ('85','103','2016-12-15');
insert into job values ('95','101','2016-12-5');
select * from job;
#TABEL training create table training (
id_training char (5) not null, nama_training char(40) not null, PRIMARY KEY (id_training) );
show tables;
desc training;
insert into training values ('TN_01','Training Nahkoda Muda');
insert into training values ('TN_02','Training Manajemen Kapal');
insert into training values ('TN_03','Training Mesin Kapal');
insert into training values ('TN_04','Training Nahkoda Menengah');
insert into training values ('TN_05','Training Nahkoda Mahir');
select * from training;
#TABEL mengikuti_training create table mengikuti_training ( id_training char (5) not null, id_nahkoda int (3) not null,
PRIMARY KEY (id_training,id_nahkoda) );
show tables;
desc mengikuti_training;
insert into mengikuti_training values ('TN_01','29');
insert into mengikuti_training values ('TN_02','29');
insert into mengikuti_training values ('TN_03','29');
insert into mengikuti_training values ('TN_02','71');
insert into mengikuti_training values ('TN_03','71');
insert into mengikuti_training values ('TN_05','85');
insert into mengikuti_training values ('TN_05','95');
select * from mengikuti_training;
C. DML Kapal Laut
1. Database KAPAL_LAUT
Tabel 10 Tabel isi dari entitas Nahkoda Tabel : Nahkoda
id_nahkoda nama_nahkoda rating umur
22 Mulyadi 7 45
29 Antoni 1 28
31 Eko Lelono 8 55
32 Mike 8 35
58 Lewis 8 44
64 Saputro 9 63
71 Eka Hadi 3 29
74 Dede H 3 30
85 Hanan S 5 37
95 Surendra 5 35
Tabel 11 Tabel isi dari entitas Kapal Tabel : Kapal
id_kapal nama_kapal warna_kapal
101 Jaya Loka Merah
102 Jaya Loka Biru
103 Makmur Abadi Hijau 104 Bintang Ufuk Hijau 105 Bintang Ufuk Merah
Tabel 12 Tabel isi dari entitas Job Tabel : Job
id_nahkoda nama_kapal tanggal
22 101 2016-9-5
Tabel 13 Tabel isi dari entitas Mengikuti_training Tabel : Mengikuti_training
id_training id_nahkoda
TN_01 29
Tabel 14 Tabel isi dari entitas Training TABEL : Training
id_training nama_training TN_01 Training Nahkoda Muda TN_02 Training Manajemen Kapal TN_03 Training Mesin Kapal
TN_04 Training Nahkoda Menengah TN_05 Training Nahkoda Mahir
2. Query Nahkoda
a. Usia Nahkoda tertua yang tersimpan dalam database select max(umur) from nahkoda;
id_nahkoda nama_nahkoda rating umur
64 Saputro 9 63
b. Nahkoda dengan ID tertinggi yang tersimpan dalam database
Select max(id_nahkoda) from nahkoda;
id_nahkoda nama_nahkoda rating umur
95 Surendra 5 35
c. Jumlah Nahkoda yang terdaftar dalam database select count(*) from nahkoda;
10
d. Nahkoda yang memiliki "di" dalam namanya
Select*from nahkoda where nama_nahkoda like '%di%';
id_nahkoda nama_nahkoda rating umur
22 Mulyadi 7 45
71 Eka Hadi 3 29
e. Nahkoda yang memiliki huruf E dalam namanya Select*from nahkoda where nama_nahkoda like '%E%';
id_nahkoda nama_nahkoda rating umur
f. Nahkoda yang mendekati masa pensiun (>=58 tahun) Select * from nahkoda where umur >=58;
id_nahkoda nama_nahkoda rating umur
64 Saputro 9 63
g. Nahkoda muda yang baru bergabung (antara 23 sampai 35 tahun)
SELECT * from nahkoda where umur between 23 and 35;
id_nahkoda nama_nahkoda rating umur
29 Antoni 1 28
32 Mike 8 35
71 Eka Hadi 3 29
74 Dede H 3 30
95 Surendra 5 35
h. Nahkoda dengan prestasi baik (rating >=7) Select * from nahkoda where rating >=7;
id_nahkoda nama_nahkoda rating umur
22 Mulyadi 7 45
31 Eko Lelono 8 55
32 Mike 8 35
58 Lewis 8 44
64 Saputro 9 63
i. Nahkoda muda butuh training (umur<=35 tahun dan rating<=2)
id_nahkoda nama_nahkoda rating umur
32 Mike 8 35
j. Nahkoda muda butuh training (umur<=35 tahun dan rating<=2)
Select * from nahkoda where umur <= 35 and rating <= 2;
id_nahkoda nama_nahkoda rating umur
29 Antoni 1 28
k. Rating terendah nahkoda yang disimpan dalam database select min(rating) from nahkoda;
1
l. Rating tertinggi nahkoda yang disimpan dalam database select max(rating) from nahkoda;
9
m. Nahkoda yang berumur 36 sampai dengan 54 tahun SELECT id_nahkoda, nama_nahkoda, umur
from nahkoda where umur between 36 and 54;
id_nahkoda nama_nahkoda usia_nahkoda
22 Mulyadi 45
58 Lewis 44
85 Hanan S 37
n. Nahkoda dengan rasio baik (perbandingan umur dan rating <=10)
select * from nahkoda
having umur/rating<=10;
id_nahkoda nama_nahkoda rating umur
o. Tampilkan data nahkoda tertua yang disimpan di databaseselect * from nahkoda
where umur IN (select max(umur) from select * from nahkoda
where umur >=ALL (select umur from nahkoda);
id_nahkoda nama_nahkoda rating umur
64 Saputro 9 63
p. Data Nahkoda yang tidak dapat job select * from nahkoda
where id_nahkoda NOT IN (select id_nahkoda from job);
id_nahkoda nama_nahkoda rating umur
71 Eka Hadi 3 29
q. Data Kapal yang mendapat job dan tersimpan dalam database
select * from kapal
where id_kapal IN (select id_kapal from job);
id_kapal nama_kapal warna_kapal
101 Jaya Loka Merah
102 Jaya Loka Biru
r. Data Kapal yang tidak mendapat job select * from kapal
where id_kapal NOT IN (select id_kapal from job);
s. Tampilkan data nahkoda dan jobnya diurutkan id_nahkoda
select * from nahkoda
where id_nahkoda IN (select distinct(id_nahkoda) from job);
id_nahkoda nama_nahkoda rating umur
22 Mulyadi 7 45
t. Tampilkan data nahkoda dan jobnya diurutkan rating select rating, id_nahkoda, nama_nahkoda,umur
from nahkoda
where id_nahkoda IN (select id_nahkoda from job) ORDER BY rating desc;
rating id_nahkoda nama_nahkoda umur
9 64 Saputro 63
id_kapal nama_kapal warna_kapal
101 Jaya Loka Merah
3. Query Kapal
a. Jumlah Nahkoda yang terdaftar dalam database dengan nama alias Jumlah_Nahkoda
select count(*) AS Jumlah_Nahkoda from kapal;
b. Jumlah kapal berwarna hijau
select count(*) from kapal where warna_kapal='Hijau';
2
c. Jumlah kapal JAYA LOKA
select count(*) from kapal where nama_kapal='Jaya Loka';
2
d. Tampilkan data kapal BINTANG UFUK
select * from kapal where nama_kapal='Bintang Ufuk';
e. tampilkan id_kapal untuk kapal MAKMUR ABADI select id_kapal from kapal where nama_kapal='Makmur Abadi';
f. Tampilkan nama kapal yang tersimpan dalam database select distinct(nama_kapal) from kapal;
Jumlah_Nahkoda 5
id_kapal nama_kapal warna_kapal 104 Bintang Ufuk Hijau
105 Bintang Ufuk Merah
id_kapal 103
nama_kapal Jaya Loka
g. Tampilkan warna kapal yang ada pada database select distinct(warna_kapal) from kapal;
4. Query Job
a. Nahkoda paling banyak job
SELECT id_nahkoda, count(*) as masing2 From job
GROUP BY id_nahkoda;
id_nahkoda masing2
22 4
b. Nahkoda yang dapat job paling banyak SELECT id_nahkoda, count(*) as 'masing2'
from job
GROUP BY id_nahkoda ORDER BY 'masing2' ASC LIMIT 1;
id_nahkoda masing2
22 4
c. Jumlah job yang tersimpan dalam database select id_nahkoda from nahkoda
where id_nahkoda IN (select id_nahkoda from job);
warna_kapal Merah
Biru Hijau
id_nahkoda
d. Jumlah job yang tersimpan dalam database dengan nama alias Banyak_job
select count(*) AS banyak_job from job;
banyak_job 16
e. Kapal yang mendapat job dan tersimpan dalam database select distinct(nama_kapal) from kapal
where id_kapal IN (select id_kapal from job);
nama_kapal Jaya Loka Makmur Abadi Bintang Ufuk
f. Menampilkan job sesuai urutan tanggal job tersebut, khusus yang dilaksanakan bulan september
select tanggal, id_nahkoda, id_kapal from job
ORDER BY tanggal ASC LIMIT 4;
tanggal id_nahkoda id_kapal
2016-9-5 22 101
2016-9-8 22 102
2016-9-15 22 103
2016-9-20 22 104
2016-12-5 95 101
2016-12-8 85 102
2016-12-15 85 103
2016-12-20 58 104
2016-11-5 32 101
2016-11-8 64 102
2016-11-15 74 103
2016-11-20 29 104
2016-10-5 64 101
2016-10-8 31 102
2016-10-15 31 103
2016-10-20 31 104
5. Query Join
a. Data Nahkoda sesuai job per tanggal nya
select b.tanggal,a.id_nahkoda, a.nama_nahkoda, a.rating, a.umur
from nahkoda a, job b
where a.id_nahkoda=b.id_nahkoda;
tanggal id_nahkoda nama_nahkoda rating umur
05/09/2016 22 Mulyadi 7 45
08/09/2016 22 Mulyadi 7 45
15/09/2016 22 Mulyadi 7 45
20/09/2016 22 Mulyadi 7 45
20/11/2016 29 Antoni 1 28
08/10/2016 31 Eko Lelono 8 55
15/10/2016 31 Eko Lelono 8 55
02/10/2016 31 Eko Lelono 8 55
05/11/2016 32 Mike 8 35
20/12/2016 58 Lewis 8 44
05/10/2016 64 Saputro 9 63
08/11/2016 64 Saputro 9 63
15/11/2016 74 Dede H 3 30
08/12/2016 85 Hanan S 5 37
15/12/2016 85 Hanan S 5 37
05/12/2016 95 Surendra 5 35
b. Data Kapal yang mendapat job dan tersimpan dalam database diurutkan pada tanggal job nya
select b.tanggal, a.id_kapal, a.nama_kapal, a.warna_kapal from kapal a, job b
where a.id_kapal=b.id_kapal ORDER BY tanggal;
tanggal id_kapal nama_kapal warna_kapal 20/09/2016 104 Bintang
Ufuk Hijau
02/10/2016 104 Bintang
Ufuk Hijau 20/11/2016 104 Bintang
Ufuk Hijau 20/12/2016 104 Bintang
Ufuk Hijau
c. Tampilkan data kapal yang berlayar 15 september 2016 select b.tanggal, a.id_kapal, a.nama_kapal, a.warna_kapal from kapal a, job b
where a.id_kapal=b.id_kapal AND tanggal ='2016-9-5';
tanggal id_kapal nama_kapal warna_kapal 05/09/2016 101 Jaya Loka Merah
d. Tampilkan record pada tabel job yang nahkodanya memiliki rating 9 ?
select b.tanggal,a.id_nahkoda, a.nama_nahkoda from nahkoda a, job b
tanggal id_nahkoda nama_nahkoda
05/10/2016 64 Saputro
08/11/2016 64 Saputro
e. Tampilkan job yang nahkodanya memiliki rating 7 sampai 9 diurutkan dari tanggal terlama
select b.*
from nahkoda a, job b
where a.id_nahkoda=b.id_nahkoda AND a.rating BETWEEN 7 AND 9
order by tanggal asc;
id_nahkoda id_kapal tanggal
22 101 05/09/2016
f. Tampilkan data peserta training beserta nama training yang tersimpan di database
select b.id_nahkoda, c.nama_nahkoda, a.nama_training from training a, mengikuti_training b, nahkoda c where a.id_training=b.training,
b.id_nahkoda=c.id_nahkoda ;
id_nahkoda nama_nahkoda nama_training
29 Antoni Training Nahkoda
Muda
29 Antoni Training Manajemen Kapal
71 Eka Hadi Training Manajemen Kapal
29 Antoni Training Mesin Kapal 71 Eka Hadi Training Mesin Kapal 85 Hanan S Training Nahkoda
Mahir
95 Surendra Training Nahkoda Mahir
g. Data Nahkoda yang berlayar pada bulan November select b.tanggal,a.id_nahkoda, a.nama_nahkoda from nahkoda a, job b
where a.id_nahkoda=b.id_nahkoda LIMIT 4;
tanggal id_nahkoda nama_nahkoda rating umur
05/09/2016 22 Mulyadi 7 45
08/09/2016 22 Mulyadi 7 45
15/09/2016 22 Mulyadi 7 45
20/09/2016 22 Mulyadi 7 45
h. Tampilkan id_nahkoda yang mengikuti training dan nama_training yang diikuti
SELECT mengikuti_training.id_nahkoda, training.nama_training
FROM training RIGHT JOIN mengikuti_training
ON training.id_training=mengikuti_training.id_training;
id_nahkoda nama_training 29 Training Nahkoda Muda 29 Training Manajemen Kapal 71 Training Manajemen Kapal 29 Training Mesin Kapal 71 Training Mesin Kapal
i. Data Nahkoda keseluruhan agar terlihat Nahkoda yang tidak mendapat job
select job.tanggal,nahkoda.id_nahkoda,
nahkoda.nama_nahkoda, nahkoda.rating, nahkoda.umur from nahkoda LEFT JOIN job
ON nahkoda.id_nahkoda=job.id_nahkoda;
tanggal id_nahkoda nama_nahkoda rating umur
05/09/2016 22 Mulyadi 7 45
08/09/2016 22 Mulyadi 7 45
15/09/2016 22 Mulyadi 7 45
20/09/2016 22 Mulyadi 7 45
20/11/2016 29 Antoni 1 28
08/10/2016 31 Eko Lelono 8 55
15/10/2016 31 Eko Lelono 8 55
02/10/2016 31 Eko Lelono 8 55
05/11/2016 32 Mike 8 35
20/12/2016 58 Lewis 8 44
05/10/2016 64 Saputro 9 63
08/11/2016 64 Saputro 9 63
NULL 71 Eka Hadi 3 29
15/11/2016 74 Dede H 3 30
08/12/2016 85 Hanan S 5 37
15/12/2016 85 Hanan S 5 37
05/12/2016 95 Surendra 5 35
D. DML Nested Soal Kapal Laut
1. Tampilkan data kapal yang berlayar yang berwarna hijau ! select * from kapal where id_kapal in (select id_kapal from job where warna_kapal ='hijau');
id_kapal nama_kapal warna_kapal 103 Makmur Abadi Hijau
104 Bintang Ufuk Hijau
2. Tampilkan rata rata umur nahkoda yang tidak mengikuti training dengan nama alias 'Rata-Rata Umur Nahkoda yg Tidak Training'!
select avg(umur) as 'Rata-Rata Umur Nahkoda yg Tidak Training' from nahkoda where id_nahkoda not in (select id_nahkoda from mengikuti_training);
Rata-Rata Umur Nahkoda yg Tidak Training 45.3333
3. Tampilkan data nahkoda yang mengikuti training dengan umur nahkoda > 25 !
select * from nahkoda where id_nahkoda in (select id_nahkoda from mengikuti_training where umur>25);
id_nahkoda nama_nahkoda rating umur
29 Antoni 1 28
71 Eka Hadi 3 29
85 Hanan S 5 37
95 Surendra 5 35
4. Tampilkan nama training yang diikuti nahkoda dengan id training antara TN_02 sampai TN_04 !
select nama_training from training where id_training in (select id_training from mengikuti_training where id_training between 'TN_02' and 'TN_04');
nama_training Training Manajemen Kapal Training Mesin Kapal
5. Tampilkan nama kapal dan warna kapal yang berlayar dibulan oktober dengan nama alias 'Nama Kapal yg Berlayar Bulan 10'!
select nama_kapal,warna_kapal from kapal where id_kapal in (select id_kapal from job where tanggal like '%-10-%');
nama_kapal warna_kapal
Jaya Loka Merah
Jaya Loka Biru
Makmur Abadi Hijau
Bintang Ufuk Hijau
(Cheung and Babin, 2006; Simarmata and Paryudi, 2006; Lotfy, El Tazi and El Gamal, 2016; Kroenke et al., 2017; Vajirakachorn and Chongwatpol, 2017)
Daftar Pustaka
Cheung, W. and Babin, G. (2006) ‘A metadatabase-enabled executive information system (Part A): A flexible and adaptable architecture’, Decision Support Systems, 42(3), pp. 1589–1598. doi:
10.1016/j.dss.2006.01.005.
Kroenke, D. M. et al. (2017) Database Concept. Eight Edit. Hoboken, New Jersey: Pearson.
Lotfy, A., El Tazi, N. and El Gamal, N. (2016) ‘SCI-F: Social-corporate data integration framework’, ACM International Conference Proceeding Series, 11-13-July, pp. 328–333. doi: 10.1145/2938503.2938505.
Simarmata, J. and Paryudi, I. (2006) Basis Data.
Vajirakachorn, T. and Chongwatpol, J. (2017) ‘Application of business intelligence in the tourism industry: A case study of a local food festival in Thailand’, Tourism Management Perspectives, 23, pp. 75–86. doi:
10.1016/j.tmp.2017.05.003.