Bab 3. Query Lanjutan POKOK BAHASAN: TUJUAN BELAJAR:

dokumen-dokumen yang mirip
Oracle Academic Initiative

SUBQUERY-2. MI2154 SQL LANJUT Dedy Rahman Wijaya, S.T., M.T., OCA

Sub Query. Rosa Ariani Sukamto Blog: Website:

PERTEMUAN 6 SUBQUERY

Oracle Academic Initiative

Arsitektur Basis Data Oracle

Oracle Academic Initiative

B a s i s D a t a C H A P T E R. SQL Operasi DML. Arif Basofi PENS 2015

Perkenalan SQL. Ada empat macam tipe database yaitu hirarki, jaringan, relasional, dan objek.

B a s i s D a t a - 1 C H A P T E R. SQL Operasi DML. Copyright 2005 PENS-ITS

Oracle Academic Initiative

B a s i s D a t a - 1 C H A P T E R. SQL Operasi DML. Copyright 2005 PENS-ITS

MODUL 8. Sub Query Pada baris dan Kolom PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

IKG2I4 / Software Project I

@Tessy Badriyah, SKom. MT. PERTEMUAN 12 VIEW

B a s i s D a t a. Tatap MUka. SQL Query & Agregate Function. Arif Basofi PENS

Oracle Academic Initiative

Menggunakan Set Operators

PRACTISE

B a s i s D a t a C H A P T E R SQL OPERASI JOIN. Arif Basofi PENS 2015

BAB 4 : Interaksi PL/SQL dengan Oracle Server

Oracle Academic Initiative

MODUL 3. View PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

B a s i s D a t a - 1 C H A P T E R SQL OPERASI JOIN. Copyright 2005 PENS-ITS

Pertemuan 10 Structure Query Language(SQL)

PERTEMUAN 9 MANIPULASI DATA

STRUCTURE QUERY LANGUAGE DDL & DML

Bab 5. Database Trigger POKOK BAHASAN: TUJUAN BELAJAR: 5.1. PENDAHULUAN

Esson Sihombing, S.Kom. Lab. Basisdata 1 Sistem Informasi UNIKOM 2013

MODUL 4. Query SELECT dan DML (INSERT, UPDATE, DELETE) PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

Basis Data 1. Dasar SQL Query. Arif Basofi, S.Kom. MT. Teknik Informatika, PENS

Tutorial Database Oracle Chapter3 Menampilkan Data Menggunakan Perintah SQL SELECT

Menggunakan Subquery untuk Memecahkan Query Query

B a s i s D a t a - 1 C H A P T E R. SQL Lanjutan 1. Copyright 2005 PENS-ITS

PRAKTIKUM 5 SISTEM BASIS DATA JOIN

PERTEMUAN 5 PENGGUNAAN FUNGSI GROUP

Oracle Academic Initiative

PERINTAH SQL DAN INTERKONEKSI PHP-MySQL

15-Jan DATABASE - MySQL. Database. Constraints. Tujuan: Memahami perintah-perintah dasar DDL dan DML

Oracle Academic Initiative

Apa yang akan dibahas? Pengertian SQL Penggolongan Statement SQL Aturan Gramatika SQL Struktur Dasar SQL Query Satu (1) Tabel

Oracle Academic Initiative

PERTEMUAN 2 PEMILIHAN DAN PENGURUTAN DATA

DATABASE - MySQL. Muhammad Zen S. Hadi, ST. MSc.

MODUL 5. Advanced Query : Pemilihan dan Pengurutan Data PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

PERTEMUAN 10 PEMBUATAN TABEL

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Oracle Academic Initiative

Modul 3 : Query Penggabungan Tabel

Tutorial Database Oracle Chapter4 Pembatasan dan Pengurutan

Pertemuan DDL INDIKATOR. Modul Teori Database Aknela

TABLE JOIN SQL SERVER 2005

Oracle Academic Initiative

