Bab VI Structure Query Language (SQL)

  BAB

  6 Tujuan Instruksional Umum  Mahasiswa dapat mengerti Structure Query Language (SQL).

  Tujuan Instruksional Khusus  Mahasiswa dapat mengerti struktur dasar.Mahasiswa dapat mengerti operator logika.Mahasiswa dapat mengerti fungsi agregasi.Mahasiswa dapat mengerti Data Definition Language (DDL).Mahasiswa dapat mengerti Data Manipulation Language (DML).

STRUCTURE QUERY LANGUAGE (SQL)

  BMS umumnya menyediakan program khusus (utilitas/utility) yang dapat digunakan secara interaktif untuk melakukan berbagai operasi terhadap basis data, seperti pembuatan tabel, penghapusan tabel, penambahan data, pengubahan data,

  D

  pencarian data, penghapusan data dan lain–lain. Ada banyak sekali bahasa basis data yang pernah dibuat untuk masing–masing DBMS. Namun akhirnya yang menjadi standart adalah SQL. SQL merupakan singkatan dari Structure Query Language. Dalam bahasa inggris sering dibaca sebagai SEQUEL. SQL merupakan bahasa query standar yang digunakan untuk mengakses basis data relasional. Standarisasi Internasional terhadap SQL pertama kali dilakukan oleh ANSI (American National Standards Institution), melalui publikasi Database Language SQL. Saat ini, ANSI dan ISO (International Standart Organization) merupakan dua organisasi yang memuat standarisasi terhadap SQL.

  SQL pertama kali diterapkan pada sistem R (sebuah projection riset pada laboratorium riset San Jose, IBM). Proyek ini bertujuan mengembangkan sebuah sistem pada database relational atau dengan kata lain sebuah sistem yang dapat memenuhi segala jenis sistem pengoperasian basis data modern. Namun kini SQL juga dijumpai pada berbagai plat form, mikro komputer hingga mainframe. SQL dapat digunakan baik secara berdiri sendiri maupun dilekatkan pada bahasa–bahasa lain seperti Basic, FoxPro, C dan lain–lain. SQL juga telah menjadi bagian dari sejumlah DBMS seperti, Sybase, Oracle dan Informix.

6.1 Struktur Dasar

  Sebuah ekspresi SQL dasar sebenarnya hanya terdiri atas 3 klausa, yaitu :  Klausa SELECT digunakan untuk menetapkan daftar atribut (field) yang diinginkan sebagai hasil query.

   Klausa FROM digunakan untuk menetapkan tabel (atau gabungan tabel) yang akan ditelusuri selama query data dilakukan.  Klausa WHERE yang sifatnya optional, digunakan sebagai predikat (kriteria) yang harus dipenuhi dalam memperoleh hasil query.

  1. Klausa Select Jika kita ingin menampilkan nomor anggota dan nama anggota yang ada di tabel anggota, maka kita dapat menggunakan perintah SQL berikut ini :

  select no_ang, nm_ang from anggota;

  sementara, perintah berikut ini :

  select nm_ang from anggota;

  Akan menampilkan semua data nama anggota yang ada. Jika katakanlah di dalam tabel terdapat dua anggota dengan nama yang sama (tapi nomor anggota–nya berbeda), maka nama tersebut juga akan tampil dua kali. Jika kita mengharapkan agar nilai atribut yang tampil bersifat unik (sehingga dalam kasus tersebut, walaupun ada banyak anggota dengan nama yang sama, maka hanya satu nama yang tampil), perintahnya :

  select distinct nm_ang from anggota;

  2. Klausa Where Klausa ini berguna untuk menetapkan predikat atau kriteria yang harus dipenuhi dalam memperoleh hasil query. Klausa ini boleh tidak digunakan, yang artinya

  query dilakukan untuk semua record di dalam tabel yang disebut pada klausa from.

  Berikut ini adalah contoh untuk menampilkan semua atribut untuk anggota dengan no_ang =’00001’

  select * from anggota where no_ang = ‘00001’;

  Perhatikanlah nilai 00001 diapit dengan tanda kutip tunggal. Penggunaan tanda kutip ini digunakan terhadap nilai yang bertipe string. Kita juga dapat menerapkan predikat dengan operator relasi lainnya (<, >, <=, >=,

<>) dan mengkombinasikannya dengan operator logika (and, or, not).

