PERTEMUAN KE - 12
Sub Query
Pada pertemuan keduabelas ini, mahasiswa diajarkan tentang perintah-perintah mampu menggunakan perintah SQL untuk menampilkan data dengan syarat berjenjang.
Sub Query
Merupakan bentu query yang terletak dalam query lain. Dalam pemahaman sederhana didalam select terdapat select lain. Kata kunci untuk subquery ada tiga macam yaitu :
§ IN
§ EXIST
§ ALL/ANY/SOME
Pembahasan Praktikum
Dengan menggunakan database dbproyek1 gunakan perintah-perintah pada Sub Query yaitu IN, EXISTS, ALL, ANY,dan SOME untuk mengelola dan mengoperasikan pada database dbproyek1, modifikasi dan kembangkan!!
Ø IN
mysql> select kodediv, namadiv, lokasi from divisi
where kodediv in(select kodediv from proyek where kodediv='D101');
+---------+-------------------------+---------+
| kodediv | namadiv | lokasi |
+---------+-------------------------+---------+
| D101 | Construction Management | Bandung |
+---------+-------------------------+---------+
1 row in set (0.00 sec)
Menampilkan kodediv, namadiv, lokasi dari table divisi dimana kode mengandung “D101”.
Ø EXISTS
mysql> select nip,nama,gapok from pegawai
-> where exists(select * from pekerjaanpro where nip=pegawai.nip);
+----------+----------------+---------+
| nip | nama | gapok |
+----------+----------------+---------+
| 13235539 | Emy Susanti | 3000000 |
| 13235540 | S. Rochmadi | 3500000 |
| 13235500 | Muhamad Waldan | 4000000 |
| 13235552 | Aulia Natasya | 4000000 |
+----------+----------------+---------+
4 rows in set (0.03 sec)
Menampilkan nip,nama,gapok dari table pegawai yang dapat menghasilkan satu atau lebih kolom, dari perintah yang menampilkan semua record pekrjaanpro dimana nip sama dengan nip pada pegawai.
Ø ALL
mysql> select nip,nama,gapok,honor from pegawai
-> where gapok >all(select honor from pegawai);
+----------+----------------+---------+--------+
| nip | nama | gapok | honor |
+----------+----------------+---------+--------+
| 13235539 | Emy Susanti | 3000000 | 150000 |
| 13235540 | S. Rochmadi | 3500000 | 200000 |
| 13235500 | Muhamad Waldan | 4000000 | 250000 |
| 13235552 | Aulia Natasya | 4000000 | 250000 |
+----------+----------------+---------+--------+
4 rows in set (0.01 sec)
Merupakan perintah untuk menampilkan nip, nama, gapok, honor dari table pegawai dimana gapok lebih besar dari perintah yang menampilkan record honor dari table pegawai. Operator all ini digunakan untuk menghasilkan nilai benar jika pembanding menghasilkan nilai benar untuk setiab nilai dalam subquery.
Ø ANY
mysql> select nip,nama,gapok from pegawai
-> where gapok >any(select gapok from pegawai);
+----------+----------------+---------+
| nip | nama | gapok |
+----------+----------------+---------+
| 13235540 | S. Rochmadi | 3500000 |
| 13235500 | Muhamad Waldan | 4000000 |
| 13235552 | Aulia Natasya | 4000000 |
+----------+----------------+---------+
3 rows in set (0.00 sec)
Merupakan perintah untuk menampilkan kolom nip, nama, gapok dari table pegawai dimana gapok lebih besar dan didalamnya terdapat perintah untuk menampilkan nilai terbesar dari gapok dan menghasilkan lebih dari satu nilai dari table pegawai.
Ø SOME
mysql> select nip,nama,gapok from pegawai
-> where gapok >some(select gapok from pegawai);
+----------+----------------+---------+
| nip | nama | gapok |
+----------+----------------+---------+
| 13235540 | S. Rochmadi | 3500000 |
| 13235500 | Muhamad Waldan | 4000000 |
| 13235552 | Aulia Natasya | 4000000 |
+----------+----------------+---------+
3 rows in set (0.00 sec)
Merupakan perintah untuk menampilkan kolom nip, nama, gapok dari table pegawai dimana gapok lebih besar dan didalamnya terdapat perintah untuk menampilkan nilai terbesar dari gapok dan menghasilkan lebih dari satu nilai dari table pegawai.fungsi operator some sama dengan fungsi operator any.
Ø NOT IN
mysql> select kodediv, namadiv,lokasi from divisi
-> where kodediv not in(select kodediv from proyek where kodediv='D101');
+---------+---------------------------+------------+
| kodediv | namadiv | lokasi |
+---------+---------------------------+------------+
| D102 | Marketing Management | Yogyakarta |
| D501 | Management Information sy | Yogyakarta |
| D535 | Prokduction Management | Jakarta |
+---------+---------------------------+------------+
3 rows in set (0.06 sec)
Menampilkan kodediv, namadiv, lokasi dari table divisi dengan tidak mengulang data yang sama dimana kodediv bukan kodediv dari table proyek yang memiliki kodediv “D101”.
Ø NOT EXISTS
mysql> select kodepro,namapro,kodediv from proyek
-> where not exists(select * from divisi where kodepro='P003'
-> and proyek.kodediv='D501');
+---------+-------------------+---------+
| kodepro | namapro | kodediv |
+---------+-------------------+---------+
| p001 | Project Manager 1 | D101 |
| p002 | Project Manager 2 | D102 |
| p004 | Project Manager 4 | D535 |
+---------+-------------------+---------+
3 rows in set (0.02 sec)
Menampilkan kodepro, namapro, kodediv dari table proyek yang tidak tercantum pada table devisi , dari perintah yang menampilkan semua record divisi dimana kodepro P003 dan kodediv pada table proyek “D501”.
Tugas
Gunakan perintah perintah sub query IN, EXISTS, ALL, ANY, SOME pada database system informasi penjualan online yang sudah dibangun!
Ø IN
mysql> select distinct kd_trans from transfer
-> where id_prsh in(select id_prsh from perusahaan where kd_trans='01213231');
+----------+
| kd_trans |
+----------+
| 01213231 |
+----------+
1 row in set (0.03 sec)
Digunakan untuk menampilka kd_trans dari table transfer dimana id_prsh dengan menggunakan operator in yang artinya menghasilkan nilai benar kalau nilai yang berada dikirinya cocok dengan salah satu daftar nilai dikanan nya.dan Cuma bisa menampilkan 1 kolom tetapi boleh beberapa baris. Tampilkan id perusahaan from perusahaan dimana kd_trans adalah 01213231. Operator distinct digunakan unutk tidak mengulang data yang sama.
Ø EXISTS
mysql> select kd_trans,tgl_trans from transfer
-> where exists(select * from bank where id_bank='11114'
-> and transfer.kd_trans='09074639');
+----------+------------+
| kd_trans | tgl_trans |
+----------+------------+
| 09074639 | 2010-10-23 |
+----------+------------+
1 row in set (0.00 sec)
Menampilkan kd_trans, tgl_trans dari table transfer yang dapat menghasilkan satu atau lebih kolom, dari perintah yang menampilkan semua record bank dimana id_bank 11114 sama dengan kd_trans pada transfer 09074639.
Ø ALL
mysql> select kd_brg,nama_brg,jml_brg from barang
-> where jml_brg
+--------+----------+---------+
| kd_brg | nama_brg | jml_brg |
+--------+----------+---------+
| 99932 | Baju | 6 |
| 99943 | gelang | 12 |
| 99954 | Sepatu | 10 |
+--------+----------+---------+
3 rows in set (0.00 sec)
Merupakan perintah untuk menampilkan kd_brg, nama_brg, jml_brg dari table barang dimana jml_brg lebih besar dari perintah yang menampilkan record kd_brg dari table barang. Operator all ini digunakan untuk menghasilkan nilai benar jika pembanding menghasilkan nilai benar untuk setiab nilai dalam subquery.
Ø ANY
mysql> select kd_brg,nama_brg,jml_brg from barang
-> where kd_brg
+--------+----------+---------+
| kd_brg | nama_brg | jml_brg |
+--------+----------+---------+
| 99932 | Baju | 6 |
| 99943 | gelang | 12 |
+--------+----------+---------+
2 rows in set (0.00 sec)
Merupakan perintah untuk menampilkan kolom kd_brg, nama_brg, jml_brg dari table barang dimana kd_brg lebih kecil dan didalamnya terdapat perintah untuk menampilkan nilai terkecil dari kd_brg dan menghasilkan lebih dari satu nilai dari table barang.
Ø SOME
mysql> select kd_brg,nama_brg,jml_brg from barang
-> where kd_brg >some(select kd_brg from barang);
+--------+----------+---------+
| kd_brg | nama_brg | jml_brg |
+--------+----------+---------+
| 99943 | gelang | 12 |
| 99954 | Sepatu | 10 |
+--------+----------+---------+
2 rows in set (0.00 sec)
Merupakan perintah untuk menampilkan kolom kd_brg, nama_brg, jml_brg dari table barang dimana kd_brg lebih besar dan didalamnya terdapat perintah untuk menampilkan kd_brg dari table barang dan menghasilkan lebih dari satu nilai dari table pegawai.fungsi operator some sama dengan fungsi operator any.
Kesimpulan
Pada pertemuan ke 12 ini dapat disimpulkan bahwa dengan menggunakan MySQL kita bisa juga memodifikasi data sesuai data yang kita inginkan. Dari praktikum diatas kita dapat memahami perintah subquery untuk pemrosesan data mampu menggunakan SQL unutk menampilkan data denga Syarat berjenjang. Operatos subquery meliputi IN, EXISTS, ANY, dan ALL. Subquery merupakan query yang terletak dalam query yang lain.