Praktikum Basis Data 2017 TE UM MODUL 6 SUB QUERY

B a s i s D a t a - 1 C H A P T E R. SQL Operasi DDL. Copyright 2005 PENS-ITS

B a s i s D a t a C H A P T E R. SQL Operasi DDL. Arif Basofi PENS 2015

Oracle Academic Initiative

Menampilkan Data Dari Beberapa Tabel

LAPORAN PRAKTIKUM BASIS DATA LANJUT I

M0564-Pengantar Sistem Basisdata 12/ 1

RENCANA PEMBELAJARAN

Basis Data. Bagian IV SQL (2) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Melaporkan Data Agreget Menggunakan Group Functions

MODUL 1. Pembuatan tabel, pendefinisian constraint, export dan import PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

Praktikum Basis Data 14 Structure Query Language 2

Oracle Academic Initiative

CONSTRAINT clients_client_num_pk PRIMARY KEY (client_number));

B a s i s D a t a - 1 C H A P T E R SQL. Function & Agregat. Copyright 2005 PENS-ITS

PERTEMUAN 8 PENGATURAN OUTPUT PADA SQL*PLUS

DATABASE RUMAH SAKIT 1. Objek yang dipakai a. Pasien b. Dokter c. Ruang d. Petugas e. Rawat_inap f. Pembayaran

BAB 2 : Dasar Penulisan Statemen SQL Sasaran Mengetahui kemampuan dari SQL SELECT Statement Dapat membuat perintah SQL dengan SELECT Statement

Praktikum Sistem Basis Data

SQL Data Definition Language (DDL)

BAB 2 LANDASAN TEORI Pengertian DBMS (Database Management System)

S Q L. Sejarah SQL. Penulisan Perintah SQL. SQL (Structure Query Language)

Data Manipulation Language (DML)

LAPORAN PRAKTIKUM BASIS DATA LANJUT I

VIEW : Tabel Virtual VIEW 5/29/2017

Oracle Academic Initiative

Oracle Academic Initiative

PERTEMUAN 4 MENAMPILKAN DATA DARI BANYAK TABEL

MENAMPILKAN DATA DARI BANYAK TABEL

Sistem Basis Data. Pertemuan 13 SQL INSERT & SELECT TUJUAN

Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini:

PENGANTAR TEKNOLOGI SISTEM INFORMASI MANAGEMENT 2

Schema Objects. MI2154 SQL LANJUT Dedy Rahman Wijaya, S.T., M.T., OCA

Macam - Macam Perintah Pada SQL

BAHASA QUERY KOMERSIAL

MODUL V DATA MANIPULATION LANGUAGE (DML) 1

STRUCTURE QUERY LANGUAGE (SQL)

Perangkat Lunak Pengembangan Web

Persiapan Table Untuk Latihan Sebelum kita berkenalan lebih jauh dengan Trigger, mari kita buat terlebih dahulu, struktur table yang dibutuhkan.

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP) PROGRAM STUDI : DIII MANAJEMEN INFORMATIKA Semester : 4

MODUL 4 INTERNET PROGRAMMING DATABASE

Basis Data II. Pertemuan Ke-6 (Function) Noor Ifada

Fungsi Single-Row. Fungsi merupakan fitur paling dibutuhkan dari SQL yang dapat digunakan untuk:

IKG2I4 / Software Project I

Mahasiswa mengetahui & memahami mengenai DML, DCL di SQL. (Isi_Field_1, Isi_Field_2,, Isi_Field_N) ;

Pengantar basis data Manipulasi SQL

LAPORAN PRAKTIKUM BASIS DATA MODUL 3 CONDITIONAL SQL MIKA PURNAMASARI NASTADINA

Transkripsi:

