Subquery digunakan untuk menyeleksi data dari query lain (main query) berdasarkan hasil query tersebut. Kasus yang diberikan melibatkan tabel sekolah, akreditasi, peringkat, dan hubungan antar tabel, serta contoh penggunaan insert, update, delete, select, join, dan subquery untuk mengolah data tabel tersebut.
2. Cara mengerjakan!
• Siapkan buku bacaan, catatan dan laptop!
• Catat permasalahan yang akan muncul
• Baca buku terkait subquery
• Jawablah permasalahan yang muncul sesuai dengan pemahaman
anda tentang masalah tersebut
• Dikumpulkan di edmodo dengan nama file Tsubquery_NIM.ppt
3. 1. Jelaskan apa yang dimaksud dengan:
subquery dan mainquery! Berikan contohnya!
Jawab:
Subquery (subselect /nested select /inner-select) adalah
query yang ada di dalam perintah SQL lain / main query
atau query utamanya. Subquery bisa nested pada
statement SELECT, UPDATE, DELETE dan INSERT.
Subquery biasanya ditambahkan di sintaks WHERE nya.
Subquery secara nyata mampu menyederhanakan
persoalan-persoalan rumit berkaitan query data. Sebagai
contoh, misalkan pernyataan sbb:
“Dapatkan nama, NIM dan total nilai mahasiswa yang
memiliki nilai lebih tinggi dari pada mahasiswa yang
memiliki NIM 104”
Secara main query, diperlukan dua tahapan untuk
menyelesaikan kasus di atas:
• SELECT nim dan total_nilai dari (FROM) tabel NILAI
dimana (WHERE) nim = ‘104’. Misal didapatkan
total_nilai mahasiswa tersebut adalah 80.
• SELECT nama dan nim mahasiswa serta total_nilai
mahasiswa dari (FROM) tabel mahasiswa (objek a) dan
tabel NILAI (objek b) dimana (WHERE) b.total_nilai > 80
Query yang menerapkan Subquery nya:
Dapatkan nama, nim dan total nilai mahasiswa dari tabel
mahasiswa dan tabel nilai dimana (WHERE) nilai
mahasiswa tersebut lebih tinggi dari nilai mahasiswa ber-
NIM 104.
4. 2. Klausa apa sajakah yang digunakan pada
subquery? Berikan contoh sintaksnya!
• Jawab:
Klausa yang digunakan untuk subquery biasanya adalah SELECT (harus), WHERE, FROM(harus), HAVING dan atau
GROUP BY. Contoh Sintaksnya (dari persoalan di no. 1):
SELECT a.studentid, a.name, b.total_marks
FROM student a, marks b
WHERE a.studentid = b.studentid AND b.total_marks >
(SELECT total_marks
FROM marks
WHERE studentid = 'V002');
Sintaks diatas diambil dari kasus dimana terdapat 2 tabel: student dan marks. Tabel student dialiaskan a dan marks
dialiaskan b. Di dalam WHERE pada main query, terdapat 3 statement lagi yang diberi tanda kurung, itulah subquery nya,
yang menyeleksi data di main query berdasarkan data yang ditemukan di subquery. Subquery diatas menggunakan ANY
(akan dijelaskan di no. 4)
5. 3. Single row, multiple row dan multiple
column merupakan …. ? Jelaskan!
• Jawab:
Single, multiple row dan multiple column merupakan tipe-tipe Subquery.
o Single row subquery : Subquery yang hanya mengembalikan data sebanyak 1 baris atau kurang.
o Multiple row subquery : Subquery yang mengembalikan data sebanyak 1 baris atau lebih.
o Multiple column subqueries : Subquery yang mengembalikan data sebanyak 1 kolom atau lebih.
Jika kita ingin hasil yang dikeluarkan oleh Subquey memungkinkan untuk berupa 1 atau lebih
baris/kolom, maka Subquery biasanya diletakkan di klausa FROM dan WHERE
6. 4. Jelaskan kegunaan dari operator IN, ALL, ANY
dalam multiple row pada subquery! Sertakan
contohnya!
• Jawab:
a. IN
Operator IN berfungsi untuk mengecek sebuah nilai di
dalam sebuah set nilia-nilai tertentu. Nilai-nilai tersebut
didapatkan dari hasil yang dikembalikan oleh subquery
kepada main query nya. Contoh:
Misalkan pada suatu database kita ingin menampilkan
ord_num, cust_code dan agent_code dari tabel orders
dimana agent_code adalah hasil seleksi dari agents yang
working_area nya bernilai ‘Bangalore’
SELECT ord_num, cust_code, agent_code
FROM orders
WHERE agent_code IN(
SELECT agent_code FROM agents
WHERE working_area='Bangalore');
7. b. ANY
Operator ANY berfungsi untuk membandingkan sebuah nilai satu
dan lainnya dalam sebuah set nilai-nilai tertentu. Operator yang
digunakan untuk ANY (dan diletakkan sebelum kata ANY) ialah :
=, <>, >, <, <=, >=
Keterangan:
• [< ANY] Kurang dari nilai tertinggi yang dikembalikan subquery
• [> ANY] Lebih dari nilai terendah yang dikembalikan subquery
• [=ANY] sama dengan operator IN
SELECT agent_code,agent_name,working_area,commissi
on
FROM agents
WHERE agent_code=ANY(
SELECT agent_code FROM customer
WHERE cust_country='UK');
Pada kasus diatas, data yang dipilih adalah yang agent_code nya
bernilai sama dengan data dari tabel customer yang cust_country
nya adalah ‘UK’.
c. ALL
Operator ALL berfungsi untuk
• [> ALL] More than the highest value returned by the subquery
• [< ALL] Less than the lowest value returned by the subquery
Misalnya untuk mencari karyawan yang usianya lebih tua
dibandingkan rata-rata usia semua karyawan yang berstatus
‘Manager’
Select emp_no, emp_name, emp_age, emp_job
from employeedb
Where emp_age > ALL (select avg(emp_age)
from emp
where emp_job = ‘Manager’)
8. 5. Buat table dengan nama Sekolah, dengan field IdSekolah,
NoSekolah dan Kelas. Tipe datanya integer, integer dan varchar
(50). Isikan dan update data dengan statement query insert,
update, delete, select dan JOIN (left join, right join, full join).
Sertakan sintaks. Penjelasan dan outputnya!
• Jawab:
9. Menggunakan database dan membuat tabel
• Menggunakan database
DBSS065
Sintaks:
use DBSS065
• Membuat table Sekolah
Sintaks:
create table Sekolah(
idSekolah int not null,
primary key (idSekolah),
noSekolah int,
kelas varchar(50),
)
10.
11. Insert into (memasukkan data ke table) dan kemudian
menampilkan data dengan select
• Insert into
Memasukkan data sesuai field dan tipe datanya. Sintaks:
insert into Sekolah values (211,01,'xii-mia, xi-mia, x-mia, xii-iis, xi-iis, x-iis')
insert into Sekolah values (212,02,'xii-mipa, xi-mipa, x-mipa, xii-ips, xi-ips, x-ips')
insert into Sekolah values (213,03,'xii-ipa, xi-ipa, x-ipa, xii-ips, xi-ips, x-ips')
insert into Sekolah values (214,04,'xii-ia, xi-ia, x-ia, xii-is, xi-is, x-is')
insert into Sekolah values (215,05,'xii-ips, xi-ips, x-ips, xii-bhs, xi-bhs, x-bhs')
insert into Sekolah values (216,06,'xii-iis, xi-iis, x-iis, xii-bhs, xi-bhs, x-bhs')
• Select * from
Memilih semua kolom/field pada table, dan mencetak semua datanya dari table Sekolah. Sintaks:
select* from Sekolah
12.
13. Membuat table
create table akreditasi(
idSekolah int not null,
foreign key (idSekolah) references Sekolah,
no_akrdts char(2) not null,
primary key (no_akrdts),
akrdts char(1)
)
create table peringkat(
idSekolah int not null,
foreign key (idSekolah) references Sekolah,
koderanking char(4) not null,
primary key (koderanking),
ranking int
)
create table memiliki(
id int not null,
foreign key (id) references Sekolah(idSekolah),
ak char(2) not null,
foreign key (ak) references akreditasi(no_akrdts),
ra char(4) not null,
foreign key (ra) references peringkat(koderanking)
)
14.
15.
16. Mengisi tabel dan menampilkannya
• Insert into
Memasukkan data sesuai field dan tipe datanya.
Sintaks:
insert into akreditasi values (212,'a1','A')
insert into akreditasi values (213,'b1','B')
insert into akreditasi values (211,'c3','C')
insert into akreditasi values (216,'c2','C')
insert into peringkat values (212,'s517', 1)
insert into peringkat values (213,'d016', 2)
insert into peringkat values (215,'m317', 14)
insert into peringkat values (216,'j815', 8)
• Select*from
select* from akreditasi
select* from peringkat
17.
18. Update (perbarui) data yang ada didalam table Sekolah
dan menampilkan table dengan data baru
• Update
Menggunakan update untuk memperbarui data yang sudah ada (mengganti nilai/isinya). Berikut kita akan mengubah
data field kelas dari baris data yang memiliki idSekolah = 214, diubah menjadi ‘XII-IA, XI-IA, X-IA, XII-IS, XI-IS, X-IS’.
Sintaks:
update Sekolah set kelas = 'XII-IA, XI-IA, X-IA, XII-IS, XI-IS, X-IS' where idSekolah = 214;
• Select * from Sekolah
Memilih semua kolom/field pada table, dan mencetak semua datanya dari table Sekolah.
Sintaks:
select* from Sekolah
19.
20. Delete (hapus) sebaris data dengan ketentuan tertentu
dan menampilkan hasil modifikasinya
• Delete data
Menghapus sebuah baris data dalam table
Sekolah dengan menggunakan ketentuan
dimana data yang dihapus adalah yang
idSekolah nya 214.
Sintaksnya:
delete from Sekolah where
idSekolah=214;
• Select
Menampilkan data ter-update dari table
Sekolah. Sintaks:
select * from Sekolah
21.
22. Left outer dan Right outer Join
• Left Outer
Pada left outer join, hasil akhirnya adalah union dari hasil akhir equi-join, termasuk beberapa baris dari tabel KIRI
yang tidak cocok (tidak punya pasangan di tabel kanan). Sintaksnya:
select a.idSekolah as 'ID Sekolah', a.akrdts as 'Akreditasi', b.ranking as 'Peringkat se-Kecamatan'
from akreditasi a left outer join peringkat b
on a.idSekolah=b.idSekolah;
• Right Outer
Pada right outer join, hasil akhirnya adalah union dari hasil akhir equi-join, termasuk beberapa baris dari tabel
KANAN yang tidak cocok (tidak punya pasangan di tabel kiri). Sintaksnya:
select b.idSekolah as 'ID Sekolah', a.akrdts as 'Akreditasi', b.ranking as 'Peringkat se-Kecamatan'
from akreditasi a right outer join peringkat b
on a.idSekolah=b.idSekolah;
23.
24.
25.
26. 6. Buatlah sebuah kasus dari soal no 5 yang
menggunakan subquery!
• Jawab:
Contoh Kasus yang bisa dibuat dari soal no.5, menggunakan
Subquery adalah:
Mencari sekolah mana saja kah yang memiliki ranking diatas ranking
sekolah ber-ID 215
27. SUBQUERY KASUS NO. 5
Pada kasus ini, yang harus ditemukan terlebih dahulu adalah:
Ranking dari Sekolah yang ber-ID 215. Maka, klausa subquerynya akan menyangkut
hal tersebut.
Kemudian, hasil dari subquery tadi dibandingkan dengan data-data ranking Sekolah
lainnya. Sehingga Query akhir nya adalah:
select a.idSekolah as 'ID Sekolah', a.noSekolah as 'Nomor Sekolah', b.ranking as 'Peringkat
Se-Kecamatan'
from Sekolah a join peringkat b on a.idSekolah= b.idSekolah and
b.ranking < (select ranking from peringkat where idSekolah=215)
order by b.ranking asc