Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
Sistem Basis Data – Bab 12 SUBQUERY
2
Gambar 1. Isi tabel pegawai
nip nama_peg gaji kota depart 12345 Fuad Mawardi Yogya Akunting 12346 John Simatupang Pemasaran 12347 Freska Iskandar Klaten Personalia 12348 Kadarisman 960000 Sleman 12349 Kresnawan Magelang EDP 12351 Rianto 750000 Bantul 12352 Fahmi 12353 Ida Ayu 12354 Dian Arum 800000 Produksi 12355 Kartono 700000 Gambar 1. Isi tabel pegawai
3
Gambar 2. Isi tabel infoprib
id_bin nama tgl_lahir sex DREWB Drew Barrymore W STONE Sharon Stone SYLVE Sylvester Stallone P KEVIN Kevin Costner HAKIM Cristine Hakim JULIA Julia Roberts DEMIM Demi Moore CINDY Cindy Crawford CDIAZ Cameron Diaz KEANU Keanu Reeves SANDR Sandra Bullock RGERE Richard Gere RAHAR Slamet Rahardjo KELLY Kelly McGillis JOLIE Angelina Jolie Gambar 2. Isi tabel infoprib
4
id_bin kode_film peran HAKIM DABAN Asih OTOKO Tia STONE BASIC Catherine Tramell SPESI May Munro GLORI Gloria DREWB BATFO Sugar SYLVE Ray Quick CINDY FAIRG Kate McQueen DEMIM GJANE Jordan O’Neil DISCL Meredith Johson KEVIN BODYG Frank Farmer CLIFF Gbe Walker RAMBO John Rambo KEANU SPEED Jack Traven SANDR Annie Porter JULIA BRIDE Maggie Carpenter RGERE Ike Graham Gambar 3. Isi tabel main
5
1. Pengertian Subquery Subquery (kadang disebut juga subselect) merupakan bentuk query yg terletak dalam query yg lain. Contoh subquery diperlihatkan di bawah ini: SELECT nama_peg, gaji FROM pegawai WHERE gaji = (SELECT MAX(gaji) FROM pegawai); Perhatikan bahwa di dalam klausa WHERE milik SELECT terdapat SELECT yg lain yaitu: SELECT MAX(gaji) FROM pegawai; Bagian inilah yg disebut dengan query.
6
Perintah: SELECT MAX(gaji)
FROM pegawai; berguna untuk mendapatkan gaji yg terbesar yg terdapat pada tabel pegawai. Jadi, secara lengkap pernyataan: SELECT nama_peg, gaji FROM pegawai WHERE gaji = (SELECT MAX(gaji) FROM pegawai); digunakan untuk menampilkan baris-baris yg nilai gaji-nya adalah yg terbesar. Hasil query dapat dilihat pada Gambar 4.
7
Gambar 4. Hasil query pada tabel pegawai
nama_peg gaji John Simatupang Gambar 4. Hasil query pada tabel pegawai
8
2. Operator IN Pada contoh di depan, subquery: SELECT MAX(gaji)
FROM pegawai; menghasilkan sebuah nilai. Keadaan seperti ini bukan merupakan suatu keharusan. Subquery bisa saja menghasilkan sejumlah nilai. Sebagai contoh: SELECT DISTINCT id_bin FROM main; Query ini akan menghasilkan sejumlah baris yg menyatakan semua id_bin yg terdapat pada main dan bersifat unik (tdk ada yg kembar). Hasilnya dapat dilihat pada Gambar 5.
9
Gambar 5. Hasil subquery pada tabel main
id_bin CINDY DEMIM DREWB HAKIM JULIA KEANU KEVIN RGERE SANDR STONE SYLVE Gambar 5. Hasil subquery pada tabel main
10
SELECT nama FROM infoprib
Query yg menghasilkan sejumlah nilai seperti itu dapat berkedudukan sebagai subquery dan diletakkan sesudah operator IN. Contoh: SELECT nama FROM infoprib WHERE id_bin IN (SELECT DISTINCT id_bin FROM main); Query di atas digunakan untuk menampilkan semua bintang film yg id_bin nya berada dalam tabel main. Hasil query di atas diperlihatkan pada Gambar 6.
11
nama Drew Barrymore Sharon Stone Sylvester Stallone Kevin Costner
Cristine Hakim Julia Roberts Demi Moore Cindy Crawford Keanu Reeves Sandra Bullock Richard Gere Gambar 6. Menampilkan bintang film pada tabel infoprib yg tercantum pada tabel main
12
Anda juga bisa meletakkan NOT di depan IN, misalnya seperti berikut:
SELECT nama FROM infoprib WHERE id_bin NOT IN (SELECT DISTINCT id_bin FROM main); Query di atas akan menghasilkan daftar bintang film yg tidak tercantum pada tabel main yg diperlihatkan pada Gambar 7.
13
nama Cameron Diaz Slamet Rahardjo Kelly McGillis Angelina Jolie
Gambar 7. Menampilkan bintang film pada tabel infoprib yg tidak tercantum pada tabel main
14
3. Operator EXIST EXIST merupakan jenis operator boolean yg menghasilkan nilai benar atau salah. Operator ini memberikan nilai benar kalau subquery menghasilkan paling tidak sebuah baris. Bentuk penggunaan EXIST: SELECT nama_kolom FROM nama_tabel WHERE EXIST (subquery); Sebagai contoh: SELECT nama FROM infoprib WHERE EXISTS (SELECT * FROM main WHERE id_bin = infoprib.id_bin); Perintah di atas digunakan untuk menampilkan daftar bintang film yg id_bin-nya terdapat pada tabel main dapat dilihat pada Gambar 8. Pemeriksaan keberadaan id_bin pada tabel main dilakukan melalui subquery.
15
nama Drew Barrymore Sharon Stone Sylvester Stallone Kevin Costner
Cristine Hakim Julia Roberts Demi Moore Cindy Crawford Keanu Reeves Sandra Bullock Richard Gere Gambar 8. Menampilkan bintang film pada tabel infoprib yg tercantum pada tabel main. Diperoleh via EXIST
16
Tentu saja pernyataan di atas merupakan alternatif dari pernyataan :
Pernyatan : SELECT nama FROM infoprib WHERE EXISTS (SELECT * FROM main WHERE id_bin = infoprib.id_bin); Tentu saja pernyataan di atas merupakan alternatif dari pernyataan : SELECT nama FROM infoprib WHERE id_bin IN (SELECT DISTINCT id_bin FROM main); Di depan EXIST juga bisa disertakan operator NOT. Contoh: WHERE NOT EXISTS Query di atas akan menghasilkan daftar bintang film pada tabel infoprib yg tdk tercantum pada tabel main dapat dilihat pada gambar 9.
17
nama Cameron Diaz Slamet Rahardjo Kelly McGillis Angelina Jolie
Gambar 9. Daftar bintang film pada tabel infoprib yg tidak tercantum pada tabel main. Diperoleh via NOT EXISTS
18
4. Operator ANY dan SOME Seperti halnya EXIST, operator ANY (atau SOME) digunakan berkaitan dengan subquery. Bentuk penggunaan: SELECT nama_kolom FROM nama_tabel WHERE nama_kolom operator_relasional ANY (subquery); Pada penggunaan ANY, sebarang operator relasional (seperti =, <>, dan >) bisa digunakan. Contoh kondisi dalam WHERE pada pemakaian ANY: gaji > ANY (S) Dalam hal ini operator relasional yg digunakan berupa “lebih dari” dan S adalah subquery. Andaikan subquery S menghasilkan G1, G2, …, Gn maka kondisi di atas identik dengan: (gaji > G1) OR (gaji > G2) OR … OR (gaji > Gn)
19
Dengan logika seperti ini, kiranya ekspresi seperti gaji > ANY(S) menjadi mudah dipahami.
Contoh: SELECT nama_peg, gaji FROM pegawai WHERE gaji > ANY (SELECT gaji FROM pegawai); Pernyataan di atas akan menghasilkan daftar nama beserta gaji untuk semua pegawai yg gajinya tidak paling kecil. Mengapa demikian? Karena yg gajinya paling kecil pasti tdk memenuhi kriteria gaji > nilai_gaji_siapapun. Hasil query dapat dilihat pada Gambar 10.
20
Gambar 10. Hasil dengan operator ANY pada tabel pegawai
nama_peg gaji Fuad Mawardi John Simatupang Freska Iskandar Kadarisman 960000 Kresnawan Rianto 750000 Ida Ayu Dian Arum 800000 Gambar 10. Hasil dengan operator ANY pada tabel pegawai
21
Jika operator relasional yg digunakan pada operator ANY berupa =, maka akan identik dengan operator IN. Pada keadaan seperti ini, lebih baik menggunakan IN daripada ANY karena IN lebih mudah dipahami. Contoh: SELECT nama FROM infoprib WHERE id_bin = ANY (SELECT DISTINCT id_bin FROM main);
22
Gambar 11. Contoh hasil = operator ANY yg identik dengan pemakaian IN
nama Drew Barrymore Sharon Stone Sylvester Stallone Kevin Costner Cristine Hakim Julia Roberts Demi Moore Cindy Crawford Keanu Reeves Sandra Bullock Richard Gere Gambar 11. Contoh hasil = operator ANY yg identik dengan pemakaian IN
23
5. Operator ALL Operator ALL digunakan untuk melakukan pembandingan dengan subquery. Kondisi dengan ALL menghasilkan nilai benar jika membandingkan menghasilkan benar untuk setiap nilai dalam subquery.. Contoh penggunaan ALL yaitu untuk memperoleh semua pegawai yg gajinya lebih rendah daripada semua pegawai di departemen Akunting. Perintahnya: SELECT nama_peg, gaji FROM pegawai WHERE gaji < ALL (SELECT gaji WHERE depart = ‘Akunting’); Hasil dari query di atas diperlihatkan pada Gambar 12.
24
Gambar 12. Hasil query dengan operator ALL
nama_peg gaji Kartono 700000 Gambar 12. Hasil query dengan operator ALL
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.