Misalnya, kita ingin menampilkan semua mata kuliah yang diselenggarakan di semester 3 tetapi yang jumlah sks–nya lebih besar dari 2, ekpresi SQL–nya adalah :

  select * from kuliah where semester = 3 and sks > 2; Perhatikan kembali, nilai 3 dan 2 tidak diapit tanda kutip tunggal, karena nilai tersebut bertipe numerik sesuai dengan tipe untuk atribut semester dan atribut sks di tabel kuliah. Kita juga dapat melakukan query dengan kriteria yang berbentuk range nilai tertentu dengan menggunakan tambahan klausa between. Misalnya, untuk menampilkan record–record kuliah yang diselenggarakan antara semester 3 hingga 5 :

  select * from kuliah where semester between 3 and 5

  Khusus untuk atribut yang bertipe string, kita dapat melakukan pencarian dengan pola tertentu, dengan memanfaatkan karakter ‘%’ (percent) atau ‘_’ (underscore) dan tambahan klausa like pada klausa where.  Tanda ‘%’, berarti cocok untuk semua substring.  Tanda ‘_’, berarti cocok untuk semua karakter pada posisi yang sesuai. Contoh :  Ekspresi SQL untuk menampilkan record–record mahasiswa yang namanya diawali dengan huruf ‘A’ :

  select * from siswa where nama_mhs like ‘A%’;

   Ekspresi SQL untuk menampilkan mahasiswa yang huruf/karakter kedua dari namanya adalah ‘a’ :

  select * from siswa where nama_mhs like ‘_a%’;

   Ekspresi SQL untuk menampilkan mahasiswa–mahasiswa angkatan 2005 dengan perintah :

  select * from siswa where nim like ‘05%’;

  3. Klausa From Klausa ini digunakan untuk menetapkan tabel yang kita jadikan sebagai sumber (lokasi) pencarian data. Sebagaimana kita ketahui, basis data terdiri atas sejumlah tabel yang saling berhubungan. Karena itu, akan seringkali ada kebutuhan untuk melakukan query tidak hanya dari satu tabel, tapi juga dengan merelasikan beberapa tabel sekaligus. Upaya ini dilakukan karena atribut–atribut yang kita harapkan sebagai hasil query tidak hanya tersedia di sebuah tabel, tapi berada di sejumlah tabel.

  Berikut ini contoh untuk menampilkan data kuliah beserta dosen yang mengajar, maka kita tidak hanya dapat melakukan query dari tabel kuliah saja karena data nama dosen tidak tersimpan di tabel ini, tetapi berada di tabel dosen. Untuk memenuhi keinginan itu, kita dapat menggunakan ekspresi SQL berikut :

  select * from kuliah, dosen where kuliah.kode_dos = dosen.kode_dos;

  4. Pengurutan Hasil Query Dengan menggunakan ekspresi dasar SQL (dengan tiga klausa : select, from, where), maka hasil query ditampilkan dengan urutan yang sesuai dengan struktur penyimpanan yang terapkan pada table query

  select * from siswa order by nama_mhs;

  6.2 Operator Logika

  Macam–macam operator logika yang digunakan di dalam sintaks SQL, antara lain sebagai berikut :  AND, membandingkan dua predicate. Jika salah satu predicate nilainya (isi)

  False (salah), maka menghasilkan False. Jika kedua predicate bernilai True (benar), maka hasilnya True.

   OR, membandingkan dua predicate. Jika salah satu predicate nilainya True (benar), maka menghasilkan True. Jika kedua predicate nilainya False (salah), maka hasilnya False.  NOT, membalikkan nilai predicate. Jika predicate bernilai False (salah), maka hasilnya True, begitu juga sebaliknya apabila predicate bernilai True (benar), maka hasilnya False.

  6.3 Fungsi Agregasi

  Di samping menampilkan nilai–nilai atribut yang ada di dalam tabel, sering pula ada kebutuhan untuk menampilkan data–data agregasi, seperti banyaknya record, total nilai suatu atribut, rata–rata nilai atribut, nilai atribut terbesar ataupun nilai atribut terkecil. Data agregasi semacam itu dapat diperoleh dengan menggunakan fungsi– fngsi berikut ini :  count untuk mendapatkan nilai banyaknya record hasil query.  sum untuk mendapatkan nilai total suatu atribut numerik hasil query.  avg untuk mendapatkan nilai rata–rata suatu atribut numerik hasil query.  max untuk mendapatkan nilai terbesar dari suatu atribut hasil query.  min untuk mendapatkan nilai terkecil dari suatu atribut hasil query. Berikut adalah contoh – contoh penggunaan fungsi agregasi :

  1. Menampilkan banyaknya record mahasiswa :

  select count (*) from siswa;

  2. Menampilkan banyaknya mahasiswa angkatan 98 :

  select count (*) from siswa; where ang like ‘98%’

  3. Menampilkan total sks untuk kuliah di semester 2 :

  select sum (sks) from kuliah where semester = 2;

  4. Menampilkan rata–rata sks untuk semua mata kuliah :

  select avg (sks) from kuliah;

  5. Menampilkan indeks nilai terbesar yang diperoleh mahasiswa untuk matakuliah dengan kode kuliah ‘SDT231’

  select max (indeks_nil) from nilai where kode_kul = ‘SDT231’;

