Rabu, 02 Januari 2013

Bab ‘Query Lanjutan’.

 
 Dalam Query lanjutan, Ada 3 buah tabel yang digunakan masing-masing memiliki struktur sebagai berikut :
1.       Tabel DEPARTMENTS
Nama Tabel : DEPARTMENTS
Department_ID
Department_Name
Location_ID
10
Kaderisasi
1400
20
Syi’ar
1500
30
Annisa’
1300
40
Danus
1200
50
Maskam
1100

 
1.       Tabel Manager
Nama Tabel : Manager
Manager_ID
First_Name
Last_Name
Department_ID
205
Tatang
Sholeh
50
207
Ayu
Purnama
40
100
Arina
Ifadaniyati
30
153
Fauzie
Indrawan
10
228
Hendro
Welas
20

2.       Tabel Job_History
Manager_ID
TTL
Job_ID
Department_ID
228
25-SEPT-93
DR_A
20
207
04-MAR-92
DR_M
40
153
18-JAN-92
DR_D
10
205
20-FEB-92
DR_S
50
100
22-JUL-92
DR_K
30

A.      Apa itu Subquery?
Query
Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL Statement yang lain.
Subquery
SELECT ...
FROM...
WHERE...              (SELECT....
                                  FROM.....
                                  WHERE....)

B.      Pengggunaan Subquery
Subquery mengembalikan nilai ke main query.  Subquery  digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui.


C.      Subquery banyak kolom
Pada query jenis ini, tiap baris dari main  query  dibandingkan dengan  nilai  dari  subquery  multiple-row  dan  multiple-column.
                Main Query
WHERE(Manage_ID,Department_ID) IN

Subquery
100     90
102     60
124     50
D.    Pembandingan Kolom
Pembandingan kolom dalam subquery banyak kolom dapat berupa :
·  Pembandingan berpasangan (Pairwise Comparison SubQuery)
·  Pembandingan tidak berpasangan (NonPairwise Comparison SubQuery)
E.     Pairwise Comparison Subquery
pembandingan berpasangan untuk menampilkan detail dari data pegawai yang dimanajeri oleh manajer dan department yang sama dengan yang dimiliki oleh nomer pegawai 178
F.      Nonpairwise Comparison Subquery
Pembandingan tidak berpasangan untuk menampilkan detail dari
data pegawai yang dimanajeri oleh manager yang sama dengan pegawai dengan nomer
pegawai 174 atau 141 dan bekerja dalam departement yang sama dengan pegawai yang
memiliki nomer pegawai 174 atau 141

 
G.      Penggunaan Query dalam klausa Form
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. 

 
H.      Ekspresi Scalar Subquery
Ekspresi scalar subquery adalah subquery yang mengembalikan hanya satu nilai kolom dari satu baris.  Scalar subquery pada standart SQL-92 hanya terbatas pada :
·  SELECT Statement (klausa FROM dan WHERE saja)
·  Daftar VALUE dari statement INSERT

Pada standart SQL-99, scalar subqueries dapat diguanakan dalam :
·  Kondisi dan ekspresi sebagai bagian dari perintah DECODE dan CASE.  
·  Semua klausa dari SELECT Statement kecuali GROUP BY.

Berikut ini contoh penggunaan scalar subquery dalam ekspresi CASE :
Berikut ini contoh penggunaan scalar subquery dalam klausa ORDER BY :

I.      Korelasi Subquery
Korelasi  SubQuery  digunakan  untuk  pemrosesan  baris  per  baris. Tiap-tiap subquery dijalankan sekali untuk setiap baris dari outer query. 

Proses korelasi query sebagai berikut :
 
AMBIL
Baris dari outer query
JALANKAN
Inner query dengan menggunakan nilai baris kandidat
GUNAKAN
Nilai dari inner qery untuk quality / disquality baris kandidat

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 :
      Pada gambar diatas, subquery merefer ke kolom dari tabel yang ada pada parent atau outer query. Berikut  ini  contoh  penggunaan  korelasi  subquery  untuk  mencari pegawai yang penghasilannya melebihi rata-rata penghasilan pada departemen tempat mereka bekerja.
Berikut  ini  contoh  yang  lain  dari  korelasi  subquery  yaitu  untuk menampilkan pegawai yang pernah berganti job maksimal dua kali.
 
 
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 :
Lakukan  denormalisasi  pada  table  EMPLOYEES  dengan  menambahkan  satu kolom pada tabel EMPLOYEES untuk menyimpan nama departemen.  
Kemudian  isi  dari  kolom  nama  departemen  didapatkan  dari  tabel DEPARTMENTS dengan menggunakan Korelasi Update :
 
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 :
Berikut contoh penggunaan Korelasi DELETE untuk menghapus baris-baris dari tabel EMPLOYEES yang juga terdapat pada tabel EMP_HISTORY.
 
J.      Penggunaan operator exits 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.
 
Berikut contoh penggunaan operator NOT EXIST untuk menampilkan semua departemen yang tidak mempunyai pegawai.
 
 
K      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 tablespacetemporer kepunyaan user.  Klausa WITH dapat meningkatkan performansi. Contoh  penggunaan  klausa WITH  dibwah ini digunakan  untuk menampilkan  nama departemen  dan  total  gaji  untuk  tiap  departemen  yang memiliki  total  gaji  lebih  besar dari gaji rata-rata pada sembarang department.
Berikut ini contoh penggunaan klausa WITH :


   


Tidak ada komentar:

Posting Komentar