Bab 3 Query Lanjutan POKOK BAHASAN: Subquery dan penggunaannya Subquery dengan banyak kolom Pairwise Comparison SubQuery NonPairwise Comparison SubQuery Penggunaan Query dalam Klausa FROM Ekspresi Scalar Korelasi SubQuery dan penggunaannya Penggunaan Query dengan Klausa WITH TUJUAN BELAJAR: Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan : Dapat menulis subquery dengan banyak kolom Dapat menggambarkan dan menjelaskan karakteristik dari subqueries pada saat didapatkan nilai NULL Dapat menulis subquery dalam klausa FROM Dapat menggunakan scalar subqueries dalam SQL Dapat menggambarkan tipe dari persoalan yang dapat dipecahkan dengan menggunakan sub query yang berkorelasi. Dapat menulis subquery yang berkorelasi. Melakukan Update dan Delete baris dengan menggunakan subqueries yang berkorelasi. Dapat menggunakan operator EXISTS dan NOT EXISTS Dapat menggunakan klausa WITH 41

BAB 3 QUERY LANJUTAN 42 3.1. TABEL YANG DIGUNAKAN PADA PEMBAHASAN Bagian ini menjelaskan mengenai tabel yang digunakan pada pembahasan bab Query Lanjutan. Ada 3 buah tabel yang digunakan masing-masing memiliki struktur sebagai berikut : 1. Tabel DEPARTMENTS 2. Tabel EMPLOYEES

BAB 3 QUERY LANJUTAN 43 3. Tabel JOB_HISTORY 3.2. APA ITU SUBQUERY? Bagian ini membahas tentang penggunaan subquery dalam Query Lanjutan. Apa yang disebut dengan SubQuery? Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL Statement yang lain. Main query SELECT... FROM... WHERE... (SELECT... FROM... WHERE...) Subquery Gambar 3-1: Subquery dalam Main Query Pada gambar diatas, subquery (inner query) dijalankan sekali sebelum main query. Kemudian hasil dari subquery digunakan oleh main query (outer query). Berikut posisi penulisan subquery dalam SQL command : SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);

BAB 3 QUERY LANJUTAN 44 3.3 PENGGUNAAN SUBQUERY Subquery mengembalikan nilai ke main query. Subquery digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values). Berikut ini diberikan contoh penggunaan subquery. SELECT last_name WHERE salary > 10500 (SELECT salary WHERE employee_id = 149) ; Query diatas akan menampilkan nama pegawai yang gajinya lebih dari pegawai dengan nomer pegawai 149. Sebelumnya, gaji dari pegawai dengan nomer pegawai 149 tidak diketahui, untuk itu kita tempatkan sebagai subquery agar nilai yang tidak diketahui tersebut dapat diketahui dan pada ilustrasi gambar diatas nilai gaji dari pegawai 149 adalah 10500. 3.4. SUBQUERY BANYAK KOLOM Pada subquery dengan banyak kolom, tiap baris dari main query dibandingkan dengan nilai dari subquery multiple-row dan multiple-column. Berikut ini contoh pembandingan dengan banyak kolom dan baris : Main query WHERE (MANAGER_ID, DEPARTMENT_ID) IN Subquery 100 90 102 60 124 50

BAB 3 QUERY LANJUTAN 45 3.5. PEMBANDINGAN KOLOM Pembandingan kolom dalam subquery banyak kolom dapat berupa : Pembandingan berpasangan (Pairwise Comparison SubQuery) Pembandingan tidak berpasangan (NonPairwise Comparison SubQuery) 3.5.1. PAIRWISE COMPARISON SUBQUERY Berikut contoh pembandingan berpasangan untuk menampilkan detail dari data pegawai yang dimanajeri oleh manajer dan department yang sama dengan yang dimiliki oleh nomer pegawai 178 SELECT employee_id, manager_id, department_id WHERE (manager_id, department_id) IN (SELECT manager_id, department_id WHERE employee_id IN (178,174)) AND employee_id NOT IN (178,174); 3.5.2. NONPAIRWISE COMPARISON SUBQUERY Berikut contoh 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. SELECT employee_id, manager_id, department_id WHERE manager_id IN (SELECT manager_id WHERE employee_id IN (174,141)) AND department_id IN (SELECT department_id WHERE employee_id IN (174,141)) AND employee_id NOT IN(174,141);

