Selasa, 04 Oktober 2011

RESUME SQL 1 PERT 6

Menggunakan Subquery untuk Memecahkan 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 berapa banyak penghasilan Abel, dan query kedua untuk mencari penghasilan siapa yang lebih besar dari jumlah itu. Anda dapat memecahkan persoalan ini dengan menggabungkan dua query, menempatkan satu query di dalam query lain. Inner query (atau subquery) mengembalikan suatu nilai yang digunakan outer query (atau query utama). Penggunaan suatu subquery sama dengan penggunaan dua query berturut turut dan menggunakan hasil dari query pertama sebagai nilai pencari dalam query yang kedua.

Sintak Subquery
SELECT select_list
FROM table
WHERE expr operator (SELECT select_list FROM table);
Suatu subquery adalah suatu pernyataan SELECT yang dilekatkan didalam suatu klausa pada
pernyataan SELECT lain. Anda dapat membangun pernyataan pernyataan yang kuat selain yang
sederhana dengan menggunakan subquery subquery. Subquery subquery bisa sangat bermanfaat
ketika Anda memerlukan untuk memilih baris baris dari suatu table dengan suatu kondisi yang
tergantung pada data didalam tabel itu sendiri.
Anda dapat menempatkan subquery didalam sejumlah klausa klausa SQL, termasuk berikut :
 Klausa WHERE
 Klausa HAVING
 Klausa FROM
Didalam Syntax :
Operator termasuk suatu kondisi pembanding seperti >, =, atau IN
Catatan : Kondisi kondisi pembanding dibagi dalam dua kelas : singlerow operator (>,=,>=,<,<>,<=) dan multiplerow operator (IN, ANY, ALL).
Subquery lebih dikenal sebagai suatu SELECT bersarang (nested), subSELECT, atau pernyataan
inner SELECT. Secara umum subquery dieksekusi pertama kali, dan hasilnya digunakan untuk
melengkapi kondisi query pada query utama (atau outer).

Pedoman Pedoman untuk Menggunakan Subquery
 Suatu subquery harus diapit tanda kurung.
 Tempatkan subquery disisi kanan dari kondisi pembanding agar mudah dibaca.
 Pada Oracle8i dan keluaran keluaran berikutnya, suatu klausa ORDER BY bisa digunakan dan
diperlukan dalam subquery untuk melakukan pemeringkatan (TopN analysis).
Sebelumnya pada Oracle8i, bagaimanapun, subquery subquery tidak bisa memuat klausa
ORDER 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 kondisi kondisi pembanding digunakan dalam subquery subquery: singlerow
operator dan multiplerow operator.

Tipe Tipe dari Subquery
Singlerow subquery: Query yang mengembalikan hanya satu baris dari pernyataan inner
SELECT (SELECT terdalam).
Multiplerow subquery: Query yang mengembalikan lebih dari satu baris dari pernyataan inner
SELECT.

Single Row Subqueries
Suatu singlerow subquery adalah mengembalikan satu baris dari pernyataan inner SELECT. Tipe
dari subquery ini menggunakan suatu singlerow operator. Pada slide diberikan suatu daftar dari
operator operator singlerow.
Contoh
Tampilkan pegawai pegawai yang job IDnya sama 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.
Contoh :
SELECT last_name, job_id, salary
FROM employees
WHERE salary = (SELECT MIN(salary) FROM employees);
Contoh tersebut menampilkan nama belakang pegawai, job ID, dan penghasilan seluruh pegawai
yang penghasilannya sama dengan penghasilan minimum. Group function MIN mengembalikan suatu nilai tunggal (2500) untuk outer query.

Klausa HAVING dengan Subquery
Anda dapat menggunakan subquery subquery tidak hanya pada klausa WHERE tapi bisa juga pada klausa HAVING. Server Oracle mengeksekusi subquery, dan hasilnya dikembalikan ke dalam klausa HAVING pada query utama.

Kesalahan Kesalahan pada Subquery Subquery
Satu kesalahan umum pada subquery terjadi ketika lebih dari satu baris dikembalikan untuk suatu singlerow subquery.
SELECT employee_id, last_name
FROM employees
WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);
Pada pernyataan SQL diatas, subquery berisi suatu klausa GROUP BY, yang berakibat
subquery itu akan mengembalikan banyak baris, satu dari setiap kelompok yang ditemukannya.
Dalam kasus ini, hasil dari subquery adalah 4400, 6000, 2500, 4200, 7000, 17000, dan 8300.
Outer query mengambil hasil hasil itu dan menggunakannya pada klausa WHERE. Klausa WHERE berisi suatu operator samadengan ( = ), suatu operator pembanding singlerow
yang dikira hanya satu nilai. Operator = tidak menerima lebih dari satu nilai dari subquery dan oleh karena itu menghasilkan kesalahan.
Untuk memperbaiki kesalahan ini, rubah operator = menjadi IN.

Multiple Row Subqueries
Subquery subquery yang mengembalikan lebih dari satu baris disebut multiplerow
subqueries. Anda menggunakan suatu multiplerow operator, disamping suatu singlerow
operator, pada suatu miltiplerow subquery. Multiplerow operator memperkirakan satu atau lebih nilai nilai :
Contoh
Cari pegawai pegawai yang 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 nilai nilai yang 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);


Tidak ada komentar:

Posting Komentar