6.4 Data Definition Language (DDL)

  Sebelum melangkah dalam pembuatan SQL dengan DDL, berikut ini tabel–tabel untuk memudahkan, membuat, menghapus dan mengubah perintah–perintah sesuai dengan rumus–rumus yang ada :

  95 040003 SDT231

  35

  45

  5 040001 KDT220

  85

  80 040006 KDT220

  80

  85 040005 SBD211

  95

  45 040004 SBD211

  10

  75

  Tabel siswa (nim menunjukkan primary key dari tabel siswa) nim nama_mhs alm_mhs kota_mhs

  Paket bahasa di dalam DBMS dibagi menjadi beberapa definisi. Pola atau schema basis data ditentukan dengan set definisi yang diekspresikan dengan satu bahasa khusus disebut DDL. Hasil kompilasi dari perintah DDL adalah satu set tabel yang disimpan di dalam file khusus yang disebut data dictionary.

  65

  040001 SDT231

  nim kode_mk nil_mid nil_final

  3 Tabel nilai (menunjukkan matakuliah berhubungan dengan nilai mahasiswa)

  3 SBD211 Sistem Basis Data

  2 KDT220 Komunikasi Data

  SDT231 Struktur Data

  Tabel kuliah (kode_mk menunjukkan primary key dari tabel kuliah) kode_mk nama_mk sks

  040001 Andika Jl. Kelengkeng No. 45 Semarang 040002 Rinawari Jl. Semangka No. 20 Semarang 040003 Asriana Jl. Belimbing No. 67 Purwokerto 040004 Puspitasari Jl. Rambutan No. 14 Wonosobo 040005 Budi Jl. Anggur No. 98 Salatiga 040006 Pipit Jl. Jeruk No. 71 Wonosobo

  80 040002 KDT220 Statemen yang terdapat dalam DDL :  CREATE (Database, Table, Index) a. Create Database adalah membuat Database.

  Bentuk umum : create database nama_database;

  Contoh :

   Buat file database dengan nama penjualan, maka pembuatannya adalah :

  create database penjualan;

   Buat file database dengan nama kampus, maka pembuatannya adalah :

  create database kampus;

   Buat file database dengan nama koperasi, maka pembuatannya adalah :

  create database koperasi; b. Create Table adalah membuat tabel.

  Bentuk umum : create table nama_tabel (nama_kolom tipe_data lebar_data ...); nama_table adalah nama yang diberikan di tabel baru. Nama tabel ini tidak memakai spasi dan berisi huruf. nama_kolom adalah nama yang diberikan untuk kolom baru. Tidak dapat disela dengan spasi, berisi huruf, angka dan lain–lain. tipe_data adalah jenis data yang nilainya dimasukkan dalam kolom yang telah

  ditentukan dan lebar adalah nomor spasi karakter untuk mengikuti data yang dimasukkan di dalam kolom yang telah ditentukan. Sebelum perintah tersebut dapat kita gunakan, kita lebih dahulu harus mengetahu tipe data apa saja yang dapat kita gunakan. Dalam SQL, tipe data yang menjadi standar adalah :  char(n), untuk atribut yang bernilai string dengan panjang tetap sebesar n karakter (jika banyaknya karakter yang diisikan ke atribut dengan tipe kurang dari n, maka sisanya akan diisi dengan spasi)  varchar(n), untuk atribut yang bernilai string dengan panjang fleksibel, tapi maksimal sebanyak n karakter.  int atau integer, untuk atribut yang bernilai integer 2 byte.  smallint, untuk atribut yang bernilai integer 1 byte.  numeric(p,d), untuk atribut yang bernilai pecahan fixed–point dengan panjang p digit (termasuk tanda) dan d digit untuk bilangan pecahan.  real, double precision, untuk atribut yang bernilai pecahan floating–point.  float(n), untuk atribut yang bernilai pecahan floating–point dengan presisi n digit.  date, untuk atribut yang bernilai penanggalan (terdiri atas 4 digit tahun, bulan dan tanggal).  time, untuk atribut bernilai waktu (terdiri atas jam, menit dan detik).

  Contoh :

   Buat tabel siswa, maka pembuatannya adalah :

  create table siswa

  (nim char(10) notnull, nama_mhs char (25) notnull, alm_mhs char (35) notnull, kota_mhs char(15) notnull);

   Buat tabel kuliah, maka pembuatannya adalah :

  create table kuliah

  (kode_mk char (8) notnull, nama_mk char (25) notnull, sks smallint notnull); c. Create Index adalah membuat index

  Bentuk umum : create (unique) index nama_index on nama_tabel (nama_kolom); unique adalah pilihan perincian yang dapat digunakan untuk menguatkan nilai

  data di dalam kolom nama index menjadi unik. Jika nilai kolom indeks tidak unik, indeks tidak akan dibuat.

  nama_index adalah nama index yang baru. nama_tabel adalah nama tabel yang berisi kolom index yang akan dibuat. nama_kolom (asc atau desc) adalah nama dari kolom tempat index yang akan dibuat.

  Pilihan asc atau desc menentukan apakah index petunjuk akan naik atau menurun. Defaultnya adalah Asc. Index memungkinkan suatu tabel diakses dengan urutan tertentu tanpa harus mengubah urutan fisik datanya dan dapat pula diakses secara cepat melalui index yang dibuat berdasarkan nilai field tertentu. Spesifikasi unique akan menolak key yang sama dalam file.

  Contoh :

   Buat index data mahasiswa berdasarkan nim dengan nama siswa. Nim tidak boleh sama.

  create unique index nimx on siswa (nim);

   DROP(Database, Table, Index) a. Drop Database berfungsi menghapus database.

  Bentuk umum : drop database nama_database;

  Contoh :

   Hapus database penjualan, maka penulisannya :

  drop database penjualan;

   Hapus database koperasi, maka penulisannya :

  drop database koperasi; b. Drop Table berfungsi sebagai penghapus tabel.

  Bentuk umum : drop table nama_table;

  Contoh :

   Hapus tabel matakuliah, maka penulisannya :

  drop table kuliah;

   Hapus tabel dosen, maka penulisannya :

  drop table dosen;

   Hapus tabel pegawai, maka penulisannya :

  drop table pegawai;

  c. Drop Index berfungsi sebagai penghapus table index

  Bentuk umum : drop index nama_index;

  Contoh :

   Akan menghapus table index nilai, maka penulisannya adalah :

  drop index nilaix;

   Akan menghapus table index nim, maka penulisannya adalah :

  drop index nimx;

   Alter Table Alter table kadang–kadang diperlukan untuk menambah satu atau lebih kolom di tabel yang baru di buat. Hal ini dapat dikerjakan dengan menggunakan perintah alter table di dalam SQL.

  Bentuk umum :

  Alter table nama_tabel ADD (nama_kolom jenis kolom) artinya menambahkan. MODIFY (nama_kolom jenis kolom) artinya mengubah. DROP (nama_kolom jenis_kolom) artinya menghapus.

  Contoh :

   Tambahkan kolom Jenis Kelamin (Jkel) dengan panjang 1 char pada tabel siswa, maka penulisannya :

  alter table siswa add Jkel char(1);

   Ubah panjang kolom alamat mahasiswa (alm_mhs) menjadi 45 char pada tabel siswa, maka penulisannya :

  alter table siswa modify alm_mhs char(45);

   Ubah panjang kolom nama mata kuliah (nama_mk) menjadi 30 char pada tabel kuliah, maka penulisannya :

  alter table kuliah modify nama_mk char(30);

   Hapus kolom Jkel dari tabel siswa, maka penulisannya :

  alter table siswa drop Jkel char(1);

