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, 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.
D
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,
BAB
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 :
selectdistinct 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 :
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
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 :
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)
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.
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 :
Tabel siswa (nim menunjukkan primary key dari tabel siswa)
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
Tabel kuliah (kode_mk menunjukkan primary key dari tabel kuliah)
kode_mk nama_mk sks
SDT231 Struktur Data 2
KDT220 Komunikasi Data 3
SBD211 Sistem Basis Data 3
Tabel nilai (menunjukkan matakuliah berhubungan dengan nilai mahasiswa)
nim kode_mk nil_mid nil_final
040001 SDT231 65 80
040002 KDT220 75 95
040003 SDT231 10 45
040004 SBD211 95 85
040005 SBD211 80 80
040006 KDT220 85 5
Statemen yang terdapat dalam DDL :
CREATE (Database, Table, Index)
a. Create Database adalah membuat Database. Bentuk umum :
createdatabase nama_database; Contoh :
Buat file database dengan nama penjualan, maka pembuatannya adalah :
createdatabase penjualan;
Buat file database dengan nama kampus, maka pembuatannya adalah :
createdatabase kampus;
Buat file database dengan nama koperasi, maka pembuatannya adalah :
createdatabase koperasi; b. Create Table adalah membuat tabel.
Bentuk umum :
createtable 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).
Contoh :
Buat tabel siswa, maka pembuatannya adalah :
createtable 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 :
dropdatabase nama_database; Contoh :
Hapus database penjualan, maka penulisannya :
dropdatabase penjualan;
Hapus database koperasi, maka penulisannya :
b. Drop Table berfungsi sebagai penghapus tabel. Bentuk umum :
droptable nama_table; Contoh :
Hapus tabel matakuliah, maka penulisannya :
droptable kuliah;
Hapus tabel dosen, maka penulisannya :
droptable dosen;
Hapus tabel pegawai, maka penulisannya :
droptable 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 :
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 :
insertinto 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 :
deletefrom nilai
where nim=’040003’ and kode_mk=’SDT231’;
Select, perintah dalam SQL yang digunakan untuk melakukan query adalah
Bentuk umum :
selectdistinct nama_kolom
from nama_tabel
where kondisi
groupby 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
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
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 :
selectdistinct 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
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
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