• Tidak ada hasil yang ditemukan

Oracle Database 10g: Fundamentals I 7-2

N/A
N/A
Protected

Academic year: 2018

Membagikan "Oracle Database 10g: Fundamentals I 7-2"

Copied!
20
0
0

Teks penuh

(1)

7

(2)

Tujuan

Dalam bab ini, anda mempelajari bagaimana cara menulis Query dengan menggunakan Set operator.

Tujuan

Setelah menyelesaikan pelajaran ini, Anda akan dapat melakukan

berikut ini :

Menjelaskan

set operators

Menggunakan suatu set operator untuk mengkombinasikan

beberapa query-query ke dalam query tunggal

(3)

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.

(4)

Tabel-tabel yang digunakan dalam pelajaran ini

Bab ini menggunakan 2 tabel. Yaitu tabel EMPLOYEES dan tabel JOB_HISTORY.

Tabel EMPLOYEES menyimpan detail karyawan. Untuk penrecord transaksi sumber daya manusia tabel ini bisa menyimpan nomor_id yang bersifat unik dan alamat email tiap karyawan. Detail dari no_id pekerjaan karyawan, gaji dan manajer juga akan tersimpan.

Beberapa dari karyawan menerima komisi sebagai tambahan gaji mereka; informasi ini juga akan dicatat juga. Perusahaan mengatur karyawan sesuai dengan pekerjaannya. Beberapa karyawan sudah lama bekerja dalam perusahaan ini dan telah beberapa kali berganti-ganti pekerjaan. Hal ini

dimonitor menggunakan tabel JOB_HISTORY. Ketika seorang karyawan berganti pekerjaan, detail dari tanggal mulai dan tanggal akhir pekerjaan terakhir, no_id pekerjaan, dan departemen disimpan dalam tabel JOB_HISTORY.

Struktur dan data dari tabel EMPLOYEES dan table HISTORY ditunjukkan pada halaman berikut ini.

Tabel-Tabel yang Digunakan dalam Pelajaran Ini

Tabel-tabel yang digunakan dalam pelajaran ini adalah :

EMPLOYEES

: Menyediakan rincian berdasarkan

pegawai-pegawai saat ini

(5)

Tabel – tabel yang digunakan pada bab ini (lanjutan)

Di dalam perusahaan ada beberapa orang yang bekerja dengan posisi yang sama lebih dari sekali sebelum mereka bergabung dengan perusahaan ini. Contohnya : salah satu karyawan yang bernama Taylor yang bergabung sebagai karyawan pada perusahaan ini pada 24-Mar-98. Taylor menempati jabatan sebagai SA_REP selama periode 24-Mar-98 sampai dengan 31-Dec-98 dan sebagai SA_MAN selama periode 01-Jan-99 sampai dengan 31-Dec-99. Taylor kembali lagi menjabat sebagai SA_REP, sampai dengan saat ini.

Hal ini berbeda dengan Karyawan yang bernama Whalen, yang bergabung dengan perusahaan ini sejak 17-Sep-1987. Whalen memegang jabatan sebagai AD_ASST selama periode 17-Sep-87 sampai dengan 17-Jun-93 dan sebagai AC_ACCOUNT selama periode 01-Jul-94 sampai dengan 31-Dec-98. Whalen kembali lagi menjabat sebagai AD_ADDT, sampai dengan saat ini.

Describe employees

Name Null ? Type

EMPLOYEE_ID NOT NULL NUMBER(6)

FIRST_NAME VARCHAR2(20)

LAST_NAME NOT NULL VARCHAR2(25)

EMAIL NOT NULL VARCHAR2(25)

PHONE_NUMBER VARCHAR2(20)

HIRE_DATE NOT NULL DATE

JOB_ID NOT NULL VARCHAR2120)

SALARY NUMBER(8,2)

COMMISION_PCT NUMBER(2,2)

MANAGER_ID NUMBER(6)

DEPARTMENT_ID NUMBER(4)

SELECT employee_id, last_name, job_id, hire_date, department_id FROM employees;

