Skip to main content

Subquery

Di dalam syntax query terkadang terdapat syntax query lagi. Inilah yang disebut dengan subquery.
Contoh :
select mhs.namaMhs,ambilmk.nilai
from mhs,ambilmk
where mhs.nim=ambilmk.nim and ambilmk.kodeMK=’A02’ and
ambilmk.nilai=(select max(nilai) from ambilmk);

dari contoh di atas yang disebut sebagai subquery adalah syntax (select max(nilai) from ambilmk)

biasanya subquery dapat diimplementasikan dalam penyelesaian masalah dimana nilainya belum diketahui. Berikut ini implementasi dari subquery. Yang dilakukan pertama kali adalah membuat 3 tabel yaitu tabel mhs, tabel mk dan tabel ambilmk. Berikut ini syntax SQL untuk membuat ketiga tabel tersebut :
create table mhs (nim varchar (10),namaMhs varchar (30));
create table mk (kodeMK varchar(10),namaMK varchar (30),sks int (5));
create table ambilmk(nim varchar (10),kodeMK varchar(10),nilai int (5));

setelah membuat tabel, langkah kedua yaitu mengisi tabel tersebut, berikut syntax untuk memasukkan data ke tabel tersebut

insert into mhs values (‘001’,’Andi’), ('002’,’Beny’), ('003’,’Cindi’);
insert into mk values (‘A01’,’PBO’,’2’), (‘A02’,’SBD’,’2’), (‘A03’,’Statistika’,’2’);
insert into ambilmk values (‘001’,’A01’,’3’), (‘001’,‘A02’,’4’), (‘001’,’A03’,’2’), (‘002’,‘A02’,’3’), (‘002’,’A03’,’2’), (‘003’,‘A01’,’4’), (‘003’,’A02’,’3’), (‘003’,‘A03’,’3’);
 

misal terdapat persoalan yang meminta untuk menampilkan :
1.      Nama mahasiswa beserta nilai mata kuliahnya yang memiliki nilai paling rendah pada mata kuliah SBD
2.      Nama mahasiswa beserta NIM yang nilainya di bawah rata-rata pada matakuliah statistika
3.      Nama mahasiswa beserta NIM-nya yang tidak mengambil mata kuliah PBO

Untuk menyelesaikan masalah pertama dapat dilakukan dengan cara menggunakan subquery sebagai berikut
select mhs.namaMhs,ambilmk.nilai
from mhs,ambilmk
where mhs.nim=ambilmk.nim and ambilmk.kodeMK='A02'
and ambilmk.nilai=(select min(nilai) from ambilmk);
subquery (select min(nilai) from ambilmk) digunakan untuk memberi nilai pada query yang berada dilevel di atasnya dengan nilai terendah mahasiswa yang mengambil matakuliah dengan kodeMK A02

Untuk menyelesaikan masalah kedua dapat dilakukan dengan cara menggunakan subquery sebagai berikut
select mhs.namaMhs,ambilmk.nilai
from mhs,ambilmk
where mhs.nim=ambilmk.nim and ambilmk.kodeMK='A03'
and ambilmk.nilai>(select avg(nilai) from ambilmk);
Subquery (select avg(nilai) from ambilmk) digunakan utnuk memberi nilai pada query yang berda di level di atasnya dengan nilai rata-rata dari nilai mahasiswa yang mengambil mata kuliah dengan kodeMK A03

Untuk menyelesaikan masalah ketiga dapat dilakukan dengan cara menggunakan subquery sebagai berikut
select * from mhs
where nim not in (select nim from ambilmk where kodemk='A01');
Pada query utama digunakan untuk menampilkan seluruh mahasiswa. Sedangkan subquery digunakan untuk menampilkan mahasiswa yang mengambil matakuliah dengan kodeMK A01.
Karena didalam klausa where terdapat not in maka yang akan ditampilkan adalah mahasiswa yang tidak mengambil mata kuliah dengan kodeMK A01.

Comments