Modul 06
Modul 06
MODUL VI
SUBQUERY
A. 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.
B. PETUNJUK
Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.
C. 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.
a. Scalar Subquery
Subquery baris tunggal (scalar) hanya mengembalikan hasil satu
baris data. Bentuk subquery ini diperlihatkan seperti Gambar 1.
Main query
Returns
Subquery 102
b. Multiple-Row Subquery
Subquery baris ganda (multiple-row) mengembalikan lebih dari satu
baris data. Bentuk subquery ini diperlihatkan seperti Gambar 2.
Main query
Returns 102
Subquery 103
104
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.
Main query
Returns
102 Budi L
Subquery
103 Wati P
D. 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;
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
Tabel matakuliah
kode_mk nama_mk sks semester kode_dos
PTI447 Praktikum Basis Data 1 3 11
TIK342 Praktikum Basis Data 1 3 11
PTI333 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
dosen jurusan
kode_dos kode_jur
nama_dos nama_jur
nip kode_dos
2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang
alamatnya sama dengan mahasiswa dengan nim 104.
Jl. Jombang
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
mahasiswa yang mengambil matakuliah.
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 kecil dari sembarang sks matakuliah di semester 5.
3, 3, 2, 3
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 kecil dari semua sks matakuliah di semester 5.
3, 3, 2, 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 dengan main query.
Sebagai contoh, misalkan kita ingin menampilkan data matakuliah yang
semester dan sksnya sesuai dengan semester dan sks matakuliah dengan
kode “PTI333”.
5 3
Pendekatan join:
E. 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 jenis kelaminnya sama dengan “Arif”
tidak termasuk “Arif”. (Point 10)
2. Dapatkan matakuliah yang tidak diambil oleh mahasiswa terdaftar
(mahasiswa di tabel mahasiswa). (Point 20)
3. Dapatkan data mahasiswa yang mengambil matakuliah dengan sks lebih
kecil dari sembarang sks. (Point 25)
4. Dapatkan data dosen yang mengajar matakuliah di semester yang sama
dengan dosen yang sekaligus menjadi ketua jurusan Teknik Elektro tidak
termasuk ketua jurusan Teknik Elektro. (Point 30)
5. Dapatkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama
dengan dosen yang mengajar matakuliah dengan sks di atas rata-rata.
(Point 35)