Widio Riyanto
Konsep Sistem Informasi B
SQL QUERY A. Struktur SQL Query SQL memberikan bahasa query tingkat tinggi (a high level query language) dengan struktur sederhana dengan kosakata dan gramatika yang sederhana pula, seperti berikut ini: Select A1, A2, …, An From T1, T2, …, Tn Where P Dimana: A1, A2, …, An : himpunan dari semua atribut yang hendak ditampilkan T1, T2, …, Tn : himpunan dari semua tabel yang terlibat (diperlukan) dalam query P : predikat atau kriteria yang diinginkan tentang informasi yang dicari SELECT dapat diikuti dengan: - Nama kolom - Fungsi kolom - Ekspresi aritmatika - Fungsi skalar - Literal FROM WHERE GROUP BY HAVING ORDER BY
nama tabel atau nama view kondisi (selection of rows) nama kolom kondisi (selection of groups) nama kolom atau angka urutan kolom
Penggunaan pernyataan SELECT untuk menampilkan isi sebuah tabel baik secara keseluruhan ataupun terbatas pada baris-baris yang memenuhi kriteria tertentu. Sebelum mempraktekkan perintah-perintah SQL, perlu menyiapkan tabel infoprib dan pegawai. Isi kedua tabel dapat dilihat sebagai berikut : Tabel infoprib Id_bin | nama --------------------- --+--------------------------DREWB | Drew Barrymore STONE | Sharon Stone SYLVE | Sylvester Stallone KEVIN | Kevin Costner HAKIM | Christine 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
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
| tgl_lahir -------+--------------|1975-02-22 |1958-03-10 |1946-07-06 |1955-01-18 |1957-12-25 |1967-10-28 |1962-11-11 |1966-02-20 |1972-08-30 |1964-09-03 |1964-07-26 |1946-08-29 | |1957-07-09 |1975-06-04
| jkel -+---|W |W |P |P |W |W |W |W |W |P |W |P |P |W |W
1
Konsep Sistem Informasi B
Tabel pegawai nip | nama_peg | gaji | kota | depart --------------+-------------------------+----------------+----------------+--------12345 | Fuad Mawardi | 3000000 |Yogya |Akunting 12346 | John Simatupang | 3600000 |Yogya |Pemasaran 12347 | Freska Iskandar | 1500000 |Klaten |Personalia 12348 | Kadarisman | 960000 |Sleman |Akunting 12349 | Kresnawan | 1200000 |Magelang |EDP 12351 | Rianto | 750000 |Bantul |Akunting 12352 | Fahmi | |Klaten |EDP 12353 | Ida Ayu Lestari | 750000 |Sleman |Personalia 12354 | Dian Arum | 800000 |Yogya |Produksi 12345 | Kartono | 700000 |Yogya |Produksi Catatan: • •
Pada tabel infoprib memang sengaja ada data tanggal lahir yang bernilai NULL. Begitu juga pada tabel pegawai, terdapat gaji yang bernilai NULL. Pada tabel pegawai, kota menyatakan kota tempat tinggal dan depart menyatakan departemen tempat pegawai bekerja.
Menampilkan semua kolom semua baris Seringkali diperlukan untuk menampilkan semua data yang terdapat pada sebuah tabel. Hal ini dapat dilakukan dengan menggunakan perintah berikut: SELECT * FROM infoprib; Contoh ini digunakan untuk menampilkan semua isi tabel infoprib. Pernyataan di atas identik jika menulis menjadi seperti berikut: SELECT id_bin, nama, tgl_lahir, jkel FROM infoprib; Namun, tentu saja pengunaan tanda * lebih praktis daripada kalau menyebutkan semua nama kolom. Maka hasilnya adalah: Id_bin | nama | tgl_lahir | jkel --------------+-------------------------+----------------+---DREWB | Drew Barrymore |1975-02-22 | W STONE | Sharon Stone |1958-03-10 | W SYLVE | Sylvester Stallone |1946-07-06 | P KEVIN | Kevin Costner |1955-01-18 | P HAKIM | Christine Hakim |1957-12-25 | W JULIA | Julia Roberts |1967-10-28 | W DEMIM | Demi Moore |1962-11-11 | W CINDY | Cindy Crawford |1966-02-20 | W CDIAZ | Cameron Diaz |1972-08-30 | W KEANU | Keanu Reeves |1964-09-03 | P SANDR | Sandra Bullock |1964-07-26 | W RGERE | Richard Gere |1946-08-29 | P RAHAR | Slamet Rahardjo | |P KELLY | Kelly McGillis |1957-07-09 | W JOLIE | Angelina Jolie |1975-06-04 | W
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
2
Konsep Sistem Informasi B Menampilkan kolom tertentu Jika akan menampilkan hanya kolom-kolom tertentu, maka perlu menyebutkan nama-nama kolom sesudah kata SELECT. Dalam hal ini, antarnama kolom perlu dipisahkan dengan koma. Contoh: SELECT nama, tgl_lahir FROM infoprib; maka hasilnya: nama |tgl_lahir -----------------------------------------+--------------Drew Barrymore 1975-02-22 Sharon Stone 1958-03-10 Sylvester Stallone 1946-07-06 Kevin Costner 1955-01-18 Christine Hakim 1957-12-25 Julia Roberts 1967-10-28 Demi Moore 1962-11-11 Cindy Crawford 1966-02-20 Cameron Diaz 1972-08-30 Keanu Reeves 1964-09-03 Sandra Bullock 1964-07-26 Richard Gere 1946-08-29 Slamet Rahardjo Kelly McGillis 1957-07-09 Angelina Jolie 1975-06-04 Memperoleh data yang unik Sebelum melihat perolehan data yang bersifat unik (tidak ada yang kembar), cobalah untuk memberikan perintah berikut: SELECT jkel FROM infoprib; maka akan menampilkan isi kolom jkel saja. seperti berikut ini: jkel ---W W P P W W W W W P W P P W W
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
3
Konsep Sistem Informasi B Tampak bahwa hasil yang didapatkan banyak yang kembar. Sekarang, bagaimana caranya kalau hasil yang dikendaki hanya berupa kemungkinan isi dari kolom jkel? Pada keadaan seperti inilah bisa menyisipkan kata DISTINCT pada klausa SELECT seperti perintah berikut ini: SELECT DISTINCT jkel FROM infoprib; Hasilnya dapat dilihat sebagai berikut: Jkel ---P W Tampak bahwa hasil yang diberikan benar-benar mencerminkan kemungkinan isi dari kolom jkel. Nilai yang kembar hanya akan ditampilkan satu kali. Contoh yang lain, jika ingin mengetahui di kota mana saja pegawai bertempat tinggal berdasarkan data pada tabel pegawai, maka dapat memberikan perintah berikut ini: SELECT DISTINCT kota FROM pegawai; Maka hasilnya seperti tabel berikut ini: Kota ------Bantul Klaten Magelang Sleman Yogya Memilih baris tertentu Jika menginginkan hasil hanya baris-baris tertentu, maka perlu menyertakan klausa WHERE pada pernyataan SELECT, maka bentuk klausanya sebagai berikut: WHERE kondisi Dengan kondisi berupa suatu ekspresi. Dalam hal ini, baris-baris yang disertakan hanyalah yang memenuhi kondisi. Catatan: Kondisi yang digunakan pada klausa WHERE sering disebut dengan istilah predikat. Misalnya, ingin menampilkan semua nama bintang film wanita. Pernyataan yang perlu diberikan adalah: SELECT nama FROM infoprib WHERE jkel = ‘W’;
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
4
Konsep Sistem Informasi B Maka hasilnya adalah sebagai berikut: nama -------------------Drew Barrymore Sharon Stone Christine Hakim Julia Roberts Demi Moore Cindy Crawford Cameron Diaz Sandra Bullock Kelly McGillis Angelina Jolie Jika ingin menampilkan hanya sebuah baris yang memenuhi syarat, kondisi dalam WHERE perlu melibatkan kunci primer. Contoh: SELECT * FROM infoprib WHERE id_bin = ‘DREWB’; Maka hasilnya adalah data Drew Barrymore yang ditamplikan: id_bin | nama | tgl_lahir | jkel --------------+-------------------------+-------------------------+------DREWB | Drew Barrymore | 1975-02-22 | W Perlu diketahui, operator = (dan juga operator relasional lainnya) tidak dapat digunakan untuk membandingkan terhadap nilai NULL. Sebagai contoh, pada perintah berikut ini: SELECT nama FROM infoprib WHERE tgl_lahir = NULL; Apakah perintah di atas akan menampilkan daftar bintang film yang tanggalnya tidak disebutkan? Ternyata tidak! Maka akan memperoleh hasil seperti berikut ini: SELECT nama FROM infoprib WHERE tgl_lahir = NULL; Empty set (0.38 sec) Keterangan: Tanggal lahir yang bernilai NULL tidak ditampilkan Sekalipun tgl_lahir bernilai NULL, perbandingan tgl_lahir = NULL tidak menghasilkan nilai benar, melainkan menimbulkan keadaan nalar yang disebut ‘tidak dikenal’. Catatan: Pada PostgreSQL, SELECT di depan menghasilkan seperti berikut: nama -------------------Slamet Rahardjo
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
5
Konsep Sistem Informasi B Bila pembandingan dengan = NULL tidak dapat dilakukan pada sistem yang digunakan, persoalan ini dapat dipecahkan dengan menggunakan operator IS NULL. B. Operator Pembanding SQL Yang dimaksud dengan operator pembanding adalah operator yang digunakan untuk melakukan pembandingan antara dua buah nilai. Tabel berikut memperlihatkan semua operator pembanding atau relasional. Operator
Keterangan
=
sama dengan
>
lebih dari
<
kurang dari
>=
lebih dari atau sama dengan
<=
kurang dari atau sama dengan
<>
tidak sama dengan
Contoh penggunaan operator = telah didapatkan di depan. Sekarang untuk mencoba operator yang lain yaitu >. Operator ini biasa digunakan untuk membandingkan nilai numerik. Namun, operator ini sebenarnya dapat juga dapat digunakan untuk pembandingan string. Contoh: SELECT nama, tgl_lahir FROM infoprib WHERE tgl_lahir > ‘19651231’ Pernyataan di atas akan menampilkan semua bintang film yang lahir sesudah tanggal 31 Desember 1965. Maka akan diperoleh hasil sebagaimana terlihat pada tabel berikut: Nama | tgl_lahir ---------------------------------------Drew Barrymore | 1975-02-22 Julia Roberts | 1967-10-28 Cindy Crawford | 1966-02-20 Cameron Diaz | 1972-08-30 Angelina Jolie | 1975-06-04 Adapun contoh berikut digunakan untuk menampilkan semua pegawai yang gajinya melebihi dari 2 juta: SELECT nama_peg, gaji FROM pegawai WHERE gaji > 2000000; Maka akan diperoleh hasil: nama_peg | gaji --------------------------------------------Fuad Mawardi | 3000000 John Simatupang | 3600000
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
6
Konsep Sistem Informasi B
C. Operator Boolean Operator ini digunakan untuk melakukan pemeriksaan suatu nilai dan membandingkannya dengan nilai atau kondisi yang lain. Operator boolean mencakup operator OR, AND, dan NOT. 1. Operator OR Operator OR berguna untuk melakukan query dengan kondisi majemuk. Bentuk penggunaan OR adalah sebagai berikut:
kondisi_1 OR kondisi_2 Hasil ekspresi dengan OR berupa benar (True) kalau terdapat kondisi yang bernilai benar. Tabel berikut merupakan daftar kemungkinan hasil ekspresi dengan OR Kondisi_1
Kondisi_2
Hasil
Salah
Salah
Salah
Salah
Benar
Benar
Benar
Salah
Benar
Benar
Benar
Benar
Sebagai contoh dari operator OR: SELECT * FROM infoprib WHERE jkel = ‘P’ OR id_bin = ‘STONE’; Perintah di atas akan menampilkan semua baris yang memiliki nilai jkel berupa P ataupun baris yang memiliki nilai STONE pada kolom id_bin. id_bin | nama | tgl_lahir | jkel ------------------+-------------------------+-----------------+---STONE | Sharon Stone |1958-03-10 | W SYLVE | Sylvester Stallone |1946-07-06 | P KEVIN | Kevin Costner |1955-01-18 | P KEANU | Keanu Reeves |1964-09-03 | P RGERE | Richard Gere |1946-08-29 | P RAHAR | Slamet Rahardjo | |P Berkaitan dengan nilai NULL, pada beberapa sistem selain keadaaan benar dan salah terdapat keadaan nalar yang telah disinggung di depan yaitu ‘tidak dikenal’. Keadaan ini terjadi kalau terdapat nilai NULL. Tabel berikut memberikan keadaan nalar yang terjadi pada pemakaian OR sekiranya terjadi kondisi ‘tak dikenal’. Catatan: Kondisi ‘tak dikenal’ kadangkala disebut sebagai kondisi NULL.
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
7
Konsep Sistem Informasi B Tabel berikut adalah tabel kemungkinan hasil ekspresi OR, termasuk untuk keadaan nalar ‘tak dikenal’. Kondisi_1
Kondisi_2
Hasil
Tak dikenal
Salah
Tak dikenal
Tak dikenal
Benar
Benar
Tak dikenal
Tak dikenal
Tak dikenal
Salah
Tak dikenal
Tak dikenal
Benar
Tak dikenal
Benar
Tabel berikut memperlihatkan isi tabel infoprib secara keseluruhan. id_bin
nama
tgl_lahir
jkel
DREWB
Drew Barrymore
1975-02-22
W
STONE
Sharon Stone
1958-03-10
W
SYLVE
Sylvester Stallone
1946-07-06
P
KEVIN
Kevin Costner
1955-01-08
P
HAKIM
Christine Hakim
1957-12-25
W
JULIA
Julia Roberts
1967-10-28
W
DEMIM
Demi Moore
1962-11-11
W
CINDY
Cindy Crawford
1966-02-20
W
CDIAZ
Cameron Diaz
1972-08-30
W
KEANU
Keanu Reeves
1964-09-02
P
SANDR
Sandra Bullock
1964-07-26
W
RGERE
Richard Gere
1946-08-29
P
RAHAR
Slamet Rahardjo
NULL
P
KELLY
Kelly McGilis
1957-07-09
W
JOLIE
Angelina Jolie
1975-06-04
W
Sekarang, mencoba memberikan perintah berikut: SELECT nama, tgl_lahir FROM infoprib Where jkel = ‘W’ OR tgl_lahir = NULL;
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
8
Konsep Sistem Informasi B Hasilnya dapat dilihat pada berikut: nama
tgl_lahir
Drew Barrymore
1975-02-22
Sharon Stone
1958-03-10
Christine Hakim
1957-12-25
Julia Roberts
1967-10-28
Demi Moore
1962-11-11
Cindy Crawford
1966-02-20
Cameron Diaz
1972-08-30
Sandra Bullock
1964-07-26
Kelly McGilis
1957-07-09
Angelina Jolie
1975-06-04
Hasil pada sistem yang menolak ekspresi tgl_lahir = NULL. Tampak bahwa tidak ada baris yang kolom tgl_lahir-nya bernilai NULL. 2. Operator AND Kaidah pemakaian operator AND adalah seperti berikut:
kondisi_1 AND kondisi_2 Operator ini memiliki sifat sebagaimana terlihat pada Tabel berikut: Kondisi
Benar
Salah
Tak dikenal
Benar
Benar
Salah
Tak dikenal
Salah
Salah
Salah
Salah
Tidak dikenal
Tak dikenal
Salah
Salah
Untuk memudahkan dalam mengingat, dapat menggunakan pedoman berikut: -
Apapun bila di-AND-kan dengan nilai salah akan menghasilkan nilai salah Hasil benar hanya kalau kedua kondisi bernilai benar Nilai benar jika di-AND-kan dengan nilai ‘tak dikenal’ akan menghasilkan nilai ‘tak dikenal’.
Contoh berikut digunakan untuk menampilkan semua bintang film pria yang lahir sebelum tahun 1950: SELECT nama, tgl_lahir FROM infoprib WHERE jkel = ‘P’ AND tgl_lahir < ‘ 1950-01-01’;
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
9
Konsep Sistem Informasi B Maka akan diperoleh hasil sebagai berikut: nama |tgl_lahir ---------------------------+---------------Sylvester Stallone |1946-07-06 Kevin Costner |1955-01-18 Richard Gere |1946-08-29 3. Operator NOT Operator NOT berguna untuk melakukan pembalikan nilai nalar. Kaidah pemakaiannya adalah sebagai berikut: NOT kondisi Hasil ekspresi ditunjukkan pada tabel berikut: Ekspresi
Hasil
NOT Benar
Salah
NOT Salah
Benar
NOT ‘Tak Dikenal’
‘tak dikenal’
Contoh berikut memberikan gambaran penggunaan NOT SELECT nama FROM infoprib WHERE NOT jkel = ‘P’; Maka diperoleh hasil daftar bintang film yang mempunyai jenis kelamin wanita: nama -------------------------Drew Barrymore Sharon Stone Christine Hakim Julia Roberts Demi Moore Cindy Crawford Cameron Diaz Sandra Bullock Kelly McGillis Angelina Jolie Pernyataan di atas identik dengan pernyataan: SELECT nama FROM infoprib WHERE jkel = ‘W’; Adapun pernyataan berikut digunakan untuk menampilkan bintang film yang tidak lahir pada tahun 1950-an: SELECT nama, tgl_lahir FROM infoprib WHERE NOT (tgl_lahir > ‘19491231’ AND (tgl_lahir < ‘19600101’; Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
10
Konsep Sistem Informasi B Maka akan diperoleh hasil daftar bintang film yang tidak lahir pada tahun 1950-an: Nama | tgl_lahir ----------------------------+---Drew Barrymore |1975-02-22 Sylvester Stallone |1946-07-06 Julia Roberts |1967-10-28 Demi Moore |1962-11-11 Cindy Crawford |1966-02-20 Cameron Diaz |1972-08-30 Keanu Reeves |1964-09-02 Sandra Bullock |1964-07-06 Richard Gere |1946-08-29 Angelina Jolie |1975-06-04 D. Pencarian String Operator LIKE digunakan untuk membentuk pencarian string yang sesuai dengan nilai yang dicantumkan pada kondisi. Kondisi pencarian dapat berisi karakter atau bilangan dengan menggunakan 2 (dua) simbol khusus, yaitu: 1. %, berfungsi untuk menotasikan zero atau banyak karakter, atau menggantikan sembarang jumlah karakter 2. _ (underscore), berfungsi menotasikan atau menggantikan satu karakter Contoh Menggunakan kondisi LIKE: SELECT id_bin, nama, tgl_lahir, jkel FROM infoprib WHERE nama LIKE ‘D%’; SELECT id_bin, nama, tgl_lahir, jkel FROM infoprib WHERE nama LIKE ‘%D’; SELECT id_bin, nama, tgl_lahir, jkel FROM infoprib WHERE nama LIKE ‘%D%’; SELECT id_bin, nama, tgl_lahir, jkel FROM infoprib WHERE nama LIKE ‘_a’; E. Penggunaan Distinct Distinct berfungsi untuk menghilangkan duplikasi pada nilai kolom dan mengurangi duplikasi pada output record. Penggunaan distinct dapat dilihat pada contoh berikut ini: Sebelum menggunakan distinct maka terlihat perolehan data yang tidak bersifat unik (banyak nilai yang kembar), cobalah untuk memberikan perintah berikut: SELECT jkel FROM infoprib;
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
11
Konsep Sistem Informasi B
maka akan menampilkan isi kolom jkel saja. seperti berikut ini: jkel ---W W P P W W W W W P W P P W W Tampak bahwa hasil yang didapatkan banyak yang kembar. Sekarang, bagaimana caranya kalau hasil yang dikehendaki hanya berupa kemungkinan isi dari kolom jkel? Pada keadaan seperti inilah bisa menyisipkan kata DISTINCT pada klausa SELECT seperti perintah berikut ini: SELECT DISTINCT jkel FROM infoprib; Hasilnya dapat dilihat sebagai berikut: Jkel ---P W Tampak bahwa hasil yang diberikan benar-benar mencerminkan kemungkinan isi dari kolom jkel. Nilai yang kembar hanya akan ditampilkan satu kali. Contoh yang lain, jika ingin mengetahui di kota mana saja pegawai bertempat tinggal berdasarkan data pada tabel pegawai, maka dapat memberikan perintah berikut ini: SELECT DISTINCT kota FROM pegawai; Maka hasilnya seperti tabel berikut ini:
Kota ------Bantul Klaten Magelang Sleman Yogya
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
12
Konsep Sistem Informasi B
Referensi: http://mhs.stiki.ac.id/boysagi/Software/bdl/bukudb11.doc http://elearning.gunadarma.ac.id/docmodul/modul_kursus_db2_universal_database/7_sql_queries.pdf http://courseware.politekniktelkom.ac.id/BUKU_KA/Semester%203/IS222%20Pemrograman%20We b/Pemrograman%20Web.pdf anto1987.files.wordpress.com/2011/.../sql-bab-6.
Pertemuan 3 ‐ Widio Riyanto, SKom– Universitas Gunadarma
13