Menggunakan Subquery untukMemecahkan
QueryQuery
Menggunakan
suatu Subquery untuk Memecahkan suatu Persoalan
Misalkan
Anda ingin menulis suatu query untuk mencari tahu penghasilan siapa yang lebih
besar
daripada
penghasilan Abel.Untuk memecahkan masalah ini, Anda memerlukan dua query: satu query
untuk mencari berapabanyak penghasilan Abel, dan query kedua untuk mencari
penghasilan siapa yang lebih besar darijumlah itu.Anda dapat memecahkan
persoalan ini dengan menggabungkan dua query, menempatkan satu querydi dalam query
lain.Inner query (atau subquery) mengembalikan suatu nilai yang digunakan outer query (atau
queryutama). Penggunaan suatu subquery
sama dengan penggunaan dua query
berturutturutdanmenggunakan hasil dari query pertama sebagai nilai pencari
dalam query yang kedua.
Sintak
Subquery
Suatu
subquery adalah suatu pernyataan SELECT yang dilekatkan didalam suatu klausa pada
pernyataan
SELECT lain. Anda dapat membangun
pernyataanpernyataanyang kuat selain yang
sederhana
dengan menggunakan subquerysubquery.Subquerysubquerybisa sangat bermanfaat
ketika
Anda memerlukan untuk memilih barisbarisdari suatu table dengan suatu kondisi
yang
tergantung
pada data didalam tabel itu sendiri.Anda dapat menempatkan subquery didalam
sejumlahklausaklausa
SQL,
termasuk berikut :
· Klausa WHERE
· Klausa HAVING
· Klausa FROM
Didalam
Syntax :
Operator termasuk suatu
kondisi pembanding seperti >, =, atau IN
Catatan :
Kondisikondisipembanding dibagi dalam dua kelas : singlerowoperator(>,=,>=,<,<>,<=) dan multiplerowoperator (IN, ANY, ALL).Subquery lebih
dikenal sebagai suatu SELECT bersarang
(nested),
subSELECT,atau pernyataaninner
SELECT. Secara
umum subquery dieksekusi
pertama kali, dan hasilnya digunakan untukmelengkapi kondisi query pada query
utama (atau outer).
PedomanPedoman
untuk
Menggunakan Subquery
· Suatu subquery
harus diapit tanda kurung.
· Tempatkan subquery
disisi kanan dari kondisi pembanding agar
mudah dibaca.
· Pada Oracle8i
dan keluarankeluaranberikutnya, suatu
klausa ORDER BY bisa
digunakan dandiperlukan dalam subquery
untuk melakukan pemeringkatan (TopNanalysis).
Sebelumnyapada
Oracle8i,
bagaimanapun, subquerysubquerytidak bisa memuat klausaORDER BY.Klausa ORDER BY hanya
sekali digunakan untuk suatu pernyataan SELECT;jika ditentukan, klausa ORDER BY berada diakhir pada pernyataan SELECT
utama.
· Dua kelas dari kondisikondispembanding digunakan dalam subquerysubquery:singlerowoperatordan
multiplerowoperator.
TipeTipedari
Subquery
· Singlerowsubquery:
Query yang mengembalikan hanya satu baris dari pernyataan inner
SELECT
(SELECT terdalam).
· Multiplerowsubquery: Query yang
mengembalikan lebih dari satu baris dari pernyataan inner
SELECT.
SingleRow
Subqueries
Suatu
singlerow
subquery adalah
mengembalikan satu baris dari pernyataan inner SELECT. Tipe
dari
subquery ini menggunakan suatu singlerowoperator. Pada slide diberikan suatu daftar darioperatoroperatorsinglerow.
Contoh
Tampilkan
pegawaipegawaiyang job Idnyasama dengan pegawai 141:
SELECT
last_name, job_id
FROM
employees
WHERE
job_id =
(SELECT
job_id
FROM
employees
WHERE
employee_id = 141 );
Menggunakan
Grup Function dalam suatu Subquery
Anda
bisa menampilkan data dari suatu query utama dengan menggunakan grup function didalam
subquery untuk
mengembalikan suatu baris tunggal. Subquery
berada dalam tanda kurung dan
diletakkan
setelah kondisi pembanding.
Klausa
HAVING dengan
Subquery
Anda
dapat menggunakan subquerysubquerytidak hanya pada klausa WHERE tapi bisa juga pada
klausa
HAVING. Server Oracle mengeksekusi subquery, dan
hasilnya dikembalikan ke dalam klausa
HAVING
pada query utama.
MultipleRowSubqueries
Subquerysubqueryyang
mengembalikan lebih dari satu baris disebut multiplerowsubqueries.
Anda
menggunakan suatu multiplerowoperator, disamping suatu singlerowoperator, pada suatumiltiplerowsubquery. Multiplerowoperator
memperkirakan satu atau lebih nilainilai:
Contoh
Cari
pegawaipegawaiyang mendapat penghasilan yang sama dengan penghasilan minimum
untuk
setiap
departemen.
Inner query dieksekusi
pertama kali, menghasilkan suatu hasil query. Blok query utama kemudian
memproses
dan menggunakan nilainilaiyang dikembalikan oleh inner query untuk
melengkapi
kondisi
pencariannya. Sesungguhnya, query utama tampak pada server Oracle sebagai
berikut:
SELECT
last_name, salary, department_id
FROM
employess
WHERE
salary IN (2500, 4200, 6000, 7000, 800, 8600, 17000);
Operator
ANY ( dan sinonimnya, operator SOME) membandingkan suatu nilai pada setiap nilai yang
dikembalikan
oleh suatu subquery.
Contoh pada slide menampilkan para pegawai yang bukan IT
programmers
dan penghasilan siapa yang kurang dari beberapa IT programmer. Penhasilan
maksimum
yang didapat seorang programmer adalah $ 9,000.
<ANY
maksudnya kurang dari maksimum. >ANY maksudnya lebih dari minimum.
=ANY adalah
sama
dengan IN.
Operator
ALL membandingkan suatu nilai untuk setiap nilai
yang dikembalikan oleh suatu
subquery. Contoh
dalam slide menampilkan para pegawai yang penghasilannya kurang daripenghasilan
dari semua pegawai dengan suatu job ID IT_PROG dan siapa yang bukan IT_PROG.>ALL maskudnya
lebih dari maksimum, dan <ALL maksudnya kurang dari minimum.Operator NOT dapat digunakan dengan operatoroperatorIN, ANY, dan ALL.
Tidak ada komentar:
Posting Komentar