Using Subqueries to Solve Queries
Tujuan Pembelajaran: Mendefinisikan subquery Menggambarkan tipe masalah yang dapat diselesaikan dengan subquery Menggambarkan berbagai tipe subquery Menuliskan subquery dengan tipe single-row dan multiple-row
Menggunakan subquery untuk memecahkan masalah Siapa yang memiliki gaji melebihi Abel?
Sintaks Subquery Subquery (inner query) dieksekusi sebelum Main Query (outer query) Hasil Subquery digunakan oleh Main Query
Menggunakan Subquery
Pedoman Menggunakan Subquery Subquery dibatasi oleh tanda kurung Tempatkan Subquery pada sisi kanan dari perbandingan kondisi Klausa ORDER BY dalam Subquery tidak dibutuhkan Gunakan operator single-row untuk Subquery single-row, gunakan operator multiple-row untuk Subquery multiple-row
Tipe Subquery
Subquery Single-row Menghasilkan hanya satu baris Menggunakan operator perbandingan single-row
Eksekusi Subquery Single-row
Menggunakan Group Functions dalam Subquery
Klausa Having dengan Subquery Oracle akan mengeksekusi Subquery lebih dahulu Oracle akan mengembalikan hasil Subquery ke dalam klausa Having dari main query
Apa yang salah dengan statement ini?
Apakah statement ini menghasilkan baris?
Subquery Multiple-row Menghasilkan lebih dari satu baris Menggunakan operator perbandingan Multiple-row
Menggunakan operator ANY dalam Subquery Multiple-row
Menggunakan operator ALL dalam Subquery Multiple-row
Nilai NULL dalam Subquery
Using the Set Operators
Tujuan Pembelajaran: Menggambarkan operator himpunan Menggunakan operator himpunan untuk mengkombinasikan query multiple ke dalam query single Kontrol terhadap urutan baris
Operator Himpunan
Tabel yang digunakan dalam bab ini Employees: berisikan data keseluruhan pegawai Job_History: berisikan data tentang riwayat kerja pegawai
Operator Union Operator Union mengembalikan hasil dari kedua query setelah mengeliminasi data yang sama (duplikat data)
Contoh tabel_A = {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’} tabel_B = {‘1002’,’1005’,’1006’,’1007’} Jika ingin menggabungkan dua tabel tersebut dengan menggunakan UNION maka akan menghasilkan himpunan data berikut: {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’, ’1006’,’1007’}
Contoh tabel_A tabel_B tabel Hasil Kode 1001 1002 1005 1003 1006 UNION tabel Hasil Kode 1001 1002 1005 1003 1006 UNION 1004 1007
Menggunakan operator Union Menampilkan detil pekerjaan sekarang dan sebelumnya dari seluruh pegawai. Tampilan tiap pegawai hanya sekali
Operator Union All Operator Union mengembalikan hasil dari kedua query, termasuk semua data yang sama
Contoh tabel_A = {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’} tabel_B = {‘1002’,’1005’,’1006’,’1007’} Jika memakai perintah UNION ALL, data yang dihasilkan {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’, ‘1002’, ’1005’, ’1006’, ’1007’}.
Contoh tabel_A tabel_B tabel Hasil Kode 1001 1002 1005 1003 1006 tabel Hasil Kode 1001 1002 1005 1003 1006 UNION ALL 1004 1007
Menggunakan operator Union All Menampilkan departemen sekarang dan sebelumnya dari seluruh pegawai.
Operator Intersect Intersect operator akan menggabungkan 2 query dan menghasilkan data yang sama antara hasil dari query pertama dan hasil dari query kedua
Contoh tabel C = {a,b,c,d} INTERSECT tabel D = {c,d,e} Jika memakai perintah INTERSECT hasilnya adalah {c,d}
Menggunakan operator Intersect Menampilkan employee id dan job id dari pegawai yang berada di tabel employees dan sama berada di tabel job_history
Operator Minus Minus Operator akan menggabungkan 2 query dan menghasilkan data yang ada pada TABEL A tetapi tidak ada pada tabel B
Contoh Tabel A Tabel B
Menggunakan operator Minus Menampilkan employee id dan job id dari pegawai yang berada di tabel employees dan tidak berada di tabel job_history
Petunjuk Operator Himpunan Ekspresi dalam daftar SELECT harus cocok dalam jumlah dan tipe data Tanda kurung digunakan untuk menyatakan urutan eksekusi Klausa ORDER BY dapat digunakan di akhir statement dengan menggunakan nama kolom atau alias dari query pertama Duplikat baris otomatis akan dieliminasi kecuali dengan Operator UNION ALL. Nama kolom dalam query pertama akan muncul dalam hasil
Mencocokkan statement Select Menggunakan operator Union untuk menampilkan department ID, location, dan hire date dari semua pegawai
Mencocokkan statement Select : contoh Menggunakan operator Union untuk menampilkan employee ID, Job Id, dan salary dari semua pegawai
Kontrol urutan baris
Latihan 1 Dengan menggunakan set operator, tampilkan department_id dan job_id selain pegawai dengan job_id ‘ST_CLERK’ Hasil: EMPLOYEES JOBS Employee_id First_name Last_name Email Phone_number Hire_date Job_id Salary Commission_pct Manager_id Department_id Job_title Min_salary Max_salary select department_id, job_id from employees where job_id <> 'ST_CLERK' minus select to_number(null), job_id from jobs
Latihan 2 Dengan menggunakan set operator , tampilkan country_id dan country_name untuk negara yang tidak memiliki departemen DEPARTMENTS LOCATIONS COUNTRIES Department_id Department_name Manager_id Location_id Street_address Postal_code City State_province Country_id Country_name Region_id select d.department_id,l.location_id,c.country_id,c.country_name from departments d RIGHT OUTER JOIN locations l ON (d.location_id=l.location_id) RIGHT OUTER JOIN countries c ON (l.country_id=c.country_id) intersect select to_number(null),to_number(null),country_id, country_name from countries order by country_name