EMPLOYEE_ID LAST_NAME JOB_ID HIRE_DATE DEPARTMENT_ ID

100 King AD_PRES 17-JUN-87 90

101 Kochar AD_VP 21-SEP-89 90

102 De Hann AD_VP 13-JAN-93 90 103 Hunold IT_PROG 03-JAN-90 60 104 Ernst IT_PROG 21-MAY-91 60 107 Lorentz IT_PROG 07-FEB-99 60 124 Mourgos ST_MAN 16-NOV-99 50 141 Rajs ST_CLERK 17-OCT-95 50 142 Davies ST_CLERK 29-JAN-97 50 143 Matos ST_CLERK 15-MAR-98 50 144 Vargas IT_PROG 09-JUL-98 50 149 Zlotkey SA_MAN 29-JAN-00 80

174 Abel SA_REP 11-MAY-96 80

Taylor SA_REP 24-MAR-98 176

EMPLOYEE_ID LAST_NAME JOB_ID HIRE_DATE DEPARTMENT_ ID

178 Grant SA_REP 24-MAY-99

200 Whalen AD_ASST 17-SEP-87 10 201 Harstein MK_MAN 17-FEB-96 20

(6)

Tabel yang digunakan pada Bab ini (lanjutan)

DESCRIBE job_history

Name Null ? Type

EMPLOYEE_ID NOT NULL NUMBER(6)

START_DATE NOT NULL DATE

END_DATE NOT NULL DATE

JOB_ID NOT NULL VARCHAR2(10)

DEPARTMENT_ID NUMBER(4)

SELECT * FROM job_history

EMPLOYEE_ID START_DATE HIRE_DATE JOB_ID DEPARTMENT_ID

102 13-JAN-98 24-JUL-98 IT_PROG 60 101 21-SEP-93 27-OCT-93 AC_ACCOUNT 110 101 28-OCT-97 15-MAR-97 AC_MGR 110

201 17-FEB-96 19-DEC-99 MK_REP 20

114 24-MAR-98 31-DEC-99 ST_CLERK 50 122 01-JAN-99 31-DEC-99 ST_CLERK 50 200 17-SEP-87 17-JUN-93 AD_ASST 90

176 24-MAR-98 31-DEC-98 SA_REP 80

176 01-JAN-99 31-DEC-99 SA_MAN 80

(7)

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.

Operator

UNION

Operator

UNION

mengembalikan hasil-hasil dari kedua query

(8)

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;

EMPLOYEE_ID JOB_ID DEPARTMENT_ID

200 AC_ACOUNT 90

200 AD_ASST 10

200 AD_ASST 90

. . . 29 rows slected

Pada output tersebut diatas tadi, karyawan dengan EMPLOYEE_ID = 200 muncul 3 kali. Kenapa ? Perhatikan nilai DEPARTMENT_ID untuk karyawan 200. Satu baris mempunyai

DEPARTMENT_ID 90, lainnya 10 dan 90. Karena ini merupakan gabungan unik dari job_IDs dan department_IDs, setiap baris untuk karyawan 200 ini unik dan maka bukan merupakan duplikat. Amati bahwa outputnya berurutan secara ascending dari kolom pertama kalimat SELECT (dalam hal ini, EMPLOYEE_ID).

Menggunakan Operator

UNION

(9)

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.

Operator

UNION ALL

(10)

UNION ALL (lanjutan)

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) :

EMPLOYEE_ID JOB_ID DEPARTMENT_ID

176 SA_REP 80

Menggunakan operator

UNION ALL

(11)

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.

Operator

INTERSECT

(12)

Operator INTERSECT (lanjutan)

Seperti contoh pada slide, query hanya mengembalikan record yang mempunyai kesamaan nilai di dalam kolom yang telah dipilih di kedua tabel tersebut.

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;

EMPLOYEE_ID JOB_ID DEPARTMENT_ID

176 SA_REP 80

Karyawan 200 bukan lagi bagian dari hasil, hal ini dikarena nilai

EMPLOYEES.DEPARTMENT_ID berbeda dari nilai JOB_HISTORY.DEPARTMENT_ID

Menggunakan Operator

