Minggu, 25 Desember 2011

Resume SQL 1 Pert 8


Menggunakan Set Operators
Set Operator

Set Operator menggabungkan hasil dari dua atau lebih komponen Query ke dalam sebuah penyelesaian.
Query yang berisi beberapa Set Operator disebut sebagai Compound Query.

Operator
Hasil
UNION
Semua baris distinct dipilih oleh query yang sama
UNION ALL
Semua baris dipilih oleh query yang sama, termasuk semua duplikat
INTERSECT
Semua baris distinct dipilih oleh kedua query
MINUS
Semua baris distinct yang telah dipilih oleh pernyataan SELECT dan tidak dipilih di pernyataan kedua

Semua Set Operator mempunyai pendahuluan yang sama. Jika sebuah pernyataan SQL berisi beragam Set Operator, Oracle server akan mengevaluasinya dari kiri (atas) ke kanan (bawah) jika
tidak ada sisipan secara jelas yang mengarah pada perintah lain. Anda harus menggunakan sisipan untuk menggolongkan perintah dari hasil evaluasi secara jelas dalam query yang menggunakan operator INTERSECT dengan Set operator yang lain.

UNION Operator

UNION Operator mengembalikan semua baris yang dipilih oleh query yang sama. Gunakan UNION Operator untuk mengembalikan semua baris dari beberapa tabel kemudian menghapus semua baris duplikat.

Pedoman - Pedoman
 Jumlah kolom dan tipe data dari kolom yang telah dipilih harus identik dengan semua pernyataan SELECT yang digunakan dalam Query. Nama kolom tidak harus identik.
 UNION mengubah keseluruhan kolom yang telah dipilih
 Nilai NULL tidak diperbolehkan sebelum dicek.
 Operator IN mempunyai prioritas lebih dulu daripada operator UNION
 Secara default, output akan diurutkan secara ascending dari kolom pertama kalimat SELECT.
Menggunakan Operator UNION

Operator  UNION menghapus semua record duplikat. Jika record tidak ada dalam kedua tabel
EMPLOYEES dan JOB_HISTORY secara identik, maka record tersebut ditampilkan hanya sekali.
Amati dari tampilan output pada slide, record untuk karyawan dengan EMPLOYEE_ID200 ditampilkan dua kali karena JOB_ID berbeda beda pada tiap row.
Perhatikan contoh dibawah ini :

SELECT employee_id, job_id, department_id
FROM employees
UNION
SELECT employee_id, job_id, department_id
FROM job_history;
Operator UNION ALL

Gunakan operator UNION ALL untuk mengembalikan semua baris dari beberapa queri

Pedoman Pedoman
Petunjuk untuk UNION dan UNION ALL semua sama, tapi dengan 2 perkecualian untuk UNION ALL yaitu :
 Tidak seperti UNION, baris duplikat tidak akan terhapus dan output tidak diurutkan secara
default.
 Keyword DISTINCT tidak bisa digunakan.
Seperti yang pada contoh diatas, ada 30 baris yang terpilih. Gabungan antara dua tabel berjumlah 30 baris.
Operator UNION ALL tidak menghapus baris duplikat. UNION mengembalikan semua baris distinct yang telah diseleksi oleh query tersebut. Fungsi UNION ALL mengembalikan semua baris yang telah diseleksi oleh query, termasuk semua duplikatnya.
Perhatikan quey yang terdapat pada slide, sekarang tuliskan dengan menggunakan kalimat UNION :

SELECT employee_id, job_id, department_id
FROM employees
UNION
SELECT employee_id, job_id, department_id
FROM job_history
ORDER BY employee_id;

Pada hasil query perintah diatas didapatkan hasil 29 baris. Hal ini dikarenakan perintah diatas telah menghapus baris berikut ini (yang merupakan sebuah baris duplikat)

Operator INTERSECT

Gunakan operator INTERSECT untuk mengembalikan semua baris yang ada (terlibat) dalam
beberapa query.

Petunjuk
 Nomor kolom dan tipe data kolom telah dipilih oleh pernyataan SELECT dalam query harus
selalu identik di dalam semua pernyataan SELECT yang digunakan dalam query. Nama dari kolom tidak harus selalu identik.
 Membalikkan tabel yang telah diintersect tidak akan mengubah hasil.
 INTERSECT tidak akan memperbolehkan adanya nilai NULL.
Apa yang akan dihasilkan jika anda menambahkan kolom DEPARTMENT_ID ke dalam pernyataan SELECT dari table JOB_HISTORY dan menjalankan query ini ? Hasilnya bisa saja berbeda karena pendahuluan dari kolom lainnya dimana nilai bisa diduplikasikan atau tidak diduplikasikan.

Contoh
SELECT employee_id, job_id, department_id
FROM employees
INTERSECT
SELECT employee_id, job_id, department_id
FROM job_history;
Karyawan 200 bukan lagi bagian dari hasil, hal ini dikarena nilai EMPLOYEES.DEPARTMENT_ID berbeda dari nilai JOB_HISTORY.DEPARTMENT_ID

Operator MINUS

Gunakan Operator MINUS untuk mengembalikan baris, yang dikembalikan oleh query pertama,
yang tidak tampak pada saat query kedua (pernyataan SELECT pertama MINUS pernyataan
SELECT kedua).

Petunjuk
 Jumlah kolom dan tipe data dari kolom telah dipilih oleh pernyataan SELECT di dalam query
seharusnya identik di dalam semua pernyataan SELECT yang digunakan dalam query. Nama kolom tidak harus identik.
 Semua kolom dalam kalimat WHERE seharusnya berada dalam kalimat SELECT supaya
operator MINUS berkerja.
Petunjuk Tentang Set Operator
 Penulisan di dalam rnomori SELECT dari query harus sesuai dengan nomor dan tipe data. Query yang menggunakan operator operator seperti UNION, UNION ALL, INTERSECT dan MINUS didalam kalimat WHERE nya harus mempunyai persamaan nomor dan tipe data kolom dalam rangkaian SELECT.

Seperti pada contoh :

SELECT employee_id, department_id
FROM employees
WHERE (employee_id, department_id)
IN (SELECT employee_id, department_id)
FROM employees
UNION
SELECT employee_id, department_id
FROM employees);

 Kalimat ORDER_BY :
Bisa muncul pada akhir sebuah pernyataan
Akan menerima nama kolom, sebuah alias atau sesuai dengan letak penulisan
 Nama kolom atau alias, jika digunakan sebuah kalimat ORDER_BY, seharusnya berasal dari
daftar SELECT yang pertama.
 Set operator bisa digunakan pada subqueri.
Server Oracle dan Set operator

Ketika sebuah query menggunakan set operator, Server Oracle akan menghapus baris duplikat secara otomatis kecuali di dalam kondisi dengan operator UNION ALL.
Nama kolom outputnya ditentukan oleh daftar kolom pada pernyataan SELECT yang pertama.
Secara default output akan diurutkan secara ascending dari kolom pertama kalimat SELECT.
Keterkaitan penulisan di dalam daftar SELECT yang merupakan komponen query dari campuran
query harus sesuai dengan nomor dan tipe data. Jika komponen query memilih data karakter, tipe
data dari nilai balik dengan ketentuan sebagai berikut :

 Jika kedua query memilih nilai dari tipe data CHAR, nilai balik harus berupa tipe data CHAR.
 Jika salah satu atau kedua query tersebut memilih nilai tipe data VARCHAR2, maka nilai
balik berupa tipe data VARCHAR2.

Tidak ada komentar:

Posting Komentar