BAB 3 QUERY LANJUTAN 46 3.6. PENGGUNAAN QUERY DALAM KLAUSA FROM 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. Berikut ini contoh penggunaan Query dalam klausa FROM. SELECT a.last_name, a.salary, a.department_id, b.salavg a, (SELECT department_id, AVG(salary) salavg GROUP BY department_id) b WHERE a.department_id = b.department_id AND a.salary > b.salavg; Query diatas menampilkan nama dan gaji dari pegawai yang gajinya lebih besar dari rata-rata gaji pegawai pada departemen tempat dia bekerja. 3.7. 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.

BAB 3 QUERY LANJUTAN 47 Berikut ini contoh penggunaan scalar subquery dalam ekspresi CASE : SELECT employee_id, last_name, (CASE WHEN department_id = THEN 'Canada' ELSE 'USA' END) location ; 20 (SELECT department_id FROM departments WHERE location_id = 1800) Berikut ini contoh penggunaan scalar subquery dalam klausa ORDER BY : SELECT employee_id, last_name e ORDER BY (SELECT department_name FROM departments d WHERE e.department_id = d.department_id); 3.8. KORELASI SUBQUERY Korelasi SubQuery digunakan untuk pemrosesan baris per baris. subquery dijalankan sekali untuk setiap baris dari outer query. Prosesnya sebagai berikut : Tiap-tiap AMBIL Baris dari outer query JALANKAN inner query dengan menggunakan nilai baris kandidat GUNAKAN Nilai dari inner query untuk qualify / disqualify baris kandidat Gambar 3-2 : Proses Korelasi Subquery

BAB 3 QUERY LANJUTAN 48 Pada gambar 3-2, 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 : SELECT column1, column2,... FROM table1 outer WHERE column1 operator (SELECT colum1, column2 FROM table2 WHERE expr1 = outer.expr2); 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. SELECT last_name, salary, department_id outer WHERE salary > (SELECT AVG(salary) WHERE department_id = outer.department_id) ; Setiap saat baris dari outer query diproses, maka inner query dievaluasi. Berikut ini contoh yang lain dari korelasi subquery yaitu untuk menampilkan pegawai yang pernah berganti job maksimal dua kali.

BAB 3 QUERY LANJUTAN 49 SELECT e.employee_id, last_name,e.job_id e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e.employee_id); 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 : UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column); 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 :

BAB 3 QUERY LANJUTAN 50 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 : DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column); Berikut contoh penggunaan Korelasi DELETE untuk menghapus baris-baris dari tabel EMPLOYEES yang juga terdapat pada tabel EMP_HISTORY. DELETE E WHERE employee_id = (SELECT employee_id FROM emp_history WHERE employee_id = E.employee_id); 3.9. PENGGUNAAN OPERATOR EXIST 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.

BAB 3 QUERY LANJUTAN 51 SELECT employee_id, last_name, job_id, department_id outer WHERE EXISTS ( SELECT 'X' WHERE manager_id = outer.employee_id); Berikut contoh penggunaan operator NOT EXIST untuk menampilkan semua departemen yang tidak mempunyai pegawai. SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT 'X' WHERE department_id = d.department_id); 3.10. 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 tablespace temporer kepunyaan user. Klausa WITH dapat meningkatkan performansi.

