SQL (Structured Query Language) Oleh : Cosmas Haryawan
Pengantar SQL adalah bahasa standar dalam basis data yang digunakan untuk melakukan manipulasi data. Standardisasi bahasa ini dilakukan oleh ANSI tahun 86, 89,92 dan 99, dimana tiap perubahan tahun dilakukan peningkatan kemampuan SQL. Pada perkembangan saat ini standar yang paling banyak digunakan adalah standar ANSI 92. Hampir semua DBMS menggunakan SQL sebagai fasilitas untuk memanipulasi data seperti Oracle, SQLServer, MySQL, PostgreSQL, Foxpro dsb.
Fungsi SQL Meskipun awalnya hanya merupakan bahasa untuk memanipulasi data, pada perkembangannya SQL juga dapat digunakan untuk melakukan definisi data maupun control (security) terhadap data. Sehingga bahasa Query ini dibagi menjadi 3 bagian : DDL (Data Definition Language) DML (Data Definition Language) DCL (Data Control Language)
Materi Untuk Materi kali ini, pembahasan lebih difokuskan untuk DML dan lebih khusus lagi perintah SELECT Perintah SELECT adalah perintah yang paling banyak dipakai pada saat melakukan pemrograman basis data Perintah SELECT juga mempunyai variasi yang sangat banyak Fokus Materi : SELECT 1 tabel
Bentuk Umum SELECT daftar_field_yang_akan_ditampilkan FROM nama_tabel [ WHERE kriteria_data_yang_akan_ditampilkan ] Hasil dari perintah SELECT adalah suatu resource atau Record Set yang berbentuk baris dan Kolom
SELECT SELECT daftar_field_yang_akan_ditampilkan Field yang akan ditampilkan : Nama Field dari tabel Tanda * (asterik/bintang) Semua Field Konstanta Ekspresi Function Aggregate Function
FROM FROM nama_tabel Nama_tabel adalah nama dari tabel yang fieldnya akan ditampilkan Nama_tabel bisa terdiri dari 1 tabel, bisa juga lebih dari 1 tabel (akan dibahas di materi lanjutan)
WHERE [ WHERE kriteria_data_yang_akan_ditampilkan ] Penggunaan Tanda [….] artinya opsional Perintah WHERE ini bisa ada bisa juga tidak Kriteria data : Syarat dari data yang akan ditampilkan, biasanya berisi suatu ekspresi relasi atau ekspresi logika. Hasil dari Kriteria bernilai Boolean Benar (True) / Salah (False)
Contoh Data | nip | nama | kota | GAJI | | 001 | TOTOK | YOGYA | | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | | | 004 | SITI | KLATEN | | | 005 | TITIK | JAKARTA | | | 006 | DONI | SOLO | |
Contoh : SELECT nip,nama,kota,gaji FROM pegawai Akan menghasilkan : | nip | nama | kota | GAJI | | 001 | TOTOK | YOGYA | | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | | | 004 | SITI | KLATEN | | | 005 | TITIK | JAKARTA | | | 006 | DONI | SOLO | |
Contoh : SELECT * FROM pegawai Akan menghasilkan : | nip | nama | kota | GAJI | | 001 | TOTOK | YOGYA | | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | | | 004 | SITI | KLATEN | | | 005 | TITIK | JAKARTA | | | 006 | DONI | SOLO | | Hasil sama dengan perintah sebelumnya, karena tanda * berarti menampilkan semua field Karena tabel pegawai tersebut berisi 4 buah field, maka dengan perintah SELECT *, akan menampilkan keempat field yang ada
Contoh : SELECT kota FROM pegawai | kota | | YOGYA | | SOLO | | YOGYA | | KLATEN | | JAKARTA | | SOLO |
DISTINCT Agar tidak ada nilai kembar, maka pada select bisa digunakan perintah DISTINCT SELECT DISTINCT kota FROM pegawai | kota | | YOGYA | | SOLO | | KLATEN | | JAKARTA |
EKSPRESI Suatu Ekspresi perhitungan / persamaan dapat secara langsung disertakan dalam Statemen SELECT : SELECT nama, gaji, gaji FROM pegawai | NAMA | GAJI | GAJI | | TOTOK | | | | ANDI | | | | RUDI | | | | SITI | | | | TITIK | | | | DONI | | |
EKSPRESI… Untuk Menganti Nama Kolom hasil Ekspresi gunakan Statemen AS : SELECT nama, gaji, gaji AS gajibaru FROM pegawai | NAMA | GAJI | GAJIBARU | | TOTOK | | | | ANDI | | | | RUDI | | | | SITI | | | | TITIK | | | | DONI | | |
KONSTANTA Suatu Konstanta baik berupa charater maupun angka bisa langsung disertakan dalam statemen SELECT : SELECT ‘stmik akakom’ AS kantor, nama, gaji FROM pegawai | kantor | nama | gaji | | stmik akakom | TOTOK | | | stmik akakom | ANDI | | | stmik akakom | RUDI | | | stmik akakom | SITI | | | stmik akakom | TITIK | | | stmik akakom | DONI | |
FUNCTION Suatu Fungsi (bawaan database server) bisa langsung disertakan dalam statemen SELECT : SELECT LEFT(nama,2) AS initial, nama FROM pegawai | initial | nama | | TO | TOTOK | | AN | ANDI | | RU | RUDI | | SI | SITI | | TI | TITIK | | DO | DONI |
FUNCTION… SELECT gaji, if(gaji>250000,'OKE',if(gaji>200000,'LUMAYAN', 'PAYAH')) as komentar FROM pegawai; | gaji | komentar | | | PAYAH | | | OKE | | | OKE | | | PAYAH | | | PAYAH | | | LUMAYAN | Catatan : Untuk Fungsi yang bisa digunakan, tergantung database server yang dipakai
Aggregate Function Fungsi standar (ada di semua DBMS) untuk melakukan penghitungan dengan pengelompokan tertentu Misal : SUM untuk menjumlahkan COUNT untuk mencacah MAX untuk menentukan nilai terbesar MIN untuk menentukan nilai terkecil AVG untuk menentukan nilai rata-rata
Aggregate Function … SELECT SUM(gaji) AS total FROM pegawai | total | | | SELECT COUNT(*) AS cacah FROM pegawai | cacah | | 6 |
Aggregate Function… Beberapa DBMS bisa menggabungkan Statemen DISTINCT dengan Aggregate Function, Misal MYSQL SELECT COUNT(kota) FROM pegawai; | count(kota) | | 6 | SELECT COUNT(DISTINCT kota) FROM pegawai; | count(distinct kota) | | 4 |
WHERE WHERE digunakan untuk memilah data sesuai kondisi atau kriteria tertentu Kriteria yang digunakan akan menghasilkan nilai boolean (True/False) Kriteria selalu menggunakan operator relasi Terkadang digabung dengan operator Logika, operator aritmatika, atau gabungan ketiganya
Operator relasi Beberapa operator relasi yang biasa digunakan pada saat akan dibutuhkan suatu kriteria tertentu untuk menampilkan data adalah : OperatorArti =Sama dengan >Lebih Besar >=Lebih Besar atau sama dengan <Lebih Kecil <=Lebih Kecil atau sama dengan <>Tidak Sama Dengan LIKEMengandung suatu kata/huruf tertentu BETWEENRentang antara dua nilai INTerdapat dalam daftar tertentu
Operator Logika dan Aritmatika Operator Logika yang sering digunakan adalah : AND, OR dan NOT Operator Aritmatika (kelengkapannya tergantung DBMS yang digunakan), a.l: *, /, +, -, %
Contoh : mysql> SELECT * FROM pegawai WHERE nip = '002'; | nip | nama | kota | GAJI | | 002 | ANDI | SOLO | | mysql> SELECT * FROM pegawai WHERE gaji > ; | nip | nama | kota | GAJI | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | |
Contoh : mysql> SELECT * FROM pegawai WHERE nama LIKE '%TI%'; | nip | nama | kota | GAJI | | 004 | SITI | KLATEN | | | 005 | TITIK | JAKARTA | | mysql> SELECT * FROM pegawai -> WHERE gaji BETWEEN AND ; | nip | nama | kota | GAJI | | 001 | TOTOK | YOGYA | | | 005 | TITIK | JAKARTA | | | 006 | DONI | SOLO | |
Contoh : mysql> SELECT * FROM pegawai WHERE 0.1 * gaji > 30000; | nip | nama | kota | GAJI | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | | mysql> SELECT nama,kota FROM pegawai -> WHERE kota IN ('YOGYA','SOLO'); | nama | kota | | TOTOK | YOGYA | | ANDI | SOLO | | RUDI | YOGYA | | DONI | SOLO |
Contoh : mysql> SELECT * FROM pegawai WHERE RIGHT(nama,2) = 'DI'; | nip | nama | kota | GAJI | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | | BANDINGKAN DENGAN : mysql> SELECT * FROM pegawai WHERE nama LIKE '%DI'; | nip | nama | kota | GAJI | | 002 | ANDI | SOLO | | | 003 | RUDI | YOGYA | |
Contoh : mysql> SELECT nama, kota, gaji FROM pegawai -> WHERE kota = 'YOGYA' AND gaji > ; | nama | kota | gaji | | RUDI | YOGYA | | BANDINGKAN DENGAN : mysql> SELECT nama, kota, gaji FROM pegawai -> WHERE kota = 'YOGYA' OR gaji > ; | nama | kota | gaji | | TOTOK | YOGYA | | -> gaji < | ANDI | SOLO | | -> kota <> ‘YOGYA’ | RUDI | YOGYA | |
Pengelompokan Apabila diinginkan dapat ditampilkan suatu hasil query berdasar kelompok tertentu. Biasanya perintah ini digabungkan dengan suatu perintah aggregate function. Statemen yang digunakan adalah GROUP BY
Contoh : mysql> SELECT kota, SUM(gaji) AS total_gaji -> FROM pegawai GROUP BY kota; | kota | total_gaji | | JAKARTA | | | KLATEN | | | SOLO | | | YOGYA | | mysql> SELECT kota, COUNT(*) AS jumlah_peg FROM pegawai -> GROUP BY kota; | kota | jumlah_peg | | JAKARTA | 1 | | KLATEN | 1 | | SOLO | 2 | | YOGYA | 2 |
Pengurutan Untuk Melakukan Pengurutan hasil Query bisa digunakan Statemen ORDER BY Bentuk Umum : ORDER BY kunci_pengurutan [ASC][DESC] ASC Urut Naik (A – Z) DESC Urut Turun (Z – A) Jika tanpa ASC / DESC maka secara default akan dilakukan pengurutan ASC
Contoh : mysql> SELECT * FROM pegawai ORDER BY nip DESC; | nip | nama | kota | GAJI | | 006 | DONI | SOLO | | | 005 | TITIK | JAKARTA | | | 004 | SITI | KLATEN | | | 003 | RUDI | YOGYA | | | 002 | ANDI | SOLO | | | 001 | TOTOK | YOGYA | | mysql> SELECT kota, SUM(gaji) AS total_gaji FROM pegawai -> GROUP BY kota ORDER BY total_gaji; | kota | total_gaji | | KLATEN | | | JAKARTA | | | SOLO | | | YOGYA | |