INTERSECT

(13)

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.

Operator

MINUS

(14)

Operator MINUS (lanjutan)

Seperti contoh pada slide, employee_ID dan job_ID dalam tabel JOB_HISTORY dikurangi dari tabel EMPLOYEES. Rnomorian hasil menampilkan sisa karyawan setelah pengurangan; data tersebut diperlihatkan oleh baris yang terdapat pada tabel EMPLOYEES tapi tidak terdapat dalam tabel JOB_HISTORY. Ini merupakan record dari karyawan yang tidak pernah berganti pekerjaan meskipun sekali.

Operator

MINUS

(15)

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 WHEREnya 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.

Petunjuk Set Operator

Ekspresi yang terdapat pada

SELECT

list harus sama

dengan nomor dan tipe datanya.

Parentheses dapat digunakan untuk merubah sequence.

ORDER BY

clause :

-

Dapat digunakan hanya diakhir dari suatu

statement.

(16)

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.

Server Oracle dan Set Operator

Baris yang duplikasi akan otomatis hilang kecuali pada

UNION ALL.

Nama Kolom dari query yang pertama akan muncul pada

hasil.

(17)

Membandingkan dengan Pernyataan

SELECT

Karena penulisan dari daftar pilih dari query harus sesuai dengan nomor, anda bisa menggunakan kolom dummy dan Para pengguna konversi tipe data sudah menyetujui hal ini. Di dalam slide, nama

location itu diberikan sebagai nama heading kolom dummy. Fungsi dari TO_NUMBER ialah digunakan pada query pertama untuk membandingkan tipe data NUMBER dari kolom

LOCATION_ID yang akan diterima kembali oleh query yang kedua. Begitupun, fungsi dari

TO_DATE pada query yang kedua, digunakan untuk membandingkan tipe data kolom HIRE_DATE yang diterima kembali oleh first query.

Membandingkan Dengan Pernyataan

SELECT

(18)

Membandingkan dengan pernyataan

SELECT

: Contoh

Table EMPLOYEES dan JOB_HISTORY mempunyai beberapa kolom di dalamnya (seperti contoh, EMPLOYEE_ID, JOB_ID dan DEPARTMENT_ID). Tapi apa yang dihasilkan, jika anda ingin melakukan query untuk menampilkan employee ID, ob ID dan gaji menggunakan operator UNION, diketahui bahwa gaji hanya terdapat di table EMPLOYEES ?

Contoh kode seperti pada slide, membandingkan antara kolom EMPLOYEE_ID dan JOB_ID di dalam tabel EMPLOYEES dan JOB_HISTORY. Biasanya nilai 0 dihasilkan pernyataan JOB_HISTORY SELECT untuk membandingkan angka kolom SALARY pada pernyataan EMPLOYEE SELECT.

Pada hasil sebelumnya, setiap baris di dalam output yang berhubungan dengan record dari tabel JOB_HISTORY yang berisi 0 pada kolom SALARY.

Membandingkan Dengan Pernyataan

SELECT :

Contoh

(19)

Mengontrol permintaan akan baris

Secara default, outputnya terurut berdasarkan ascending pada kolom pertama. Anda bisa menggunakan perintah ORDER BY untuk menggantinya.

Perintah ORDER BY bisa digunakan hanya sekali dalam campuran query. Jika digunakan, perintah ORDER BY harus diletakkan di bagian akhir dari penulisan query. Perintah ORDER BY dapat digunakan pada nama kolom atau menggunakan alias. Kode contoh pada slide tersebut diatas, ketika tanpa menggunakan perintah ORDER BY maka akan menghasilkan output secara alphabet pada kolom pertamanya :

Catatan : Pikirkan sebuah query campuran dimana set operator UNION digunakan lebih dari sekali. Dalam kasus ini, perintah ORDER BY bisa digunakan hanya ketika keberadaannya jarang daripada penulisan secara explisit

Perintah iSQL*Plus COLUMN

Anda bisa menggunakan perintah iSQL*Plus COLUMN untuk menyesuaikan heading kolom. Syntax :