6.5 Data Manipulation Language (DML) Perintah yang digunakan untuk mengoperasikan atau memanipulasi isi basis data.

  Statemen yang terdapat didalam DML adalah :  Insert, berfungsi sebagai menyisipkan.

  Bentuk umum : insert into nama_tabel [ (nama_kolom1, …)] values (data1, …);

  Contoh :

  Masukkan ke dalam file nilai berupa nim, kode_mk, nil_mid. Nim = 040001, kode_mk = SDT231 dan nil_mid = 65

  insert into nilai (nim, kode_mk, nil_mid) values (‘040001’,’SDT231’,65);

   Update, digunakan untuk memperbarui data dan mengubah kolom atau baris.

  Bentuk umum : update nama_tabel set nama_kolom = ekspresi where kondisi; nama_table adalah nama atau sinonim table yang akan diupdate. nama kolom adalah nilai untuk menggantikan nilai lama.

kondisi adalah klausa yang menetapkan baris–baris yang akan diupdate.

  Contoh :

  Ubahlah alamat menjadi ‘Jakarta’ untuk mahasiswa yang memiliki nim ‘040002’, maka penulisannya adalah :

  update siswa set alm_mhs=’Jakarta’ where nim=’040002’;

   Delete, digunakan untuk menghapus data.

  Bentuk umum : delete from nama_tabel where kondisi; nama_tabel adalah nama tabel yang baris–barisnya ingin dihapus. where adalah klausa yang menentukan baris–baris yang akan dihapus.

  Contoh :

  Hapus data nilai matakuliah ‘SDT231’ bagi mahasiswa yang mempunyai nim ‘040003’, maka penulisannya adalah :

  delete from nilai where nim=’040003’ and kode_mk=’SDT231’;

   Select, perintah dalam SQL yang digunakan untuk melakukan query adalah select. Perintah select ini menentukan informasi yang ingin dikeluarkan dari tabel–tabel untuk memberikan hasil tabel. Hasil yang dikeluarkan dari query SQL selalu berupa tabel relational, walaupun tabel ini biasanya sama persis di dalam tabel tersebut.

  Bentuk umum : select distinct nama_kolom from nama_tabel where kondisi group by field_name having kondisi order by field_name select adalah memilih data yang akan ditampilkan berdasarkan atribut. distinct adalah menghilangkan duplikasi. from adalah mendefinisikan seluruh tabel yang digunakan dalam query. where adalah menentukan syarat data yang akan dipilih. group by adalah mengelompokkan data yang mempunyai nilai sama.

