Anda di halaman 1dari 12

LAPORAN MODUL V

PRAKTIKUM BASIS DATA

Dosen Pengampu:
Khalid bin Sjamsuri, M. Kom

Disusun oleh:
Muhammad Syaifuddin Cahya Kusuma
(09020622036)

PROGRAM STUDI SISTEM INFORMASI


FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS ISLAM NEGERI SUNAN AMPEL SURABAYA
2023
MODUL V
SUB QUERY
1. TUJUAN
• Memahami keterhubungan entitas di dalam basis data.
• Memahami operasi subquery dan jenis-jenisnya di dalam pengambilan data.
• Mampu menyelesaikan kasus-kasus pengambilan data yang kompleks dengan
pendekatan subquery.

2. 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 yaitu Scalar, multiple-row, dan multiple-
column.
3. LATIHAN
Gunakan data Siakad yang di gunakan pada modul 4.
a. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data dosen yang Jenis
kelaminnya sama dengan dosen dengan nama “Zainab”.

SELECT
dosen.nomor_induk_dosen,dosen.nama_dosen,dosen.jenis_kela
min FROM dosen WHERE dosen.jenis_kelamin = (SELECT
dosen.jenis_kelamin FROM dosen WHERE dosen.nama_dosen =
'Zainab')

b. 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 dosen.nomor_induk_dosen,dosen.nama_dosen
FROM dosen
WHERE dosen.nomor_induk_dosen IN (SELECT
nomor_induk_dosen FROM mengajar
WHERE periode = '20141')
• 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 kode_mata_kuliah,nama_mata_kuliah,sks FROM


mata_kuliah WHERE sks < any (SELECT sks FROM mata_kuliah
WHERE semester = 3)

Operator = ANY ekuivalen dengan IN.


Operator < ANY ekuivalen dengan MAX (kurang dari maks).
Operator > ANY ekuivalen dengan MIN (lebih dari min).
• 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 kode_mata_kuliah,nama_mata_kuliah,sks FROM


mata_kuliah WHERE sks > ALL (SELECT sks FROM mata_kuliah
WHERE semester = 3)

Operator < ALL ekuivalen dengan MIN (kurang dari min).


Operator > ALL ekuivalen dengan MAX (lebih dari maks).
C. 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 nama mata kuliah
“Desain Basis Data”.
SELECT
kode_mata_kuliah,nama_mata_kuliah,sks,semester,kodejenis
FROM mata_kuliah WHERE (semester,sks) IN (SELECT semester,
sks FROM mata_kuliah WHERE nama_mata_kuliah = 'Desain Basis
Data')
D. Operator EXISTS dan NOT EXISTS
Operator EXISTS dan NOT EXISTS digunakan pada correlated subquery untuk memeriksa
apakah subquery mengembalikan hasil atau tidak. Apabila subquery mengembalikan hasil,
EXISTS akan mengembalikan nilai true. Begitu pula sebaliknya, jika tidak mengembalikan
hasil. Sebagai contoh, pernyataan berikut akan mendapatkan mata kuliah yang sudah
diambil oleh mahasiswa

SELECT * FROM mata_kuliah mk WHERE EXISTS/NOT EXISTS


(SELECT * FROM mengajar m WHERE mk.kode_mata_kuliah =
m.kode_mata_kuliah)

EXISTS

NOT EXISTS
E. 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 mata_kuliah mk WHERE sks IN (SELECT MIN(sks)


FROM "public".mata_kuliah)

F. Subquery dan Join


Dalam beberapa kasus sederhana, fungsionalitas subquery dan join dapat dipertukarkan.
Dengan kata lain, keduanya dapat digunakan untuk menyelesaikan persoalan yang sama.
Sebagai contoh, misalkan kita ingin mendapatkan kode dosen dan nama dosen yang tidak
mengajar matakuliah.
Pendekatan subquery:

SELECT dosen.nomor_induk_dosen, dosen.nama_dosen FROM


dosen WHERE dosen.nomor_induk_dosen NOT IN (SELECT
mengajar.nomor_induk_dosen FROM mengajar)
Pendekatan join:
SELECT
d.nomor_induk_dosen,d.nama_dosen,"m".kode_mata_kuliah
FROM dosen AS d LEFT JOIN mengajar AS "m" ON
d.nomor_induk_dosen = "m".nomor_induk_dosen WHERE
"m".kode_mata_kuliah IS NULL
TUGAS PRAKTIKUM

1.Dapatkan data negara yang menggunakan Bahasa resmi (official) = ‘German’. (Gunakan
IN. jumlah record output = 6).

SELECT * FROM negara


WHERE kode_negara IN (SELECT kode_negara FROM
bahasa_negara
WHERE bahasa = 'German' AND is_official ='T');

2. Dapatkan data negara yang ibukota negaranya adalah ‘Manila’. (jumlah record output = 1).

SELECT * FROM negara


WHERE ibukota = (SELECT id_kota FROM kota
WHERE nama_kota = 'Manila');
3. Dapatkan data negara dari benua ‘Asia’ yang merdeka setelah tahun merdeka negara-
negara‘Southeast Asia’. (Gunakan ALL. jumlah record output = 8).

SELECT * FROM negara WHERE benua = 'Asia' AND


tahun_merdeka > ALL (SELECT MAX(tahun_merdeka)FROM
negara WHERE region = 'Southeast Asia');

4. Dapatkan data negara dari benua ‘Asia’ yang luas wilayahnya lebih kecil dari luas wilayah
negara di region ‘Polynesia’. (Gunakan ANY. jumlah record output = 5).

SELECT * FROM negara WHERE benua = 'Asia' AND luas_wilayah <


ANY (SELECT luas_Wilayah FROM negara WHERE region =
'Polynesia');
5. Dapatkan data negara ‘Europe’ yang menggunakan merdeka setelah 1990. (Gunakan IN
multi columns sub query. jumlah record output = 13).

SELECT * FROM negara WHERE kode_negara IN (SELECT


kode_negara FROM negara WHERE benua = 'Europe' AND
tahun_merdeka > '1990');

6. Dapatkan data negara yang menggunakan Bahasa (official / unofficial) = ‘Malay’.


(Gunakan
EXISTS. jumlah record output = 6).

SELECT * FROM negara n WHERE EXISTS (SELECT * FROM


bahasa_negara bn WHERE bn.kode_negara = n.kode_negara AND
bahasa = 'Malay');

Anda mungkin juga menyukai