0% menganggap dokumen ini bermanfaat (0 suara)
628 tayangan18 halaman

Laporan Modul VI Basis Data

Laporan ini membahas tentang subquery pada basis data. Terdapat penjelasan tentang tujuan, dasar teori, contoh-contoh soal latihan, dan tugas praktikum mengenai penggunaan subquery scalar, multiple-row, multiple-column, operator exist, dan gabungan subquery dengan fungsi dan join.

Diunggah oleh

Asnita Meydelia
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 PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
628 tayangan18 halaman

Laporan Modul VI Basis Data

Laporan ini membahas tentang subquery pada basis data. Terdapat penjelasan tentang tujuan, dasar teori, contoh-contoh soal latihan, dan tugas praktikum mengenai penggunaan subquery scalar, multiple-row, multiple-column, operator exist, dan gabungan subquery dengan fungsi dan join.

Diunggah oleh

Asnita Meydelia
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 PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 18

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 TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
April, 2014

Laporan Basis Data VI | 0

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. Pertama
adalah 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:
SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P
(SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P)

Subquery dapat diklasifikasikan ke dalam tiga jenis : scalar, multiple-row, dan multiplecolumn.

Laporan Basis Data VI | 1

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 =, >,


>=, <, <=, atau <>.
b. Multiple-Row Subquery
Subquery baris ganda (multiple-row) mengembalikan lebih dari satu baris data. Bentuk
subquery ini diperlihatkan seperti Gambar 2.

Gambar 2 Multiple-row subquery

Subquery baris ganda dapat menggunakan operator komparasi IN, ANY /


SOME, atau ALL.
c. Multiple-Column Subquery
Subquery kolom ganda (multiple-column) mengembalikan lebih dari satu baris dan satu

kolom data. Bentuk subquery ini diperlihatkan seperti Gambar 3.

Gambar 3 Multiple-column subquery

Laporan Basis Data VI | 2

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

Data yang digunakan adalah sebagai berikut (sesuaikan agar sama persis) :
Tabel Mahasiswa
nim

Nama

jenis_kelamin

alamat

101

Arif

Jl. Kenangan

102

Budi

Jl. Jombang

103

Wati

Jl. Surabaya

104

Ika

Jl. Jombang

105

Tono

Jl. Jakarta

106

Iwan

Jl. Bandung

107

Sari

Jl. Malang

Tabel ambil_mk
nim

kode_mk

101

PTI447

103

TIK333

104

PTI333

104

PTI777

111

PTI123

123

PTI999
Laporan Basis Data VI | 3

Tabel Matakuliah
kode_mk

nama_mk

sks

semester

kode_dos

PTI447

Praktikum Basis Data

11

TIK342

Praktikum Basis Data

11

PTI333

Basis Data Terdistribusi

10

TIK123

Jaringan Komputer

33

TIK333

Sistem Operasi

10

PTI123

Grafika Multimedia

12

PTI777

Sistem Informasi

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

Laporan Basis Data VI | 4

2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang Jenis
kelaminnya sama dengan mahasiswa dengan nama Wati.
select * from mhs
where jenis_kelamin=
(select jenis_kelamin from mhs
where 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.
select d.kode_dos, d.nama_dos
from dosen d
where d.kode_dos IN
(select kode_dos from matakuliah);

Gambar : Operator IN

Laporan Basis Data VI | 5

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 besar
dari sembarang sks matakuliah di semester 3.
select * from matakuliah
where sks > any
(select sks from matakuliah
where 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.
select * from matakuliah
where sks > all
(select sks from matakuliah
where semester = 3);

Gambar : Operator ALL

Laporan Basis Data VI | 6

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
select * from matakuliah
where (semester, sks) IN
(select semester ,sks from
matakuliah
where kode_mk = '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.
select * from matakuliah m
where exists
(select * from ambil_mk a
where m.kode_mk= a.kode_mk);

Gambar : Operator EXIST

Laporan Basis Data VI | 7

Pernyataan berikut akan mendapatkan data matakuliah yang tidak diambil oleh
mahasiswa.
select * from matakuliah m
where not exists
(select * from ambil_mk a
where m.kode_mk = a.kode_mk);

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.
select * from matakuliah
where sks =
(select MIN(sks) from matakuliah);

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 d.kode_dos, d.nama_dos
from dosen d
where d.kode_dos not in
(select kode_dos from matakuliah);

Laporan Basis Data VI | 8

Gambar : Pendekatan Subquery

Pendekatan Join :
select d.kode_dos, d.nama_dos
from dosen d
left outer join matakuliah m
on d.kode_dos = m.kode_dos
where m.kode_dos is NULL;

Gambar : Pendekatan Join

Laporan Basis Data VI | 9

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

select * from mhs


where alamat =
(select alamat from mhs
where nim = '102') and nim not like "102";

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 sama

dengan 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 nama_mk
from matakuliah
where not exists
(select kode_dos from dosen
where kode_dos = matakuliah.kode_dos);

Laporan Basis Data VI | 10

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

select distinct d.*


from dosen d inner join matakuliah k
on d.kode_dos=k.kode_dos where sks < any
(select distinct sks from matakuliah);

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 <any dimaksudkan
Laporan Basis Data VI | 11

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

select distinct d.*


from dosen d inner join matakuliah m
on d.kode_dos = m.kode_dos
where sks < all
(select sks from matakuliah
where kode_dos in
(select kode_dos from jurusan
where nama_jur ='Teknik Elektro'));

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.
Laporan Basis Data VI | 12

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

select nim, nama, alamat


from mhs
where alamat in
(select distinct alamat_dos from dosen
where kode_dos in
(select distinct kode_dos
from matakuliah
where sks < any
(select avg(sks) from matakuliah)));

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.

Laporan Basis Data VI | 13

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

select distinct d.kode_dos, d.nama_dos, d.alamat_dos


from dosen d, matakuliah mk
where d.kode_dos = mk.kode_dos
group by kode_dos
having SUM(sks) >= ALL
(select sks from matakuliah mk, jurusan j
where j.kode_dos = '10');

b. Output

Laporan Basis Data VI | 14

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

matakuliah mk, jurusan j where j.kode_dos = '10')

sks

from

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

select distinct m.nim, m.nama


from mhs m, ambil_mk a, matakuliah mk
where m.nim = a.nim AND a.kode_mk = mk.kode_mk
group by nim
having SUM(sks) > ANY
(select AVG(sks) from matakuliah);

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,
Laporan Basis Data VI | 15

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

select m.nim, m.nama, m.alamat


from mhs m
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));

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 ratarata. 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)

Laporan Basis Data VI | 16

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,

Operator EXIST dan NOT EXIST digunakan pada correlated subquery untuk

ANY / SOME,

atau ALL.

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

Laporan Basis Data VI | 17

Anda mungkin juga menyukai