having adalah syarat data yang dikelompokkan digunakan bersama group by.

order by adalah mengurutkan data.

  Contoh :

   Tampilkan semua data mahasiswa, maka penulisannya :

  select nim, nama_mhs, alm_mhs, kota_mhs from siswa;

  atau

  select * from siswa; Hasilnya : nim nama_mhs alm_mhs kota_mhs

  040001 Andika Jl. Kelengkeng No. 45 Semarang 040002 Rinawari Jl. Semangka No. 20 Semarang 040003 Asriana Jl. Belimbing No. 67 Purwokerto 040004 Puspitasari Jl. Rambutan No. 14 Wonosobo 040005 Budi Jl. Anggur No. 98 Salatiga 040006 Pipit Jl. Jeruk No. 71 Wonosobo

   Tampilkan matakuliah yang sksnya 3, maka penulisannya :

  select nama_mk from kuliah where sks=3; Hasilnya : nama_mk

  Komunikasi Data Sistem Basis Data

   Tampilkan semua data nilai yang nilai midnya lebih besar sama dengan 60 atau nilai finalnya lebih besar 75, maka penulisannya :

  select * from nilai where nil_mid >= 60 or nil_final >75; Hasilnya : nim kode_mk nil_mid nil_final

  040001 SDT231

  65

  80 040002 KDT220

  75

  95 040004 SBD211

  95

  85 040005 SBD211

  80

  80  Tampilkan nim, kode_mk, nil_mid dari tabel nilai dimana di antara 70 dan

  100, maka penulisannya :

  select nim, kode_mk, nil_mid from nilai where nil_mid between 70 and 100; Hasilnya : nim kode_mk nil_mid

  040002 KDT220

  75 040004 SBD211 95 040005 SBD211 80 040006 KDT220

  85  Tampilkan nama mahasiswa yang diawali dengan huruf ‘P’, maka penulisannya :

  select nama_mhs from siswa where nama_mhs like ‘P%’; Hasilnya : nama_mhs

  Puspitasari Pipit

   Tampilkan nama mahasiswa yang tidak mengandung huruf a, maka penulisannya :

  select nama_mhs from siswa where nama_mhs not like ‘%a%’; Hasilnya : nama_mhs

  Budi Pipit

   Tampilkan semua data mahasiswa secara urut dari ‘Z’ ke ‘A’, maka penulisannya :

  select * from siswa order by nama_mhs DESC; Hasilnya :

