QUERY LANJUTAN
SUBQUERY
Subquery adalah statement SELECT yang dilampirkan sebagai
klausa dalam SQL Statement yang lain. Untuk penulisan subquery pada SQL.
Pada gambar diatas, subquery (inner query) dijalankan
sekali sebelum main query. Kemudian hasil dari subquery digunakan oleh main
query (outer query).
PENGGUNAAN QUERY
Subquery mengembalikan nilai ke main query. Subquery
digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak
diketahui (unknown values). Berikut ini diberikan contoh penggunaan subquery.
SELECT last_name
FROM mahasiswa
WHERE salary > ( SELECT salary FROM MAHASISWA WHERE
mahasiswa_id=60);
Query diatas akan menampilkan nama pegawai yang gajinya
lebih dari pegawai dengan nomer pegawai 149. Sebelumnya, gaji dari pegawai
dengan nomer pegawai 149 tidak diketahui, untuk itu kita tempatkan sebagai subquery
agar nilai yang tidak diketahui tersebut dapat diketahui dan pada ilustrasi
gambar diatas nilai gaji dari pegawai 149 adalah 10500.
SUBQUERY BANYAK KOLOM
Pada subquery dengan banyak kolom, tiap baris dari main
query dibandingkan dengan nilai dari subquery multiple-row dan multiple-column.
Berikut ini contoh pembandingan dengan banyak kolom dan baris :
PEMBANDINGAN
KOLOM
Pembandingan kolom dalam
subquery banyak kolom dapat berupa :
1.
Pembandingan berpasangan (Pairwise Comparison SubQuery)
contoh pembandingan berpasangan untuk menampilkan detail
dari data mahasiswa yang mengambil mata kuliah dan dosen yang sama dengan yang
dimiliki oleh nomer mahasiswa 20.
SELECT mahasiswa_id, makul_id, dosen_id FROM mahasiswa WHERE (makul_id,
dosen_id) IN
(SELECT makul_id, dosen_id FROM
mahasiswa WHERE mahasiswa_id IN (20,29))
AND mahasiswa_id NOT IN (20,29);
2. Pembandingan tidak berpasangan (NonPairwise Comparison SubQuery)
Berikut contoh pembandingan tidak berpasangan untuk
menampilkan detail dari data mahasiswa yang mengambil mata kuliah dan dosen
yang sama dengan mahasiswa dengan nomer mahasiswa 157 dan 168 dan dosen yang
sama dengan mahasiswa yang memiliki nomer pegawai 157 atau 168.
SELECT
mahasiswa_id, makul_id, dosen_id
FROM mahasiswa WHERE makul_id IN
(SELECT makul_id FROM mahasiswa
WHERE mahasiswa_id IN (157,168))
AND dosen_id IN
(SELECT dosen_id FROM mahasiswa
WHERE mahasiswa_id IN (157,168))
AND mahasiswa_id NOT IN(157,168);
PENGGUNAAN QUERY DALAM KLAUSA FROM
Query bisa diletakkan di dalam klausa FROM untuk
membentuk tabel temporer. Query semacam ini dikenal juga dengan istilah inline
view, karena tidak membentuk object database.
Berikut
ini contoh penggunaan Query dalam klausa FROM.
SELECT nama_mhs, nilai_uas, nilai_uts,FROM mahasiswa
WHERE nilai_uas > nilai_uts;
Query diatas menampilkan nama mahasiswa, nilai uas, dan
nilai uts, yang nilai UASnya lebih besar dari nilai UTS
EKSPRESI SCALAR SUBQUERY
Ekspresi scalar subquery adalah subquery yang
mengembalikan hanya satu nilai kolom dari satu baris.
Contoh : penggunaan scalar subquery dalam ekspresi CASE :
SELECT
mahasiswa_id, nama_mhs,(CASE WHEN makul_id = THEN 'SBD' ELSE 'Statistika' END)
location FROM mahasiswa;
Contoh : penggunaan scalar subquery dalam klausa ORDER BY
:
SELECT mahasiswa_id, mana_mhs FROM mahasiswa ORDER BY
SELECT nama_dosen FROM dosen WHERE mahasiswa_id=dosen_id;
KORELASI SUBQUERY
Korelasi SubQuery digunakan untuk pemrosesan baris per
baris. Tiap-tiap subquery dijalankan sekali untuk setiap baris dari outer
query.
Prosesnya
sebagai berikut :
Proses korelasi dimulai dengan mengambil baris dari outer
query, kemudian inner query dijalankan dengan menggunakan nilai baris kandidat,
kemudian nilai dari inner query digunakan untuk melakukan kualifikasi atau
mendiskualifikasi baris kandidat.
Berikut ini cara penulisan dari Korelasi SubQuery :
SELECT
column1, column2, ... FROM table1 outer WHERE column1 operator (SELECT colum1,
column2 FROM table2 WHERE expr1 = outer.expr2);
Korelasi Subquery juga dapat digunakan untuk meng-update
baris pada satu table berdasarkan pada baris dari table yang lain, korelasi
seperti itu dinamakan dengan Korelasi Update.
Berikut
cara penulisan Korelasi Update :
UPDATE
table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE
alias1.column = alias2.column);
Korelasi Subquery juga dapat digunakan untuk menghapus
baris pada satu table berdasarkan pada baris dari table yang lain, korelasi
seperti itu dinamakan dengan Korelasi Delete.
Berikut cara penulisan Korelasi Delete :
DELETE
FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2
WHERE alias1.column = alias2.column);
PENGGUNAAN OPERATOR EXIST DAN NOT EXIST
Operator EXISTS dan NOT EXIST digunakan untuk menguji
keberadaan dari baris dalam himpunan hasil dari subquery.
·
Jika ditemukan, maka pencarian tidak
dilanjutkan dalam inner query dan kondisi ditandai TRUE.
·
Jika tidak ditemukan, maka : Kondisi ditandai
FALSE dan kondisi pencarian dilanjutkan dalam inner query.
Berikut
penggunaan operator EXISTS untuk mencari pegawai yang memiliki sedikitnya
satu orang bawahan.
PENGGUNAAN KLAUSA WITH
Dengan menggunakan klausa WITH, kita dapat menggunakan
blok query yang sama dalam statement SELECT pada saat terjadi lebih dari sekali
dalam complex query. Klausa WITH mendapatkan hasil dari blok query dan
menyimpannya dalam tablespace temporer kepunyaan user. Klausa WITH dapat
meningkatkan performansi.