0% found this document useful (0 votes)
33 views9 pages

Modul 06

Sub query

Uploaded by

githubdy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views9 pages

Modul 06

Sub query

Uploaded by

githubdy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Modul Praktikum Basis Data

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.

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

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 multiple-column.

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

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.

Main query

Returns 102
Subquery 103
104

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.

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

Main query

Returns
102 Budi L
Subquery
103 Wati P

Gambar 3 Multiple-column subquery

Subquery dapat diimplementasikan di dalam klausa WHERE, HAVING,


atau FROM.

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;

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

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

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

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

Himpunan entitas di atas dapat direpresentasikan ke dalam diagram


skema (schema diagram) seperti Gambar 4.

mahasiswa ambil_mk matakuliah


nim nim kode_mk
kode_mk nama_mk
nama
jenis_kelamin sks
alamat semester
kode_dos

dosen jurusan
kode_dos kode_jur
nama_dos nama_jur
nip kode_dos

Gambar 4 Diagram skema

2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang
alamatnya sama dengan mahasiswa dengan nim 104.

Jl. Jombang

Bisa digambarkan, langkah pertama dari operasi di atas adalah


mendapatkan alamat mahasiswa dengan nim 104, kemudian hasilnya—
yakni “Jl.Jombang”—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
mahasiswa yang mengambil matakuliah.

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

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 = 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 kecil dari semua sks matakuliah di semester 5.

3, 3, 2, 3

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

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


Operator > ALL ekuivalen dengan MAX (lebih dari maks).

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

5. 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 data mahasiswa
yang mengambil matakuliah.

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

Pernyataan berikut akan mendapatkan data mahasiswa yang tidak


mengambil matakuliah.

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 terbesar.

7. 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 nim dan nama
mahasiswa yang tidak mengambil matakuliah.
Pendekatan subquery:

Rekayasa Perangkat Lunak


SMK NEGERI 3 TUBAN
Modul Praktikum Basis Data

Pendekatan join:

Jika diperhatikan, pernyataan pada subquery mengalir secara alami—lebih


mudah dicerna—dibanding join. Bagaimanapun, salah satu kendala dalam
join adalah menentukan mana yang akan menjadi tabel kiri dan kanan .

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)

Jurusan Teknik Elektro 40


Fakultas Teknik Universitas Negeri Malang (UM)

You might also like