Sistem basis data komersial menghendaki adanya sebuah bahasa query yang lebih
user-friendly. Oleh karena itu dikenal SQL sebagai bahasa query yang marketable. SQL
menggunakan kombinasi aljabar relasional & kalkulus relasional. Meskipun SQL adalah
bahasa query, namun SQL mempunyai banyak kemampuan lain disamping melakukan
query terhadap basis data. SQL mempunyai kemampuan untuk mendefinisikan struktur
data, modifikasi data dalam basis data dan menentukan konstrain sekuriti.
Select A1,A2,…..An
From r1,r2,….rn
Where P
Hasil dari query tersebut adalah sebuah relasi yang berisi sebuah atribut tunggal dengan
nama branch-name.
Bahasa query formal bersifat matematis dimana relasi adalah sebuah himpunan sehingga
tuple-tuple yang telah muncul tidak akan muncul lagi (tidak akan terjadi duplikasi tuple).
Tapi dalam prakteknya untuk menghilangkan duplikasi tuple sangat memakan waktu.
Oleh karenanya SQL memungkinkan terjadinya duplikasi tersebut. Dari contoh di atas,
maka query-nya akan mencatat setiap branch-name setiap kali branch-name tersebut
ditemukan dalam relasi loan.
Untuk kasus di atas jika diinginkan untuk menghilangkan duplikasi maka dapat
disisipkan distinct setelah select. Query di atas ditulis ulang sebagai berikut :
Akan menghasilkan sebuah relasi yang sama dengan relasi loan, kecuali bahwa atribut
amount dikalikan dengan 100. SQL-92 juga menyediakan tipe data spesial seperti tipe
date, dan memungkinkan beberapa fungsi aritmatika untuk beroperasi pada tipe-tipe ini.
Select loan-number
From loan
Where branch-name = “Perryridge” and amount >1200
SQL menggunakan konektivitas lojik and, or dan not dalam klausa where. SQL juga
memasukkan perintah between untuk menentukan apakah suatu nilai lebih kecil daripada
atau sama dengan suatu nilai lain dan lebih besar daripada atau sama dengan suatu nilai
lain.
Contoh : jika diinginkan menemukan loan-number yang jumlah pinjamannya antara
$90000 dan $100000, ditulis sebagai berikut :
Select loan-number
From loan
Where amount between 90000 and 100000
Operasi union secara otomatis akan menghilangkan duplikasi, tidak seperti klausa select.
Sehingga pada query di atas, jika Jones (seorang customer) mempunyai beberapa
rekening atau pinjaman (atau keduannya) pada bank, maka Jones hanya akan muncul
sekali. Jika duplikasi diinginkan ada maka harus ditulis union all.
Operasi except secara otomatis menghilangkan duplikasi. Jika diinginkan ada maka
ditulis : except all.
Fungsi-fungsi di atas telah tersedia. Input untuk avg dan sum haruslah bertipe numerik.
Untuk operator lainnya dapat non-numerik.
Contoh : untuk mendapatkan rata-rata saldo rekening pada cabang Perryridge
Select avg(balance)
From account
where branch-name = “Perryridge”
Jika fungsi agregasi iningn diterapkan pada kelompok himpunan tuple, maka digunakan
klausa group by. Nama atribut/kel. Atribut dalam klausa group by digunakan untuk
membentuk grup/kelompok. Artinya tuple-tuple yang mempunyai nilai yang sama pada
semua atribut dalam klausa group-by dimasukkan dalam satu grup/kelompok.
Contoh :
Jika suatu fungsi diterapkan pada grup/kelompok yang dibentuk oleh group by maka
digunakan klausa having setelah group by.
Contoh : ingin ditampilkan nama cabang yang mempunyai rata-rata saldo lebih dari
1200.
Query-nya :
Select branch-name, avg(balance)
From account
Group by branch-name having avg (balance)>1200
Fungsi agregrasi count sering digunakan untuk menghitung jumlah tuple dalam suatu
relasi. Notasi fungsi ini dalam SQL adalah count (*). Jadi untuk menentukan jumlah
tuple dalam relasi customer, ditulis :
Kedua : mencari semua customer yang merupakan peminjam dan yang muncul
dalam daftar pemegang rekening. Maka dilakukan dengan
“menyarangkan” subquery di atas dalam sebuah select luar (outer select),
menjadi :
4.6.3 Update
Dalam situasi tertentu, diinginkan untuk mengganti nilai dalam sebuah tuple tanpa
harus mengganti semua nilai dalam tuple tersebut. Untuk tujuan ini dapat digunakan
statement update.
Contoh :
- untuk menaikkan saldo para nasabah sebesar 5% ditulis query sebagai berikut :
Update account set balance = balance * 1.05
- untuk menaikkan saldo nasabah sebesar 6% bagi nasabah yang saldonya lebih
dari $10000, ditulis query sebagai berikut :
Update account set balance = balance *1.06
Where balance >10000
Dimana r adalah nama relasi, setiap AI adalah nama atribut dalam skema relasi, dan DI
adalah tipe domain dari nilai dalam domain atribut Ai. Integrity constraint yang
diperbolehkan antara lain : primary key (Aj1, Aj2,….Ajn) dan check (P)
Contoh :
Create table customer
(customer-name char(20) not null,
customer-street char(30),
customer-city char(30),
primary key (customer-name))