laporan modul vi basis data
TRANSCRIPT
-
8/19/2019 Laporan Modul VI Basis Data
1/18
Laporan Basis Data VI | 0
LAPORAN MODUL VI
PRAKTIKUM BASIS DATA
SUBQUERY
Disusun untuk memenuhi
Matakuliah Praktikum Basis Data
Yang Dibimbing oleh Bu. Triyanna Widiyaningtyas, S.T., M.T.
KELOMPOK 5 :
Angela Christine H. 130533608098
Asnita Meydelia C. K. 130533608143
PTI 2013 OFFERING E
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIKJURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
April, 2014
-
8/19/2019 Laporan Modul VI Basis Data
2/18
Laporan Basis Data VI | 1
MODUL VI
SUBQUERY
I. TUJUAN
1. Memahami keterhubungan entitas di dalam basis data.
2.
Memahami operasi subquery dan jenis-jenisnya di dalam pengambilan data.
3. Mampu menyelesaikan kasus-kasus pengambilan data yang kompleks dengan pendekatan
subquery.
II. DASAR TEORI
Subquery
Subquery (disebut juga subselect atau nested select / query atau inner- select ) adalah
query SELECT yang ada di dalam perintah SQL lain, misalnya SELECT, INSERT,
UPDATE, atau DELETE.
Keberadaan subquery secara nyata mampu menyederhanakan persoalan-persoalan
rumit berkaitan query data. Sebagai contoh, misal terdapat pernyataan sebagai berikut:
“Dapatkan data mahasiswa yang alamatnya sama dengan
mahasiswa dengan nim 104”
Secara normal, diperlukan dua tahapan untuk menyelesaikan kasus di atas. Pertamaadalah mendapatkan alamat dari mahasiswa yang memiliki nim 104. Langkah selanjutnya,
baru kita bisa mengetahui data mahasiswa yang alamatnya sama dengan mahasiswa
dengan nim 104.
Adapun dengan memanfaatkan subquery, maka penyelesaian kasus di atas hanya
memerlukan sebuah query (akan dijelaskan nanti). Pada hakekatnya, subquery sangat
berguna ketika sebuah query didasarkan pada nilai-nilai yang tak diketahui.
Sintaks formal subquery diperlihatkan sebagai berikut:
Subquery dapat diklasifikasikan ke dalam tiga jenis : scalar , multiple-row, dan multiple-
column.
SELECT A1, A2 , ..., An
FROM r1, r2 , r3 , ..., rm
WHERE P
(SELECT A1, A2 , ..., An
FROM r1, r2 , r3 , ..., rm
WHERE P )
-
8/19/2019 Laporan Modul VI Basis Data
3/18
Laporan Basis Data VI | 2
a. Scalar Subquery
Subquery baris tunggal ( scalar ) hanya mengembalikan hasil satu baris data. Bentuk
subquery ini diperlihatkan seperti Gambar 1.
Gambar 1 Scalar subquery
Subquery baris tunggal dapat menggunakan operator baris tunggal =, > ,
>=,
-
8/19/2019 Laporan Modul VI Basis Data
4/18
Laporan Basis Data VI | 3
III. LATIHAN
1. Himpunan Entitas
Dalam latihan ini digunakan kembali tiga buah tabel meliputi mahasiswa,
ambil_mk, dan matakuliah yang telah dibuat sebelumnya, dan ditambah dengan dua
buah tabel baru, yaitu dosen dan jurusan. Untuk itu, terlebih dahulu ciptakan tabel
dosen dan jurusan dengan struktur sebagai berikut :
Data yang digunakan adalah sebagai berikut (sesuaikan agar sama persis) :
Tabel Mahasiswa
nim Nama jenis_kelamin alamat
101 Arif L Jl. Kenangan
102 Budi L Jl. Jombang
103 Wati P Jl. Surabaya
104 Ika P Jl. Jombang
105 Tono L Jl. Jakarta
106 Iwan L Jl. Bandung
107 Sari P Jl. Malang
Tabel ambil_mk
nim kode_mk
101 PTI447
103 TIK333
104 PTI333
104 PTI777
111 PTI123
123 PTI999
CREATE TABLE dosen(kode_dos INT(5) NOT NULL,nama_dos VARCHAR(30) NOT NULL,alamat_dos VARCHAR(30) NOT NULL,PRIMARY KEY(kode_dos))ENGINE = MyISAM;CREATE TABLE jurusan(kode_jur VARCHAR(5) NOT NULL,
nama_jur VARCHAR(30) NOT NULL,kode_dos INT(5) NOT NULL,PRIMARY KEY(kode_jur))ENGINE = MyISAM;
-
8/19/2019 Laporan Modul VI Basis Data
5/18
Laporan Basis Data VI | 4
Tabel Matakuliah
kode_mk nama_mk sks semester kode_dos
PTI447 Praktikum Basis Data 1 3 11
TIK342 Praktikum Basis Data 1 3 11PTI333 Basis Data Terdistribusi 3 5 10
TIK123 Jaringan Komputer 2 5 33
TIK333 Sistem Operasi 3 5 10
PTI123 Grafika Multimedia 3 5 12
PTI777 Sistem Informasi 2 3 99
Tabel dosen
kode_dos nama_dos alamat_dos
10 Suharto Jl. Jombang
11 Martono Jl. Kalpataru
12 Rahmawati Jl. Jakarta
13 Bambang Jl. Bandung
14 Nurul Jl. Raya Tidar
Tabel jurusan
kode_jur nama_jur kode_dos
TE Teknik Elektro 10
TM Teknik Mesin 13
TS Teknik Sipil 23
Himpunan entitas di atas dapat direpresentasikan ke dalam diagram skema ( schema
diagram) seperti Gambar 4.
Gambar 4 Diagram Skema
-
8/19/2019 Laporan Modul VI Basis Data
6/18
Laporan Basis Data VI | 5
2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang Jenis
kelaminnya sama dengan mahasiswa dengan nama “Wati”.
Gambar : Scalar Subquery
Bisa digambarkan, langkah pertama dari operasi di atas adalah mendapatkan jenis
kelamin mahasiswa dengan nama “Wati”, kemudian hasilnya yakni “P” akan
digunakan oleh main query.
3. Multiple-Row Subquery
Pada subquery ini, kita menggunakan operator komparasi IN, ANY / SOME, atau
ALL.
Operator IN
Operator IN memiliki arti : sama dengan member di dalam list. Sebagai contoh,
kita bisa menggunakan operator ini untuk mendapatkan data dosen yang mengajar
matakuliah.
Gambar : Operator IN
select * from mhswhere jenis_kelamin=(select jenis_kelamin from mhswhere nama="Wati");
select d.kode_dos, d.nama_dosfrom dosen dwhere d.kode_dos IN
(select kode_dos from matakuliah);
-
8/19/2019 Laporan Modul VI Basis Data
7/18
Laporan Basis Data VI | 6
Operator ANY / SOME
Operator ANY/SOME memiliki arti : membandingkan suatu nilai dengan setiap nilai
yang dikembalikan oleh subquery.
Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih besardari sembarang sks matakuliah di semester 3.
Gambar : Operator ANY
Operator ALL
Operator ALL memiliki arti : membandingkan suatu nilai dengan semua nilai yang
dikembalikan oleh subquery.
Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih besar
dari semua sks matakuliah di semester 3.
Gambar : Operator ALL
select * from matakuliahwhere sks > any(select sks from matakuliahwhere semester = 3);
select * from matakuliahwhere sks > all(select sks from matakuliah
where semester = 3);
-
8/19/2019 Laporan Modul VI Basis Data
8/18
Laporan Basis Data VI | 7
4. Multiple-Column Subquery
Subquery kolom ganda (atau tabel) juga menggunakan operator komparasi IN, ANY /
SOME, atau ALL. Pada query ini, nilai dari subquery dalam bentuk kolom ganda
dikomparasi dengan main query.
Sebagai contoh, misalkan kita ingin menampilkan data matakuliah yang semester dan
sksnya sesuai dengan semester dan sks matakuliah dengan “PTI447”
Gambar : Multiple-Column Subquery
5. Operator EXIST dan NOT EXIST
Operator EXIST dan NOT EXIST digunakan pada correlated subquery untuk
memeriksa apakah subquery mengembalikan hasil atau tidak. Apabila subquery
mengembalikan hasil, EXIST akan mengembalikan nilai true. Begitu pula sebaliknya,
jika tidak mengembalikan hasil.
Sebagai contoh, pernyataan berikut akan mendapatkan data matakuliah yang diambil
oleh mahasiswa.
Gambar : Operator EXIST
select * from matakuliah mwhere exists (select * from ambil_mk awhere m.kode_mk= a.kode_mk);
select * from matakuliahwhere (semester, sks) IN(select semester ,sks frommatakuliahwhere kode_mk = 'PTI447');
-
8/19/2019 Laporan Modul VI Basis Data
9/18
Laporan Basis Data VI | 8
Pernyataan berikut akan mendapatkan data matakuliah yang tidak diambil oleh
mahasiswa.
Gambar : Operator NOT EXIST
6. Subquery dan Fungsi Agregat
Operasi-operasi pada Subquery juga dapat melibatkan fungsi-fungsi agregat.
Sebagai contoh, misalkan ingin mendapatkan data matakuliah yang memiliki sks sama
dengan sks terkecil.
Gambar : Subquery dan Fungsi Agregat
7. Subquery dan Join
Dalam beberapa kasus sederhana, fungsionalitas subquery dan join dapat
dipertukarkan. Dengan kata lain, keduanya dapat digunakan untuk menyelesaikan
persolah yang sama.
Sebagai contoh, misalkan kita ingin mendapatkan kode dosen dan nama dosen yang
tidak mengajar matakuliah. Pendekatan subquery :
select * from matakuliah mwhere not exists
(select * from ambil_mk awhere m.kode mk = a.kode mk);
select * from matakuliahwhere sks =select MIN sks from matakuliah
select d.kode_dos, d.nama_dosfrom dosen dwhere d.kode_dos not in
(select kode_dos from matakuliah);
-
8/19/2019 Laporan Modul VI Basis Data
10/18
Laporan Basis Data VI | 9
Gambar : Pendekatan Subquery
Pendekatan Join :
Gambar : Pendekatan Join
select d.kode_dos, d.nama_dosfrom dosen dleft outer join matakuliah mon d.kode_dos = m.kode_doswhere m.kode_dos is NULL;
-
8/19/2019 Laporan Modul VI Basis Data
11/18
Laporan Basis Data VI | 10
IV. TUGAS PRAKTIKUM
Dalam mengerjakan tugas praktikum ini, sebaiknya pernyataan SQL disimpan di file untuk
kemudian dieksekusi
Selesaikan tugas-tugas di bawah ini dengan menggunakan pendekatan subquery.
1. Dapatkan data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim 102,
tidak termasuk mahasiswa tersebut. (Point 10)
a. Perintah SQL :
b. Output :
c. Pembahasan :
Data diambil dari tabel mahasiswa. Hal ini dapat kita lihat dari sintaks select
* from mhs. Perintah soal menginginkan data mahasiswa yang alamatnya samadengan mahasiswa dengan nim 102, tidak termasuk mahasiswa tersebut. Jadi,
terlebih dahulu kita harus mencari data data mahasiswa yang alamatnya sama
dengan mahasiswa dengan nim 102. Oleh karena itu, kita menggunakan sintaks
select alamat from mhs where nim = '102'. Akan tetapi mahasiswa yang
memilki nim 102 datanya tidak ditampilkan untuk itu kita menggunakan sintaks
and nim not like "102".
2. Dapatkan matakuliah yang tidak diajar oleh dosen terdaftar. (Poin 20)
a. Perintah SQL :
select * from mhswhere alamat =(select alamat from mhswhere nim = '102') and nim not like "102";
select nama_mkfrom matakuliahwhere not exists(select kode_dos from dosenwhere kode_dos = matakuliah.kode_dos);
-
8/19/2019 Laporan Modul VI Basis Data
12/18
Laporan Basis Data VI | 11
b. Output :
c. Pembahasan :
Perintah soal menginginkan tampilan dari matakuliah yang tidak diajar oleh
dosen terdaftar. karena ingin menampikan nama_mk maka yang diseleksi hanya
nama_mk dan data tersebut diambil dari tabel matakuliah. Hal ini dapat kita
lihat pada sintaks select nama_mk from matakuliah. kemudian karena yang
diminta adalah yang tidak diajar oleh dosen yang terdaftar maka kita
menggunakan where not exit. where not exists (select kode_dos from
dosen where kode_dos = matakuliah.kode_dos) merupakan perintah sql
yang akan menampilkan matakuliah yang tidak diajar oleh dosen terdaftar.
3.
Dapatkan data dosen yang mengajar matakuliah dengan sks lebih kecil dari
sembarang sks. (Point 25)
a. Perintah SQL :
b. Output :
c. Pembahasan :
Untuk mendapatkan data dosen yang mengajar matakuliah dengan sks lebih
kecil dari sembarang sks. Berarti kita harus mencari data dosen yang mengajar
dengan sks terkecil terlebih dahulu. Penggunaan sintaks
-
8/19/2019 Laporan Modul VI Basis Data
13/18
Laporan Basis Data VI | 12
untuk menampilkan data yang memiliki sks kurang dari semua sks yang ada
pada tabel matakuliah. Untuk mendapatkan data kode_dos, nama_dos,
alamat_dos kita menggunakan INNER JOIN untuk menemukan persimpangan
antara tabel dosen dan matakuliah. penggunaan distinct pada sintaks agar tidak
ada duplikasi pada data.
4. Dapatkan data dosen yang mengajar matakuliah yang sksnya kurang dari sks
matakuliah yang diajar dosen yang sekaligus menjadi ketua jurusan Teknik Elektro,
tidak termasuk ketua jurusan Teknik Elektro. (Point 30)
a. Perintah SQL :
b. Output :
c. Pembahasan :
Perintah soal menginginkan untuk menampilkan data dosen yang mengajar
matakuliah yang sksnya kurang dari sks matakuliah yang diajar dosen yang
sekaligus menjadi ketua jurusan Teknik Elektro, tidak termasuk ketua jurusan
Teknik Elektro. Oleh karena itu kita menggunakan INNER JOIN pada tabel
dosen dan matakuliah untuk menemukan persimpangan data. Penggunaan
distinct dilakukan untuk menghindari duplikasi data. Karena akan
menampilkan data dosen yang mengajar matakuliah yang sksnya kurang dari
sks matakuliah yang diajar dosen yang sekaligus menjadi ketua jurusan Teknik
Elektro, tidak termasuk ketua jurusan Teknik Elektro berari kita harus mencari
jumlah sks dari ketua Jurusan Teknik Elektro untuk dijadikan acuan dasar pada
perintah soal yang diinginkan.
select distinct d.*from dosen d inner join matakuliah mon d.kode_dos = m.kode_doswhere sks < all(select sks from matakuliahwhere kode_dos in(select kode_dos from jurusanwhere nama_jur ='Teknik Elektro'));
-
8/19/2019 Laporan Modul VI Basis Data
14/18
Laporan Basis Data VI | 13
5. Dapatkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama dengan
dosen yang mengajar matakuliah dengan sks di bawah rata-rata. (Point 35)
a. Perintah SQL :
b. Output :
c. Pembahasan :
Perintah soal menginginkan untuk menampilkan nim, nama, dan alamat
mahasiswa yang tempat tinggalnya sama dengan dosen yang mengajar
matakuliah dengan sks di bawah rata-rata. Ada beberapa tabel yang akan kita
butuhkan datanya, yaitu : mahasiswa, dosen, dan matakuliah. Karena ingin
menampilkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama
dengan dosen yang mengajar matakuliah dengan sks di bawah rata-rata maka
kita harus dosen yang mengajar matakuliah dengan sks di bawah rata-rata
kemudian kita melakukan pencarian dan melakukan penyeleksian yang lebih
terfokus pada alamat dimana mahasiswa tersebut memiliki alamat yang sama
dengan dosen yang mengajar matakuliah dengan sks di bawah rata-rata. Dosen
yang memiliki sks di bawah rata-rata beralamat di Jl. Kalpataru akan tetapi tidak
ada mahasiswa yang beralamat sama dengan dosen tersebut maka yang output
dari program tersebut adalah empty set.
select nim, nama, alamatfrom mhswhere alamat in(select distinct alamat_dos from dosenwhere kode_dos in(select distinct kode_dosfrom matakuliahwhere sks < any(select avg(sks) from matakuliah)));
-
8/19/2019 Laporan Modul VI Basis Data
15/18
Laporan Basis Data VI | 14
V. TUGAS RUMAH
1.
Dapatkan data dosen yang mengajar matakuliah dengan jumlah sks sama dengan
matakuliah yang diajar oleh ketua jurusan teknik elektro
a. Perintah SQL :
b.
Output :
select distinct d.kode_dos, d.nama_dos, d.alamat_dosfrom dosen d, matakuliah mkwhere d.kode_dos = mk.kode_dosgroup by kode_doshaving SUM(sks) >= ALL(select sks from matakuliah mk, jurusan jwhere j.kode_dos = '10');
-
8/19/2019 Laporan Modul VI Basis Data
16/18
Laporan Basis Data VI | 15
c. Pembahasan :
Pada soal ini diminta untuk menampilkan data dosen yang mengajar matakuliah
dengan jumlah sks sama dengan matakuliah yang diajar oleh ketua jurusan teknik
elektro. Disini akan menggunakan syntax select distinct d.kode_dos,
d.nama_dos, d.alamat_dos karena hanya menampilkan data beupa kode dosen,
nama dosen, dan alamat dosen. Digunakan query distinct karena untuk
menghindari adanya duplikasi data. Data-data tersebut diambil dari tabel dosen dan
matakuliah dengan menggunakan syntax from dosen d, matakuliah mk dimana
kode dosen pada tabel dosen sama dengan kode dosen pada tabel matakuliah where
d.kode_dos = mk.kode_dos.
Kemudian karena perintahnya adalah menampilkan jumlah sks sama dengan
matakuliah yang diajar oleh ketua jurusan Teknik Elektro maka menggunakan
syntax subquery yaitu : having SUM(sks) >= ALL(select sks from
matakuliah mk, jurusan j where j.kode_dos = '10') Dimana pada tabel
telah dicantumkan Kode dosen untuk ketua jurusan teknik eletro adalah “10”.
2. Dapatkan nama dan nim mahasiswa yang mengambil matakuliah yang jumlah sksnya
diatas rata-rata
a.
Perintah SQL :
b. Output :
c. Pembahasan :
Dalam soal ini diminta menampilkan nama dan nim mahasiswa yang mengambil
matakuliah yang jumlah sksnya diatas rata-rata. Untuk menampilkan data nama
dan nim dari tabel mahasiswa digunakan syntax select distinct m.nim,
select distinct m.nim, m.namafrom mhs m, ambil_mk a, matakuliah mkwhere m.nim = a.nim AND a.kode_mk = mk.kode_mkgroup by nimhaving SUM(sks) > ANY(select AVG(sks) from matakuliah);
-
8/19/2019 Laporan Modul VI Basis Data
17/18
Laporan Basis Data VI | 16
m.nama. Digunakan query distinct karena untuk menghindari adanya duplikasi
data yang akan ditampilkan. Dimana nim pada tabel mahasiswa dan nim pada tabel
ambil_mk sama dan juga kode_mk pada tabel ambil_mk sama dengan kode_mk
pada tabel matakuliah (where m.nim = a.nim AND a.kode_mk = mk.kode_mk).
Karena data yang diinginkan adalah jumlah sks diatas rata-rata digunakan syntax
subquery having SUM(sks) > ANY (select AVG(sks) from matakuliah)
3. Tampilkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama dengan
dosen yang mengajar matakuliah dengan sks diatas rata-rata
a. Perintah SQL :
b. Output :
c. Pembahasan :
Pada soal ini diminta menampilkan nim, nama, dan alamat mahasiswa yang tempat
tinggalnya sama dengan dosen yang mengajar matakuliah dengan sks diatas rata-
rata. Digunakan syntax select m.nim, m.nama, m.alamat yang diambil dari
tabel mahasiswa. Dimana alamatnya sama dengan dosen yang mengajar
matakuliah dengan sks diatas rata-rata. Untuk menampilkan data tersebut,
diimplementasikan subquery yaitu where m.alamat IN(select d.alamat_dos
from dosen d, matakuliah mk where d.kode_dos = mk.kode_dos AND sks
> (select AVG(sks) from matakuliah)); dimana kode dosen pada tabel dosen
sama dengan kode dosen pada tabel matakuliah dan untuk menyeleksi rata-ratanya
diimplementasikan lagi subquerynya yaitu sks > (select AVG(sks) from
matakuliah)
select m.nim, m.nama, m.alamat
from mhs mwhere m.alamat IN(select d.alamat_dosfrom dosen d, matakuliah mkwhere d.kode_dos = mk.kode_dosAND sks > (select AVG(sks) from matakuliah));
-
8/19/2019 Laporan Modul VI Basis Data
18/18
Laporan Basis Data VI | 17
VI. KESIMPULAN
Subquery (disebut juga subselect atau nested select / query atau inner- select ) adalah
query SELECT yang ada di dalam perintah SQL lain, misalnya SELECT, INSERT,
UPDATE, atau DELETE. Subquery dapat diklasifikasikan ke dalam tiga jenis : scalar , multiple-row, dan
multiple-column.
Himpunan entitas di atas dapat direpresentasikan ke dalam diagram skema ( schema
diagram)
Operator komparasi yang digunakan pada subquery yaitu : IN, ANY / SOME, atau ALL.
Operator EXIST dan NOT EXIST digunakan pada correlated subquery untuk
memeriksa apakah subquery mengembalikan hasil atau tidak.
VII. DAFTAR RUJUKAN
TIM Asdos UM. 2013. Modul VI Praktikum Basis Data. Malang. Universitas Negeri
Malang.
Fathansyah. 2012. Basis Data. Bandung: Informatika