COL[UMN] [{column|alias}[option]] Dimana OPTION itu :

CLE[AR] : Menghapus format kolom HEA[DING] text : Mengatur heading kolom

FOR[MAT] format : Merubah tampilan kolom menggunakan format model NOPRINT | PRINT : Menindas atau menampilkan heading kolom dan data NULL

Pernyataan berikut ini menindas data kolom dan heading judul untuk kolom dinamakan

A_DUMMY. Perhatikan SELECT clause yang pertama dalam slide pendahuluan membuat sebuah kolom bernama A_DUMMY.

My dream

I’d like to teach

sing

the world to

Mengontrol Urutan Baris-Baris

(20)

Ringkasan

 Operator UNION menghasilkan semua baris yang pilih query tersebut. Menggunakan operator UNION untuk menghasilkan semua baris dari berbagai tabel dan menghapus semua baris duplikat.

 Menggunakan operator UNION ALL untuk menghasilkan semua baris dari beragam query. Tidak seperti dalam kondisi dengan menggunakan operator UNION, baris duplikat tidak dihapus dan output tidak diurutkan secara default.

 Menggunakan operator INTERSECT untuk mengembalikan semua baris yang ada ke multiple query.

 Menggunakan operator MINUS untuk mengembalikan baris yang dikembalikan oleh query yang pertama, dimana hal ini tidak tampak pada query yang kedua.

 Ingatlah untuk menggunakan ORDER BY clause hanya pada bagian terakhir pernyataan query beragam.

 Pastikan keterkaitan penulisan dalam kesesuaian daftar SELECT yaitu nomor dan tipe datanya.

RINGKASAN

Pada bab ini, anda harus mempelajari bagaimana cara untuk :

Menggunakan UNION untuk menghasilkan semua baris

distinct

Menggunakan UNION ALL untuk menghasilkan semua

baris, termasuk duplikatnya.

Menggunakan INTERSECT untuk menghasilkan semua

baris dimana digunakan untuk saling berbagi antar

kedua query tersebut.

Menggunakan MINUS untuk menghasilkan semua baris

distinct yang dipilih oleh query yang pertama tapi tidak

dipilih di query yang kedua.

Gambar

Tabel-Tabel yang Digunakan dalam Pelajaran Ini
Tabel – tabel yang digunakan pada bab ini (lanjutan)
Table EMPLOYEES dan JOB_HISTORY mempunyai beberapa kolom di dalamnya (seperti contoh,

Referensi

Dokumen terkait

Produksi rata-rata dan harga jual rata-rata rumput laut yang dihasilkan oleh nelayan/ pembudidaya di Dusun Wael dari para responden dengan luas areal rata-rata usaha

Pada proyek akhir ini dirancang dan dibuat suatu sistem aplikasi yang dapat menampilkan denah lokasi pariwisata di Surabaya dalam bentuk peta dimana pengguna diminta untuk

Peminjam Perorangan adalah semua Dosen dan Tenaga Kependidikan Universitas Muhammadiyah Magelang yang melakukan peminjaman kendaraan dinas Universitas di luar tugas

Berdasarkan hasil pengolahan dan analisis data, maka dapat ditarik beberapa kesimpulan sebagai berikut, Pada proses procurement yang berjalan selama ini ditemukan

Perlakuan yang sama pada benih yang diinokulasi menunjukkan pengaruh yang lebih baik pada tinggi bibit 6 MST dan jumlah daun 3 MST yaitu 8,3 cm dan 1,3 dibanding kontrol

Kumentas (2013) yang berjudul Pengaruh Total Quality Management (TQM) Sistem Pengukuran Kinerja dan Penghargaan Terhadap Kinerja Manajerial.Tujuan penelitian ini

Kami memilih Aplikasi Reminder Manajemen Produksi dan Kendali Mutu Produksi Tabulampot Jeruk Berbasis Mobile karena dapat digunakan baik untuk para petani

Hasil yang berbeda pada saat penelitian bulan Mei 2010 karena adanya proses penyesuaian diri pada siswa, diawal masuk asrama pondok pesantren siswa mengalami perubahan pada