nim nama_mhs alm_mhs kota_mhs

  040002 Rinawati Jl. Semangka No. 20 Semarang 040004 Puspitasari Jl. Rambutan No. 14 Wonosobo 040006 Pipit Jl. Jeruk No. 71 Wonosobo 040005 Budi Jl. Anggur No. 98 Salatiga 040003 Asriana Jl. Belimpbing No. 67 Purwokerto 040001 Andika Jl. Kelengkeng No. 45 Semarang

   Tampilkan nama mahasiswa yang mengandung karakter keduanya huruf u, maka penulisannya :

  select nama_mhs from siswa where nama_mhs like ‘_u%’; Hasilnya : nama_mhs

  Puspitasari Budi

   Tampilkan kota mahasiswa di mana kota yang sama hanya ditampilkan satu kali saja, maka penulisannya :

  select distinct kota_mhs from siswa; Hasilnya : kota_mhs

  Semarang Purwokerto Wonosobo Salatiga

   Tampilkan nilai mid tertinggi dan terendah untuk matakuliah ‘SDT211’, maka penulisannya :

  select max(nil_mid), min(nil_mid) from nilai where kode_mk=’KDT220’; Hasilnya :

  MAX nil_mid MIN n il_mid

  85

  45

   Tampilkan rata–rata dan jumlah nilai final test matakuliah ‘KDT220’, maka penulisannya :

  select AVG (nil_final), SUM(nil_final) from nilai where kode_mk=’KDT220’; Hasilnya :

  AVG nil_final SUM nil_final

6.6 Pernyataan SQL : Selection

  1. Pengurutan menurut suatu kolom Hasil dari selection dapat diurutkan dengan menggunakan klausa ORDER BY.

  Sebagai contoh :

  select nim, nama_mhs from siswa order by nama_mhs;

  Pernyataan ini akan menghasilkan isi kolom nim serta nama_mhs dan diurutkan menurut nama_mhs, sebagai berikut :

  nim nama_mhs

  040001 Andika 040003 Asriana 040005 Budi 040006 Pipit 040004 Puspitasari 040002 Rinawati

  2. Melakukan pengelompokan Hasil dari select juga dapat dikelompokkan. Sebagai contoh, data pada tabel siswa dapat dikelompokkan menurut kota tempat tinggal. Hal ini dapat dilakukan dengan menambahkan klausa GROUP BY. Sebagai contoh : select kota_mhs from siswa

  group by kota_mhs;

  Pernyataan ini akan menghasilkan isi kolom kota_mhs, sebagai berikut :

  kota_mhs

  Semarang Semarang Purwokerto Wonosobo Salatiga Wonosobo

  3. Klausa Having Klausa HAVING disediakan untuk mendukung klausa GROUP BY.

  Kegunaannya adalah untuk menentukan kondisi bagi GRUOP BY. Kelompok yang memenuhi kondisi HAVING saja yang akan dihasilkan. Sebagai contoh :

  select kota_mhs, count(*) from siswa group by kota_mhs having count (*) > 1;

  Pernyataan ini akan menghasilkan isi kolom kota_mhs, sebagai berikut :

  kota_mhs count(*)

  Semarang

  2 Wonosobo

  2