SUBQUERY
Baca selengkapnya »
1 komentar
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
SUBQUERY
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 = 149);
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 10.
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 (10,18))
AND mahasiswa_id
NOT IN (10,18);
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;
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;
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);
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.
1. Jika ditemukan, maka pencarian tidak dilanjutkan dalam inner query dan kondisi ditandai TRUE.
2. Jika tidak ditemukan, maka : Kondisi ditandai FALSE dan kondisi pencarian dilanjutkan dalam inner query.
1. Jika ditemukan, maka pencarian tidak dilanjutkan dalam inner query dan kondisi ditandai TRUE.
2. 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.