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
Post a Comment