LAPORAN MODUL VI
PRAKTIKUM BASIS DATA
“ SUB QUERY”
Disusun untuk Memenuhi Matakuliah Praktikum Basis Data
Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.
Oleh:
Aisya Rawdha
Ari Candra A. F.
170533628608
170533628623
S1 PTI ‘17 OFF A
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
Maret 2018
I.
Tujuan Praktikum
• Memahami keterhubungan entitas di dalam basis data
• Memahami operasi subquery dan jenis-jenisnya di dalam pengmabilan
data
• Mampu menyelesaikan kasus-kasus pengambilan data yang kompleks
dengan pendekatan subquery
II.
Dasar Teori
1. 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:
Subquery dapat diklasifikasikan ke dalam tiga jenis : scalar, multiple-row,
dan multiple column.
a. Scalar Subquery
Subquery baris tunggal (scalar) hanya mengembalikan hasil satu baris
data. Bentuk subquery ini diperlihatkan seperti Gambar 1.
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.
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.
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 buat tabel dosen dengan struktur sebagai berikut.
TABEL MAHASISWA
TABEL MATAKULIAH
TABEL DOSEN
TABEL JURUSAN
TABEL AMBIL_MK
Relasi
Himpunan entitas di atas dapat direpresentasikan ke dalam diagram skema
(schema diagram) seperti berikut.
2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang
jenis kelaminnya sama dengan mahasiswa dengan nama “Wati”.
Sebagai hasilnya, didapatkan jenis kelamin mahasiswa dengan nama
“Wati”, yakni “P” yang selanjutnya digunakan oleh main query sehingga
menghasilkan sebagai berikut.
3. Multiple-Row Subquery
Pada subquery ini, kita menggunakan operator komparasi IN, ANY /
SOME, atauALL.
a. 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
b. 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.
c. Operator ALL
Operator ALL memiliki arti: membandingkan suatu nilai dengan semua
nilai yang dikembalikan oleh subquery. Misal, kita ingin mendapatkan
data matakuliah yang memiliki sks lebih besar dari semua sks
matakuliah di semester 3.
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 main query. Sebagai contoh,
misalkan kita ingin menampilkan data matakuliah yang semester dan
sksnya sesuai dengan semester dan sks matakuliah dengan kode
“PTI447”.
5. Operator EXISTS dan NOT EXISTS
Operator EXISTS dan NOT EXISTS digunakan pada correlated
subquery untuk memeriksa apakah subquery mengembalikan hasil atau
tidak.
Apabila
mengembalikan nilai
subquery mengembalikan
hasil,
EXIST
true. Begitu pula sebaliknya, jika
mengembalikan hasil. Sebagai contoh, pernyataan berikut akan
mendapatkan data matakuliah yang diambil oleh mahasiswa.
a. EXISTS
akan
tidak
b. NOT EXISTS
Pernyataan berikut akan mendapatkan data matakuliah yang tidak
diambil oleh mahasiswa.
IV.
Tugas Praktikum
1. Dapatkan data dosen yang mengajar matakuliah basis data
terdistribusi dan sistem operasi
a. Source code :
SELECT*FROM Dosen WHERE kode_dos IN (SELECT kode_dos
FROM matakuliah WHERE
`nama_mk`='Basis Data
Terdistribusi' OR `nama_mk`='Sistem Operasi')
b. Screenshoot
c. Analisis Program
Dari pernyataan SQL di atas menuliskan perintah untuk mengambil
data dosen yang mengajar matakuliah basis data terdistribusi dan
sistem operasi dengan SELECT*FROM Dosen WHERE kode_dos IN
(SELECT
kode_dos
FROM
matakuliah
`nama_mk`='Basis
Data
`nama_mk`='Sistem
Operasi')
mengeluarkan
data
dari
WHERE
Terdistribusi'
tabel
memerintah
dosen
“IN”
dengan
OR
untuk
cara
menggunakan multiple row subquery . fungsi dari perintah tersebut
memanggil
SELECT*FROM
dua
data
Dosen
sekaligus
WHERE
yang
Kode_dos
IN
ingin
ditampilkan
untuk mengambil
kode_dos pada tabel dosen, dimana kode_dos untuk menunjukkan
perintah berikutnya. (SELECT
WHERE
kode_dos
`nama_mk`='Basis
`nama_mk`='Sistem Operasi')
Data
FROM
matakuliah
Terdistribusi'
OR
untuk menunjukkan kode_dos
pada tabel matakuliah dimana nama_mknya “ Basis Data
Terdistribusi” atau “Sistem Operasi”.
2. Dapatkan data mahasiswa dan matakuliah yang diambil di
semester 5.
a. Source code :
SELECT m.nim, m.nama, m.jk, m.alamat, a.kd_mk FROM
mahasiswa m JOIN ambil_mk a ON m.nim=a.nim
WHERE a.kd_mk IN
(SELECT kd_mk FROM matakuliah WHERE semester=5)
b. Screenshoot
c. Analisis Program
Dari pernyataan SQL di atas digunakan untuk mendapatkan data
mahasiswa dan matakuliah yang diambil di semester 5. Dengan
menggunakan
perintah
SELECT
m.nim,
m.nama,
m.jk,
m.alamat, a.kd_mk FROM mahasiswa m JOIN ambil_mk a ON
m.nim=a.nim
matakuliah
WHERE
WHERE
a.kd_mk
IN
semester=5).
(SELECT
kd_mk
FROM
Perintah tersebut berarti
diperintah untuk mengambil data nim, nama, jk, alamat pada tabel
mahasiswa yang dialiaskan m dan mengambil kd_mk pada tabel
ambil_mk yang dialiskan a. dan digabungkan dimana tyerdapat
kondisi nim pada tabel matakuliah dan nim pada tabel ambil_mk
sama. Dan dimana kd_mk pada tabel ambil_mk memiliki perintah
lanjutan
semester=5)
(SELECT
kd_mk
FROM
matakuliah
WHERE
yang berati perintah untuk mengambil kd_mk pada
tabel matakuliah
dimana yang memiliki kondisi pada field
semester sama dengan 5.
3. Dapatkan data matakuliah yang mempunyai sks lebih kecil dari
sembarang sks matakuliah di semester 5.
a. Source code :
SELECT * FROM matakuliah WHERE sks < ANY (SELECT sks
FROM matakuliah WHERE semester = 5)
b. Screenshoot
c. Analisis Program
Pada pernyataan SQL di atas digunakan untuk mendapatkan data
matakuliah yang mempunyai sks lebih kecil dari sembarang sks
matakuliah di semester 5. Dengan cara menulisakan perintah
SELECT * FROM matakuliah WHERE sks < ANY (SELECT sks
FROM
matakuliah
WHERE
semester
=
5)
SQL tersebut
menggunakan multiple row subquery “ANY” perbandingan yang
berarti memerintah untuk mengambil semua data dari tabel
matakuliah dimana memiliki kondisi pada sks lebih kecil
dan
dibandingkan dengan melanjutkan kondisi sks tersebut dari tabel
matakuliah dimana semester sama dengan 5.
4. Dapatkan data dosen pengajar matakuliah yang tidak diambil
oleh mahasiswa.
a. Source code :
SELECT*FROM dosen WHERE kode_dos IN (SELECT kode_dos
FROM matakuliah WHERE
kd_mk NOT IN (SELECT kd_mk
FROM ambil_mk))
b. Screenshoot
c. Analisis Program
Dari SQL di atas digunakan untuk menampilkan data dosen
pengajar matakuliah yang tidak diambil oleh mahasiswa dengan
menggunakan multiple row subquery yaitu “IN”. SELECT*FROM
dosen
WHERE
matakuliah
kode_dos
WHERE
ambil_mk))yang
kd_mk
IN
(SELECT
NOT
IN
kode_dos
(SELECT
kd_mk
FROM
FROM
berarti untuk mengambil semua field pada tabel
dosen dimana kondisi kode_dos tersebut dilanjutkan
untuk
mengambil kode_dos dari tabel matakuliah dengan kondisi kd_mk
tidak ada didalam kd_mk pada tabel ambil_mk.
5. Dapatkan kode dan nama matakuliah dosen yang menjadi ketua
jurusan teknik elektro.
a. Source code :
SELECT kd_mk, nama_mk FROM matakuliah k WHERE
k.kode_dos =
(SELECT j.kode_dos FROM jurusan j WHERE kode_jur =
"TE")
b. Screenshoot
c. Analisis Program
Pada SQL di atas digunakan untuk mendapatkan kode dan nama
matakuliah dosen yang menjadi ketua jurusan teknik elektro
dengan menuliskan perintah SELECT kd_mk, nama_mk FROM
matakuliah
FROM
k
jurusan
WHERE
j
k.kode_dos
WHERE
kode_jur
=
=
(SELECT
j.kode_dos
"TE")
yang berarti
perintah untuk mengambil kd_mk dan nama_mk dari tabel
matakuliah yang diinisialkan k, dimana kode_dos pada tabel
matakuliah mempunyai kondisi sama kode_dos pada tabel jurusan
dimana kondisi kode_jurnya sama dengan “TE”.
V.
Tugas Rumah
1. Dapatkan data dosen yang mengajar matakuliah dengan sks lebih
kecil dari sembarang sks.
a. Source code :
SELECT * FROM dosen WHERE kode_dos IN ( SELECT
kode_dos FROM matakuliah WHERE sks < ANY (SELECT sks
FROM matakuliah))
b. Screenshot :
c. Analisis program :
SQL diatas digunakan untuk mendapatkan kode, nama, dan alamat
dosen yang mengajar matakuliah dengan sks paling kecil dengan
menuliskan perintah SELECT * FROM dosen WHERE kode_dos IN
( SELECT kode_dos FROM matakuliah WHERE sks < ANY
(SELECT sks FROM matakuliah))
yang berarti perintah untuk
mengambil semua field pada tabel dosen
dengan kondisi
kode_dos mengambil hasil dari operator IN atau operator yang
berfungsi untuk menentukan beberapa nilai yang tidak diketahui
dalam klausa WHERE dimana subquery tersebut memiliki
perintah untuk mengambil kode_dos dari tabel matakuliah dengan
syarat sks kurang dari operator ANY yang berfungsi untuk
mengembalikan satu nilai true jika salah satu subquery memenuhi
ketentuan dalam mengambil sks dari tabel matakuliah.
2. Tampilkan data nama mahasiswa yang mengambil matakuliah
dengan kode matakuliahnya “PTI777”
a. Source code :
SELECT nim,nama FROM mahasiswa WHERE nim IN (SELECT
nim FROM ambil_mk WHERE kd_mk = "PTI777")
b. Screenshot :
c. Analisis program :
SQL diatas digunakan untuk mendapatkan data nama pada tabel
mahasiswa yang memiliki kode matakuliah PTI777 dengan
menuliskan perintah SELECT nim,nama FROM mahasiswa WHERE
nim
IN
(SELECT
"PTI777")
nim
FROM
ambil_mk
WHERE
kd_mk
=
yang berarti perintah untuk mengambil nim dan nama
pada tabel mahasiswa dengan kondisi nim memenuhi operator IN
atau operator yang berfungsi untuk menentukan beberapa nilai
yang tidak diketahui dalam klausa WHERE dimana subquery
tersebut memiliki perintah untuk mengambil nim dari tabel
ambil_mk dengan syarat kd_mk sama dengan PTI777.
3. Dapatkan data mahasiswa yang tinggal satu wilayah dengan dosen
yang merupakan Ketua Jurusan Teknik Elektro.
a. Source code :
SELECT * FROM mahasiswa WHERE alamat IN ( SELECT
alamat_dos FROM dosen WHERE kode_dos IN (SELECT
kode_dos FROM jurusan WHERE kode_jur = "TE"))
b. Screenshot :
c. Analisis program :
SQL diatas digunakan untuk mendapatkan data mahasiswa yang
memiliki alamat satu wilayah dengan ketua jurusan teknik elektro
yaitu Jl. Jombang dengan menuliskan perintah SELECT * FROM
mahasiswa WHERE alamat IN ( SELECT alamat_dos FROM
dosen WHERE kode_dos IN (SELECT kode_dos FROM jurusan
WHERE
kode_jur
=
"TE"))
yang berarti perintah untuk
mengambil semua field pada tabel mahasiswa dengan syarat
alamat memenuhi operator IN atau operator yang berfungsi untuk
menentukan beberapa nilai yang tidak diketahui dalam klausa
WHERE dimana subquery tersebut memiliki perintah untuk
mengambil alamat_dos pada tabel dosen menggunakan operator
IN dengan mengambil kode_dos pada tabel jurusan dengan syarat
kode_jur sama dengan TE.
4. Dapatkan data mahasiswa yang tidak diajar oleh Ketua Jurusan
Teknik Elektro.
a. Source code :
SELECT * FROM mahasiswa WHERE nim IN ( SELECT nim
FROM ambil_mk WHERE kd_mk NOT IN (SELECT kd_mk FROM
matakuliah WHERE kode_dos = (SELECT kode_dos FROM
jurusan WHERE kode_jur = "TE")))
b. Screenshot :
c. Analisis program :
SQL diatas digunakan untuk mencari data mahasiswa yang tidak
diajar oleh ketua jurusan teknik elektro berjumlah 4 mahasiswa
karena mahasiswa tersebut tidak memiliki kd_mk PTI333 dan
TIK333 pada tabel ambil_mk dengan menuliskan perintah SELECT
*
FROM
mahasiswa
ambil_mk
matakuliah
WHERE
WHERE
WHERE
kd_mk
nim
NOT
kode_dos
IN
IN
=
(
SELECT
nim
FROM
kd_mk
FROM
kode_dos
FROM
(SELECT
(SELECT
jurusan WHERE kode_jur = "TE")))
yang berarti perintah
untuk mengambil semua field pada tabel mahasiswa dengan syarat
nim memenuhi operator IN atau operator yang berfungsi untuk
menentukan beberapa nilai yang tidak diketahui dalam klausa
WHERE dimana subquery tersebut mengambil nim dari tabel
ambil_mk dengan syarat kd_mk tidak memiliki nilai yang sama
dengan operator IN yang mengambil kd_mk dari tabel matakuliah
dengan syarat kode_dos sama dengan kode_dos pada tabel jurusan
dimana kode_jur sama dengan TE.
VI.
Kesimpulan
Subquery adalah query lanjutan yang didalam query utama yang
digunakan untuk mencari nilai-nilai yang tak diketahui dari query utama.
Subquery sangat berguna ketika kita ingin menampilkan data dengan
kondisi yang bergantung pada data di dalam table lain yang berbeda.
Terdapat 3 macam subquery antara lain : Scalar Subquery, Multiple-Row
Subquery, dan Multiple-Column Subquery. Scalar Subquery merupakan
subquery baris tunggal (scalar) hanya mengembalikan hasil satu baris
data, dan dapat menggunakan operator baris tunggal =, >,>=, <, <=, atau
<>. Multiple-Row Subquery merupakan subquery baris ganda (multiplerow) yang dapat mengembalikan lebih dari satu baris data, dan
menggunakan operator komparasi IN, ANY, SOME, atau ALL. Sedangkan
Multiple-Column Subquery merupakan subquery kolom ganda (multiplecolumn) yang dapat mengembalikan lebih dari satu baris dan satu kolom
data.
VII.
Daftar Rujukan
Kadir, Abdul. 2013. Pemrograman Database MySQL untuk Pemula.
Yogyakarta: MediaKom.
Jurusan Teknik Elektro. 2018. Modul 6: SUB QUERY. Malang:
Universitas Negeri Malang.