SQL
DAN DELPHI
Pengenalan SQL
SQL pertama kali diterapkan
pada sistem R (sebuah proyek riset pada laboratorium riset San Jose, IBM). Kini
SQL juga dijumpai pada berbagai platform, dari mikrokomputer hingga mainframe.
SQL dapat digunakan baik secara berdiri sendiri maupun dilekatkan pada
bahasa-bahasa lain seperti C dan Delphi. SQL juga telah menjadi bagian dari
sejumlah DBMS, seperti Oracle, Sybase, MySQL dan Informix.
Pernyataan SQL dapat dikelompokkan menjadi 3
kelompok, yaitu : DDL, DML dan DCL.
1.
DDL (Data Definition Language)
DDL merupakan kelompok perintah yang
berfungsi untuk mendefinisikan atribut-atribut basis data, tabel,
atribut(kolom), batasan-batasan terhadap suatu atribut, serta hubungan antar
tabel. Yang termasuk dalam kelompok DDL ini adalah CREATE, ALTER, dan DROP.
a.
Membuat Database
Syntax : CREATE DATABASE
namadatabase;
namadatabase tidak boleh mengandung spasi dan tidak
boleh memiliki nama yang sama antar database. contoh :
CREATE DATABASE
toko_buku;
Syntax tambahan : untuk menampilkan daftar
nama database yang ada pada mysql menggunakan perintah :
SHOW DATABASES;
b.
Menghapus Database
Syntax : DROP DATABASE
namadatabase;
Database yang akan dihapus sesuai dengan namadatabase. Contoh :
DROP DATABASE
toko_buku;
c.
Membuat Tabel
Sebelum membuat suatu tabel, terlebih
dahulu harus memilih salah satu database sebagai database aktif yang akan
digunakan untuk menyimpan tabel-tabel dengan menggunakan syntax : USE
namadatabase;
Contoh :
USE toko_buku;
Syntax membuat table :
CREATE TABLE
namatabel
(
Field1
TipeData1,
Field2 TipeData2
);
namatabel tidak boleh mengandung spasi (space). Field1 dan TipeData1 merupakan nama kolom pertama dan tipe
data untuk kolom pertama. Jika ingin membuat tabel dengan kolom lebih dari
satu, maka setelah pendefinisian tipe data sebelumnya diberikan tanda koma (,).
Contoh :
CREATE TABLE
barang (
kode_brg char
(5) not null primary key,
nama_brg char
(20),
jumlah int
)
Syntax tambahan :
Untuk menampilkan daftar nama tabel yang
ada pada database yang sedang aktif/digunakan :
SHOW TABLES;
Untuk menampilkan deskripsi tabel
syntaxnya adalah :
DESC namatabel;
Contoh : DESC barang;
d.
Menghapus Tabel
Syntax : DROP TABLE namatabel;
Tabel yang akan dihapus sesuai dengan namatabel, contoh :
DROP TABLE
barang;
Jika menghapus anda harus yakin dahulu,
karena jika sudah dihapus tidak bisa dikembalikan.
e.
Mendefinisikan null/not null
Syntax :
CREATE TABLE
namatabel
(
Field1 TipeData1
NOT NULL,
Field2 TipeData2
);
f.
Mendefinisikan Nilai Default
Nilai default adalah nilai yang otomatis
diberikan oleh sistem untuk suatu kolom ketika ada penambahan baris baru,
sementara nilai pada kolom tersebut tidak diisi oleh pengguna. Syntax :
CREATE TABLE
namatabel
(
Field1
TipeData1,
Field2 TipeData2
DEFAULT nilai
);
nilai adalah nilai default dari kolom
tersebut.
g.
Mendefinisikan Primary Key Pada Tabel
Terdapat tiga cara untuk mendefinisikan
primary key. Berikut ini adalah Syntax mendefinisikan primary key untuk Field1
CREATE TABLE
namatabel
(
Field1 TipeData1
NOT NULL PRIMARY KEY,
Field2 TipeData2
);
Atau
CREATE TABLE
namatabel
(
Field1
TipeData1,
Field2
TipeData2,
PRIMARY
KEY(Field1)
);
atau
ALTER TABLE
namatabel ADD CONSTRAINT namaconstraint PRIMARY KEY (namakolom);
h.
Menghapus Primary Key Pada Tabel
Perintah :
Cara 1 : Jika primary key dibuat dengan
menggunakan alter table :
ALTER TABLE
namatabel DROP CONSTRAINT namaconstraint;
Cara 2 : Jika primary key dibuat melalui
create table :
ALTER TABLE
namatabel DROP PRIMARY KEY;
i.
Menambah Kolom Baru Pada Tabel
Syntax :
ALTER TABLE
namatabel ADD fieldbaru tipe;
namatabel adalah nama tabel yang akan ditambah
fieldnya. Fieldbaru adalah nama
kolom yang akan ditambahkan, tipe
adalah tipe data dari kolom yang akan ditambahkan.
j.
Mengubah Tipe Data atau Lebar Kolom Pada Tabel
Perintah :
ALTER TABLE
namatabel MODIFY COLUMN namafield tipe(size)
namatabel adalah nama tabel yang akan diubah tipe
data atau lebar kolomnya. Field
adalah kolom yang akan diubah tipe data atau lebarnya. Tipe adalah tipe data baru atau tipe data lama
dengan lebar kolom yang berbeda.
k.
Mengubah Nama Kolom
Syntax :
ALTER TABLE
namatabel CHANGE COLUMN namalamakolom namabarukolom tipedatanya;
namatabel adalah nama tabel yang akan diubah nama
kolomnya, namalamakolom adalah
kolom yang akan diganti namanya, namabarukolom adalah nama baru kolom, tipedatanya adalah tipe data dari kolom tersebut.
l.
Menghapus Kolom Pada Tabel
Syntax :
ALTER TABLE
namatabel DROP COLUMN namakolom;
m.
Mendefinisikan Foreign Key Pada Tabel
Untuk mendefinisikan foreign key, maka
harus dipastikan bahwa tabel dan atribut yang dirujuk (tabel induk dari foreign
key) sudah didefinisikan terlebih dahulu. Syntax :
CREATE TABLE namatabel
(
Field1 TipeData1,
Field2 TipeData2,
FOREIGN KEY (Field2)
REFERENCES namatabelinduk
(namakolominduk)ON
UPDATE CASCADE
ON DELETE NO
ACTION
)
atau
ALTER TABLE
namatabel ADD CONSTRAINT namaconstraint FOREIGN KEY (namakolom) REFERENCES
namatabelinduk (namakolominduk) ON UPDATE CASCADE ON DELETE NO ACTION;
n.
Menghapus Foreign Key
Perintah :
ALTER TABLE
namatabel DROP FOREIGN KEY namaconstraint;
2.
DML (Data Manipulation Language)
DML adalah kelompok perintah yang
berfungsi untuk memanipulasi data dalam basis data, misalnya untuk pengambilan,
penyisipan, pengubahan dan penghapusan data. Perintah yang termasuk dalah
kategori DML adalah : INSERT, DELETE, UPDATE dan SELECT.
a.
INSERT
Perintah INSERT digunakan untuk
menambahkan baris pada suatu tabel.
Terdapat dua cara untuk menambah baris,
yaitu :
Cara 1 : Menambah baris dengan mengisi
data pada setiap kolom :
INSERT INTO
namatabel VALUES (nilai1,nilai2,nilai-n);
Cara 2 : Menambah baris dengan hanya
mengisi data pada kolom tertentu :
INSERT INTO namatabel
(kolom1,kolom2,kolom-n) VALUES (nilai1,nilai2,nilai-n);
Keterangan :
Jika data bertipe string, date atau time
(contoh : action, horor, 2007-11-10) maka pemberian nilainya diapit dengan
tanda petik tunggal (‘horor’) atau petik ganda (“horor”). Jika data bertipe
numerik (2500, 400) maka pemberian nilainya tidak diapit tanda petik tunggal
maupun ganda.
b.
DELETE
Perintah DELETE digunakan untuk menghapus
satu baris, baris dengan kondisi tertentu atau seluruh baris.
Syntax : DELETE FROM namatabel
[WHERE kondisi];
Perintah dalam tanda [] bersifat opsional
untuk menghapus suatu baris dengan suatu kondisi tertentu.
Contoh 1 : jika ingin menghapus seluruh
baris pada tabel jenisfilm :
DELETE FROM
jenisfilm
Contoh 2 : jika ingin menghapus baris yang
memiliki nilai 3000 pada kolom harga pada tabel jenisfilm maka perintahnya
sebagai berikut :
DELETE FROM
jenisfilm where harga=3000;
Contoh 3 : jika ingin menghapus baris yang
memiliki nilai drama pada kolom jenis pada tabel jenisfilm maka perintahnya
sebagai berikut :
DELETE FROM
jenisfilm where jenis=’drama’;
c.
UPDATE
Perintah UPDATE digunakan untuk mengubah
isi data pada satu atau beberapa kolom pada suatu tabel.
Syntax :
UPDATE namatabel
SET kolom1 = nilai1, kolom2 = nilai2 [WHERE kondisi];
Perintah dalam tanda [] bersifat opsional
untuk mengubah suatu baris dengan suatu kondisi tertentu. Berikut ini perintah
untuk mengubah baris pada tabel jenisfilm dengan data sebagai berikut :
Contoh 1 : mengubah semua nilai pada kolom
harga menjadi 2000 :
UPDATE jenisfilm
SET harga=2000;
Contoh 2 : mengubah nilai pada kolom harga
menjadi 2500 dimana nilai pada kolom jenis adalah action :
UPDATE jenisfilm
SET harga=2000 where jenis=’action’;
d.
SELECT
Perintah SELECT digunakan untuk
menampilkan isi dari suatu tabel yang dapat dihubungkan dengan tabel yang
lainnya.
1)
Menampilkan
data untuk semua kolom menggunakan asterisk (*)
Syntax : SELECT * FROM namatabel;
Berikut ini perintah untuk menampilkan
semua data pada tabel film :
SELECT * FROM
film;
2)
Menampilkan
data untuk kolom tertentu
Syntax : SELECT
kolom1,kolom2,kolom-n FROM namatabel;
Berikut ini perintah untuk menampilkan
data pada tabel film dengan kolom yang ditampilkan adalah kolom jenis :
SELECT jenis
FROM film;
3)
Menampilkan
data dengan kondisi data tertentu dengan klausa WHERE
Syntax : SELECT * FROM namatabel
WHERE kondisi;
Berikut ini perintah untuk menampilkan
data pada tabel film dimana nilai pada kolom jenis adalah drama :
SELECT * FROM
film WHERE jenis=’drama’;
Beberapa operator perbandingan yang dapat
digunakan pada klausa WHERE selain “=”
adalah : > (lebih dari), < (kurang dari), < > (tidak sama dengan),
>= (lebih dari atau sama dengan), <= (kurang dari atau sama dengan).
Adapun operator lain, yaitu : AND, OR, NOT, BETWEEN-AND, IN dan LIKE.
Contoh 1 : perintah untuk menampilkan data
pada tabel film dimana harga berkisar dari 1000 hingga 3000 :
SELECT * FROM
film WHERE harga>=1000 and harga<=3000;
Atau
SELECT * FROM
film WHERE harga between 1000 and 3000;
Contoh 2 : perintah untuk menampilkan data
pada tabel film dimana nilai harga sama dengan 1000 atau 3000 :
SELECT * FROM
film WHERE harga=1000 or harga=3000;
atau
SELECT * FROM
film WHERE harga in (1000,3000);
Contoh 3 : perintah untuk menampilkan data
pada tabel film dimana nilai pada kolom jenis tidak sama dengan action :
SELECT * FROM
film WHERE not jenis=’action’;
Atau
SELECT * FROM
film WHERE jenis<>’action’;
Contoh 4 : Isi tabel film
perintah untuk menampilkan data pada tabel
film dimana data pada kolom tertentu diawali dengan nilai tertentu, misalnya
pada kolom judul dimana diawali dengan karakter ‘S’ :
SELECT * FROM
film WHERE judul like ‘S%’;
4)
Memberikan
nama lain pada kolom
Syntax : SELECT namakolomlama AS
namakolombaru FROM namatabel;
5)
Menggunakan
alias untuk nama tabel
Syntax : SELECT nmalias.jenis,
nmalias.harga FROM namatabel nmalias;
Berikut ini perintah untuk memberikan
alias pada tabel film :
SELECT j.jenis,
j.harga FROM film j;
6)
Menampilkan
data lebih dari dua tabel
Syntax :
SELECT * from
namatabel1,namatabel2,namatabel-n;
7)
Nested
Queries / Subquery (IN, NOT IN, EXISTS, NOT EXISTS)
Subquery berarti query di dalam query.
Dengan menggunakan subquery, hasil dari query akan menjadi bagian
dari query di atasnya.
Subquery terletak di dalam klausa WHERE atau HAVING. Pada
klausa WHERE, subquery digunakan untuk memilih baris-baris tertentu yang
kemudian digunakan oleh query. Sedangkan pada klausa HAVING, subquery
digunakan untuk memilih kelompok baris yang kemudian digunakan oleh query.
Contoh 1 : perintah untuk menampilkan data
pada tabel jenisfilm yang mana data pada kolom jenis-nya tercantum pada tabel
film menggunakan IN :
SELECT * FROM
jenisfilm where jenis in (select jenis from film);
atau menggunakan EXISTS
SELECT * FROM
jenisfilm where exists (select *from film where jenisfilm.jenis=film.jenis);
Pada contoh di atas :
SELECT jenis FROM film
disebut subquery, sedangkan :
SELECT * FROM
jenisfilm
berkedudukan sebagai query.
Perhatikan, terdapat data jenis dan harga pada tabel jenisfilm yang tidak
ditampilkan. Hal ini disebabkan data pada kolom jenis tidak terdapat pada kolom
jenis di tabel film.
Contoh 2 : perintah untuk menampilkan data
pada tabel jenisfilm yang mana data pada kolom jenis-nya tidak tercantum pada
tabel film menggunakan NOT IN :
SELECT * FROM
jenisfilm where jenis not in (select jenis from film);
atau menggunakan NOT EXISTS
SELECT * FROM
jenisfilm where not exists (select *from film where
jenisfilm.jenis=film.jenis);
8)
Operator
comparison ANY dan ALL
a.
Operator
ANY digunakan berkaitan dengan subquery. Operator ini menghasilkan TRUE
(benar) jika paling tidak salah satu perbandingan dengan hasil subquery
menghasilkan nilai TRUE. Ilustrasinya :
Gaji
> ANY (S)
Jika subquery S menghasilkan G1,
G2, ..., Gn, maka kondisi di atas identik dengan :
(gaji
> G1) OR (gaji > G2) OR ... OR (gaji > Gn)
Contoh : perintah untuk menampilkan semua
data jenisfilm yang harganya bukan yang terkecil :
SELECT * FROM
jenisfilm where harga > ANY (select harga from jenisfilm);
b.
Operator
ALL digunakan untuk melakukan perbandingan dengan subquery. Kondisi
dengan ALL menghasilkan nilai TRUE (benar) jika subquery tidak
menghasilkan apapun atau jika perbandingan menghasilkan TRUE untuk setiap nilai
query terhadap hasil subquery.
Contoh : perintah untuk menampilkan data
jenisfilm yang harganya paling tinggi :
SELECT * FROM
jenisfilm where harga >= ALL (select harga from jenisfilm);
9)
Aggregate
Functions (COUNT, SUM, AVG, MIN, MAX)
a.
COUNT
Perintah yang digunakan untuk menghitung
jumlah baris suatu kolom pada tabel. Contoh : perintah untuk menghitung jumlah
baris kolom jenis pada tabel jenisfilm :
SELECT count(jenis) from jenisfilm);
b.
SUM
Perintah yang digunakan untuk menghitung
jumlah nilai suatu kolom pada tabel. Contoh : perintah untuk menghitung jumlah
nilai kolom harga pada tabel jenisfilm :
SELECT sum(harga) from jenisfilm);
c.
AVG
Perintah yang digunakan untuk menghitung
rata-rata dari nilai suatu kolom pada tabel. Contoh : perintah untuk menghitung
rata-rata dari kolom harga pada tabel jenisfilm :
SELECT avg(harga) from jenisfilm);
d.
MIN
Perintah yang digunakan untuk menampilkan
nilai terkecil dari suatu kolom pada tabel. Contoh : perintah untuk menampilkan
nilai terkecil dari kolom harga pada tabel jenisfilm :
SELECT min(harga) from jenisfilm);
e.
MAX
Perintah yang digunakan untuk menampilkan
nilai terbesar dari suatu kolom pada tabel. Contoh : perintah untuk menampilkan
nilai terbesar dari kolom harga pada tabel jenisfilm:
SELECT max(harga) from jenisfilm);
10)
SQL
dengan GROUP BY dan HAVING
Klausa GROUP BY digunakan untuk melakukan
pengelompokan data. Sebagai contoh, terdapat tabel film akan ditampilkan hanya
kolom jenis dan digabungkan dengan SUM(jml_film) yang dikelompokkan berdasarkan
kolom jenis pada tabel film :
Select
jenis,sum(jml_film) from film group by jenis;
Klausa HAVING digunakan untuk menentukan
kondisi bagi klausa GROUP BY. Kelompok yang memenuhi HAVING saja yang akan
dihasilkan. Contoh : perintah untuk menampilkan data hanya kolom jenis yang
dikelompokkan berdasarkan kolom jenis, dimana jumlah film berdasarkan
kelompoknya harus lebih besar dari satu pada tabel film :
Select jenis
from film group by jenis having count(kode_film) > 1;
11)
ORDER
BY
Klausa ORDER BY digunakan untuk
mengurutkan data berdasarkan kolom tertentu sesuai dengan tipe data yang dimiliki.
Contoh : perintah untuk mengurutkan data film berdasarkan kolom judul :
Select * from
film order by judul;
atau tambahkan ASC untuk pengurutan secara
ascending (menaik)
Select * from
film order by judul asc;
atau tambahkan DESC untuk pengurutan secara
descending (menurun)
Select * from
film order by judul desc;
12)
UNION,
INTERSECT dan EXCEPT
a.
UNION
UNION merupakan operator yang digunakan
untuk menggabungkan hasil query, dengan ketentuan jumlah, nama dan tipe
kolom dari masing-masing tabel yang akan ditampilkan datanya harus sama.
Berikut ini perintah untuk memperoleh data pada tabel film dimana jenisnya
action dan horor :
Select
jenis,judul from film where jenis=’action’ union select jenis,judul from film
where jenis=’horor’;
Perintah di atas identik dengan :
Select
jenis,judul from film where jenis=’action’ or jenis=’horor’;
Namun tidak semua penggabungan dapat
dilakukan dengan OR, yaitu jika bekerja pada dua tabel atau lebih.
b.
INTERSECT
INTERSECT merupakan operator yang
digunakan untuk memperoleh data dari dua buah query dimana data yang
ditampilkan adalah yang memenuhi kedua query tersebut dengan ketentuan
jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan
datanya harus sama.
Syntax : SELECT * FROM namatabel1
INTERSECT SELECT * FROM namatabel2
Pada MySQL tidak terdapat operator
INTERSECT namun sebagai gantinya dapat menggunakan operator IN seperti contoh 1
pada bagian Nested Queries.
c.
EXCEPT
/ Set Difference
EXCEPT merupakan operator yang digunakan
untuk memperoleh data dari dua buah query dimana data yang ditampilkan
adalah data yang ada pada hasil query 1 dan tidak terdapat pada data
dari hasil query 2 dengan ketentuan jumlah, nama dan tipe kolom dari
masing-masing tabel yang akan ditampilkan datanya harus sama.
Syntax : SELECT * FROM namatabel1
EXCEPT SELECT * FROM namatabel2
Pada MySQL tidak terdapat operator EXCEPT
namun sebagai gantinya dapat menggunakan operator NOT IN seperti contoh 2 pada
bagian Nested Queries.
13)
Operasi
Join
Join merupakan operasi yang digunakan
untuk menggabungkan dua tabel atau lebih dengan hasil berupa gabungan dari
kolom-kolom yang berasal dari tabel-tabel tersebut. Pada join sederhana,
tabel-tabel digabungkan dan didasarkan pada pencocokan antara kolom pada tabel
yang berbeda. Berikut ini perintah untuk menampilkan kolom judul dari tabel
film dan kolom harga dari tabel jenisfilm :
Select
judul,harga from film,jenisfilm where jenisfilm.jenis=film.jenis;
Pada contoh di atas, jenisfilm.jenis=film.jenis
merupakan kondisi untuk
mencocokkan data antara kolom jenis milik tabel jenisfilm dan film.
a.
Inner
Join
Inner join digunakan untuk menampilkan
data dari dua tabel yang berisi data sesuai dengan syarat dibelakang on (tidak
boleh null), dengan kata lain semua data dari tabel kiri mendapat pasangan data
dari tabel sebelah kanan. Berikut ini perintah untuk menampilkan data dari
tabel jenisfilm dan film dengan syarat berdasarkan kolom jenis :
Select * from
jenisfilm inner join film on (jenisfilm.jenis=film.jenis);
b.
Left
Join
Left join digunakan untuk menampilkan
semua data dari tabel sebelah kiri perintah left join beserta pasangannya dari
tabel sebelah kanan. Meskipun terdapat data dari sebelah kiri tidak memiliki
pasangan, tetap akan ditampilkan dengan pasangannya berupa nilai NULL.
Select * from
jenisfilm left join film on (jenisfilm.jenis=film.jenis);
c.
Right
Join
Right join digunakan untuk menampilkan
semua data dari tabel sebelah kanan perintah right join beserta pasangannya
dari tabel sebelah kiri. Meskipun terdapat data dari sebelah kanan tidak
memiliki pasangan, tetap akan ditampilkan dengan pasangannya berupa nilai NULL.
Select * from
jenisfilm right join film on (jenisfilm.jenis=film.jenis);
d.
Natural
Join
Natural join digunakan untuk menampilkan
semua data dari dua tabel dimana jika terdapat kolom yang sama, maka yang akan
ditampilkan hanya salah satunya saja, yaitu kolom dari tabel sebelah kiri
perintah natural join.
Select * from jenisfilm natural join film;
1)
Natural
Left Join
Natural left join digunakan untuk
menampilkan semua data dari tabel sebelah kiri perintah natural left join
beserta pasangannya dari tabel sebelah kanan. Meskipun terdapat data dari
sebelah kiri tidak memiliki pasangan, tetap akan ditampilkan dengan pasangannya
berupa nilai NULL.
Select * from jenisfilm natural left join film;
2)
Natural
Right Join
Natural right join digunakan untuk
menampilkan semua data dari tabel sebelah kanan perintah natural right join
beserta pasangannya dari tabel sebelah kiri. Meskipun terdapat data dari
sebelah kanan tidak memiliki pasangan, tetap akan ditampilkan dengan
pasangannya berupa nilai NULL.
Select * from jenisfilm natural right join film;
Join The Community