BAB 3 QUERY LANJUTAN 52 Berikut ini contoh penggunaan klausa WITH : WITH dept_costs AS ( SELECT d.department_name, SUM(e.salary) AS dept_total e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name), avg_cost AS ( SELECT SUM(dept_total)/COUNT(*) AS dept_avg FROM dept_costs) SELECT * FROM dept_costs WHERE dept_total > (SELECT dept_avg FROM avg_cost) ORDER BY department_name; Contoh penggunaan klausa WITH diatas digunakan untuk menampilkan nama departemen dan total gaji untuk tiap departemen yang memiliki total gaji lebih besar dari gaji rata-rata pada sembarang department. RINGKASAN: Subquery digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values) Pada subquery dengan banyak kolom, tiap baris dari main query dibandingkan dengan nilai dari subquery multiple-row dan multiple-column. Pembandingan kolom dalam subquery banyak kolom dapat berupa pembandingan berpasangan (pairwise comparison) dan tidak berpasangan (nonpairwise comparison). Query bisa diletakkan di dalam klausa FROM untuk membentuk tabel temporer, dan dikenal juga dengan istilah inline view. Korelasi SubQuery digunakan untuk pemrosesan baris per baris. Klausa WITH dapat menggunakan blok query yang sama dalam statement SELECT pada saat terjadi lebih dari sekali dalam complex query.

BAB 3 QUERY LANJUTAN 53 LATIHAN SOAL : 1) Buat query untuk menampilkan nama, nomer departemen, dan gaji dari pegawai yang yang memiliki nomer departemen dan gaji yang sama dengan nomer departemen dan gaji dari pegawai yang memiliki komisi. 2) Buat query untuk menampilkan nama pegawai, nama departemen, dan gaji dari pegawai yang memiliki gaji dan komisi yang sama dengan gaji dan komisi dari pegawai yang memiliki location ID 1700. 3) Buat query untuk menampilkan nama pegawai, tanggal mulai masuk kerja (hire date), dan gaji untuk semua pegawai yang memiliki gaji dan komisi seperti yang dimiliki oleh pegawai yang bernama Kochhar. Note: Data Kochhar tidak ditampilkan dalam hasil query. 4) Buat query untuk menampilkan detail dari nomer pegawai, nama pegawai dan nomer pegawai yang sama dengan pegawai yang bertempat tinggal di kota yang nama kotanya diawali dengan huruf T. 5) Buat query untuk menampilkan data semua pegawai yang memiliki gaji yang lebih dari rata-rata gaji pada departemen tempat mereka bekerja. Data yang ditampilkan yaitu nama pegawai, gaji, nomer departemen, dan rata-rata gaji pada departemen tempat mereka bekerja. Urutkan berdasarkan rata-rata gaji. 6) Tampilkan semua pegawai yang bukan supervisor a. Cara pertama gunakan operator NOT EXISTS. b. Apakah persoalan dapat dipecahkan dengan menggunakan operator NOT IN? Jika bisa bagaimana caranya, dan jika tidak bisa mengapa? (Supervisor adalah pegawai yang punya bawahan pegawai yang lain => employee_id nya menjadi manager_id dari pegawai yang lain) 7) Buat query untuk menampilkan nama pegawai yang gajinya kurang dari rata-rata gaji pada departemen tempat dia bekerja. 8) Buat query untuk menampilkan nama dari pegawai yang memiliki satu atau lebih kolega (teman satu departemen) dimana kolega tersebut masuk lebih akhir tapi memiliki gaji lebih tinggi.

BAB 3 QUERY LANJUTAN 54 9) Buat query untuk menampilkan nomer pegawai, nama pegawai dan nama departemen dari semua pegawai yang ada. Note: Gunakan scalar subquery untuk mendapatkan nama departemen dalam statemen SELECT. 10) Buat query untuk menampilkan nama departemen dari tiap departemen yang memiliki total gaji diatas 1/8 dari total gaji keseluruhan pada perusahaan. Gunakan klausa WITH untuk menulis query tersebut. Beri nama SUMMARY. 11) Buat query untuk menampilkan peagwai yang memiliki gaji yang lebih tinggi dari gaji semua sales managers (JOB_ID = 'SA_MAN'). Urutkan berdasarkan jumlah gaji dari tinggi ke rendah.