Pemilik Mobil
noKTPMilik Nama Alamat noTelp noPlat Merk HargaSewa noKTPMilik warna
112 adi jogja 123 AD 3456 BB CRZ 500000 112 merah
113 agung jogja 123 AB 1719 QE Xenia 250000 114 silver
114 budi jogja 123 AB 1234 FC Inova 300000 113 hitam
116 lusi jogja 123 B 6756 TOP Inova 300000 114 hitam
penyewa sewa
noKTPSewa Nama Alamat noTelp noKTPSewa noPlat tglSewa tglKembali
232 badu bantul 123 234
AD
3456
BB
1 Maret
2014
2 Maret
2014
234 bidu bantul 123 234
AB
1719
QE
2 Maret
2014
3 Maret
2014
235 bude sleman 123 235
B
6756
TOP
4 Maret
2014
5 Maret
2014
265 oma jogja 123
1. Berapa banyak mobil yang dipinjam pada tanggal 1 Maret 2014; 2. Berapa kali mobilnya LUSI dipinjam;
61 MATERI 9 NESTED QUERY Kompetensi: Mahasiswa mampu. Maksud dan tujuan:
a. Mahasiswa mengerti dan memahami serta memanfaatkan select untuk menampilkan data pada database MySql
b. Mahasiswa mengerti dan memahami bagaimana logika menampilkan data Landasan teori:
Nested query disebut juga dengan query bersarang. Seperti namanya, nested query adalah perintah SQL berupa gabungan dua atau lebih query/statement/perintah SQL yang bertingkat. Query yang terluar disebut dengan outer query sedangkan perintah di dalamnya disebut subquery.
Keuntungan dengan diterapkannya subquery diantaranya:
Perintah SQL menjadi lebih terstruktur, dimungkinkan untuk memisahkan tiap-tiap bagian statement-nya.
Sebagai alternatif cara untuk melakukan operasi tanpa JOIN dan UNION, dalam beberapa kasus dapat dimanfaatkan untuk membuat perintah SQL yang lebih optimal.
Subquery dipandang lebih sederhana dan lebih mudah dibaca jika dibandingkan JOIN atau UNION.
Contoh nested query sederhana:
SELECT * FROM employees WHERE emp_no IN (SELECT emp_no FROM dept_emp);
Sebuah subquery dapat memberikan nilai hasil berupa nilai tunggal, satu baris data, satu kolom data, atau satu tabel (satu atau lebih baris dari satu atau lebih kolom data). Query yang menggunakan nilai yang dihasilkan oleh subquery harus menangkap nilai tersebut dengan benar, sebagai contohnya adalah untuk nilai tunggal dapat digunakan sama dengan (=) sedangkan untuk data lebih dari satu digunakan IN, NOT IN, atau sejenisnya.
Sebuah subquery dapat mengandung kata kunci atau klausa layaknya perintah SELECT biasa, yaitu diantaranya: DISTINCT, GROUP BY, ORDER BY, LIMIT, JOIN, UNION, dan lain sebagainya. Sedangkan yang dapat menjadi outer statement adalah perintah SELECT, INSERT, UPDATE, DELETE, SET, atau DO.
Perbandingan Dengan Subquery
Perbandingan berparameterkan hasil dari subquery menggunakan operator = > < >= <= <> != <=> dapat dilakukan pada umumnya dengan bentuk perintah:
62 Operator perbandingan digunakan untuk menyaring data berdasarkan suatu nilai tunggal agar data yang dipilih sesuai dengan yang dikehendaki. Penggunaanya memang mirip dengan penggunaan pada klausa WHERE perintah SQL sederhana, hanya saja nilai skalar sebagai parameter didapatkan dari subquery. Contoh perintahnya:
SELECT * FROM employees WHERE
emp_no = (SELECT emp_no FROM dept_emp WHERE dept_no = (SELECT dept_no FROM departments WHERE dept_name = "Internal Affairs"));
Pastikan bahwa subquery memberikan hasil satu baris sebagai parameter perbandingan, karena apabila hasil subquery lebih dari satu baris data maka akan terjadi error.
Subquery Dengan IN, ANY, SOME
Kata kunci IN, ANY, dan SOME dapat digunakan untuk penyaringan data dengan persyaratan nilai jamak hasil dari subquery. Jika perintah SQL yang bukan subquery memberikan sebuah variabel/field yang berkedudukan sebagai operand (objek yang akan dikenakan operasi) dan operasi = > < >= <= <> != <=> adalah operator perbandingannya, maka secara umum penggunaan kata kunci IN, ANY, dan SOME adalah sebagai berikut:
operand operator_perbandingan ANY (subquery) operand IN (subquery)
operand operator_perbandingan SOME (subquery) Perhatikan contoh berikut:
SELECT * FROM employees WHERE emp_no IN
(SELECT emp_no FROM salaries WHERE salary>8000000);
Perintah di atas akan menampilkan data pegawai dengan gaji lebih dari delapan juta. Subquery akan memberikan nomer pegawai yang memiliki gaji lebih dari delapan juta, sedangkan query induk akan memilih data dari tabel employees yang nomer pegawainya ada pada hasil yang diberikan oleh subquery.
Ketika digunakan pada nested query (perintah SQL dengan subquery) maka kata kunci IN dapat digantikan dengan = ANY. Dengan demikian perintah SQL berikut memberikan hasil yang sama dengan contoh perintah SQL dengan kata kunci IN:
SELECT * FROM employees WHERE emp_no = ANY
(SELECT emp_no FROM salaries WHERE salary>8000000);
Kata kunci ANY (digunakan setelah operator perbandingan) akan menampilkan hasil data apabila ada paling tidak satu data pada subquery yang bernilai benar (TRUE) apabila dioperasikan dengan operator perbandingan dengan data pada outer query-nya. Contoh:
63 SELECT a FROM b WHERE a < ANY (SELECT a FROM c);
Perintah di atas akan menampilkan data kolom a dari tabel b yang memenuhi persyaratan perbandingan, yaitu apabila ada satu saja data pada kolom a tabel c yang lebih besar dari data kolom a tabel b tersebut. Perbandingan dilakukan untuk setiap data pada tabel b dengan setiap data pada tabel c.
Kata kunci SOME adalah alias dari ANY namun relatif lebih jarang digunakan. Dengan demikian untuk semua perintah SQL dengan kata kunci ANY akan tetap memberikan hasil yang sama ketika kata kunci ANY diganti dengan SOME.
Subquery Dengan ALL
Operand operator_perbandingan ALL (subquery)
Kata kunci ALL setelah operator perbandingan = > < >= <= <> != <=> digunakan untuk penyaringan data dengan persyaratan perbandingan harus bernilai benar (TRUE) untuk semua nilai yang dihasilkan oleh subquery. Perhatikan contoh berikut:
select * from salaries where salary > ALL
(select salary from salaries where emp_no=10009);
Perintah di atas adalah untuk menampilkan data gaji pegawai yang lebih besar dari gaji yang pernah diterima pegawai dengan nomor pegawai 10009, baik gaji saat ini maupun gaji yang dulu.
NOT IN dapat digunakan sebagai alternatif lain kata kunci < > ALL,dengan demikian dua statement SQL di bawah ini bernilai sama:
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
Daftar pustaka:
Buku Modul Praktikum Basis Data Komputer dan Sistem Informasi Sekolah Vokasi UGM
64 LATIHAN/KASUS
MySQL Alat dan bahan praktikum:
a. Modul praktikum b. Alat Tulis
c. Komputer yang sudah terinstal MySql Kegiatan praktikum:
Kegiatan 1
Buatlah tabel Mahasiswa, MataKuliah dan KRS dengan deskripsi tabel sebagai berikut: