Anda di halaman 1dari 27

MODUL PRAKTIKUM BASIS DATA

MySQL 5.1.30
MODUL I
BAHASA SQL DDL

Materi : Database, Table, Relationship, Studi Kasus


Perpustakaan

MySQL merupakan software sistem manajemen basis data (Database


Management System) yang popular. MySQL bersifat open source.
Website MySQL www.mysql.com menyediakan informasi terkini
tentang MySQL.
Pengelolaan database dapat dilakukan dengan menggunakan
perintah-perintah SQL (Struktur Query Language), bahasa yang
khusus digunakan dalam basis data relasional.
Perintah-perintah SQL dikelompokkan menjadi :
1. DDL (Data Definition Language)
DDL berisi perintah-perintah bahasa SQL untuk pembuatan
objek database, table, index, pengaturan relationship, dan
melakukan perubahan dalam menentukan struktur
penyimpanan data.
2. DML (Data Manipulation Language)
DML berisi perintah-perintah bahasa SQL untuk melakukan
manipulasi dan pengambilan data pada suatu basis data, yang
mencerminkan operasi dasar dari suatu basis data berupa
penyisipan atau penambahan data baru (insert), penghapusan
data (delete), pengubahan data (update), dan menampilkan
data kembali dalam berbagai cara, gaya dan kebutuhan (select)
3. DCL (Data Control Language)
DCL berisi perintah-perintah bahasa SQL untuk melakukan
pengaturan terhadap keamanan dan pengontrolan basis data.
Keamanan dalam basis data diwujudkan dalam pemberian atau
pencabutan hak akses pemakai (user privileges) pada berbagai
tingkatan pengguna (admin, supervisor, user) pada akses
database, table, dan field. Sedangkan pengontrolan dalam basis
data diwujudkan dalam perintah untuk penguncian (lock) suatu
data pada suatu simpul saat suatu perubahan dilakukan,
mengesahkan (commit) atau membatalkan (rollback) suatu
perintah pemasukan data.

1
User dapat menggunakan MySQL melalui tampilan grafis (GUI) milik
Xampp. Dalam GUI user dapat menggunakan perpaduan fitur-fitur
siap pakai pada Xampp (GUI) dengan pemberian perintah SQL pada
tab SQL (SQL).

1. Memulai MySQL
Secara default, MySQL diaktifkan dengan user root, host 127.0.0.1,
dan privileges all privileges. 127.0.0.1 merupakan IP Address
localhost, dimana sistem MySQL berada. Setiap orang dapat
mengaktifkan sistem MySQL dengan status user sebagai
administrator, hal ini sangat tidak aman.

- Pastikan pada Xampp Control Panel Application running


Apache dan MySQL
- Membuka browser, dan pada bagian URL ketikkan
http://localhost/xampp/
- Klik phpMyAdmin untuk mengaktifkan MySQL

2. Membuat Database
Pemberian nama database tidak diperbolehkan menggunakan
spasi atau karakter khusus lainnya, dan tidak boleh hanya angka.

GUI Pada kotak ciptakan database baru, Masukkan nama


database
Tekan tombol Ciptakan
SQL Pada tab SQL, berikan perintah CREATE DATABASE
<nama_database>
Tekan tombol Go

3. Menghapus Database
Adakalanya database dihapus karena tidak diperlukan lagi.
Penghapusan suatu database, mengakibatkan penghapusan
semua tabel, data, dan relasi didalamnya.

GUI Pada tab Database, berikan centang untuk database yang


akan dihapus
Tekan tombol Hapus
SQL Pada tab SQL, berikan perintah DROP DATABASE
<nama_database>
Tekan tombol Go

4. Membuat Table

2
Pemberian nama table tidak diperbolehkan menggunakan spasi
atau karakter khusus lainnya. Setiap tabel mempunyai field-field
yang masing-masing harus ditentukan tipe datanya. Tipe data
menyatakan jenis data, ukuran data, dan jangkauan nilai yang
diperbolehkan. MySQL mempunyai tipe data sebagai berikut :

Tipe data untuk bilangan


Tipe Data Keterangan
TINYINT Ukuran 1 byte. Bilangan bulat terkecil, dengan
jangkauan bilangan bertanda: -128 sampai
dengan 127 dan untuk yang tidak bertanda : 0
sampai dengan 255. Bilangan tak bertanda
ditandai dengan tanda UNSIGNED
SMALLINT Ukuran 2 byte. Bilangan bulat dengan jangkauan
bilangan bertanda : -32768 sampai dengan
32767 dan untuk yang tidak bertanda : 0 sampai
dengan 65535.
MEDIUMINT Ukuran 3 byte. Bilangan bulat dengan jangkauan
bilangan bertanda : -8388608 sampai dengan
8388607 dan untuk bertanda : 0 sampai dengan
16777215
INT Ukuran 4 byte. Bilangan bulat dengan jangkauan
bilangan bertanda : - 2147483648 sampai
dengan 2147483647 dan untuk yang tidak
bertanda : 0 sampai dengan 4294967295
INTEGER Ukuran 4 byte. Sinonim dari INT
BIGINT Ukuran 8 byte. Bilangan bulat terbesar dengan
jangkauan bilangan bertanda :
-9223372036854775808 sampai dengan
9223372036854775807 dan untuk yang tidak
bertanda : 0 sampai dengan
18446744073709551615
FLOAT Ukuran 4 byte. Bilangan pecahan presisi tunggal
dengan jangkauan nilai 1.175494351E-38 (tanpa
nilai 0) sampai dengan 6.402823466E+38
DOUBLE Ukuran 8 byte. Bilangan pecahan presisi ganda
dengan jangkauan nilai 2.2250738580720E-308
(tanpa nilai 0) sampai dengan
1.7976931348623157E+308
DOUBLE Ukuran 8 byte. Bilangan pecahan berpresisi
PRECISION ganda
REAL Ukuran 8 byte. Sinonim dari DOUBLE
DECIMAL(M,D) Ukuran M byte. Bilangan pecahan. Misalnya
DECIMAL(5,2)
dapat digunakan untuk menyimpan bilangan
-99,99 sampai
dengan 99,99

3
NUMERICAL(M, Ukuran M byte. Sinonim dari DECIMAL. Misalnya
D) NUMERICAL(5,2) dapat digunakan untuk
menyimpan bilangan -99,99 sampai dengan
99,99

Tipe data untuk tanggal dan jam


Tipe Data Keterangan
DATETIME Ukuran 8 byte. Kombinasi tanggal dan jam, dengan
format YYYY-MM-DD hh:mm:ss, jangkauan dari 100-
01-01 00:00:00 sampai dengan 9999-12-31
23:59:59
DATE Ukuran 3 byte. Tanggal dengan format YYYY-MM-DD,
jangkauan dari 1000-01-01 sampai dengan 9999-
12-31
TIMESTAM Ukuran 4 byte. Kombinasi tanggal dan jam dengan
P format YYYYMMDDhhmmss, jangkauan
19700101000000 sampai dengan tahun 2037
TIME Ukuran 3 byte. Waktu dengan format hh:mm:ss,
jangkauan nilai dari -838:59:59 sampai dengan
838:59:59
YEAR Ukuran 1 byte. Data tahun antara 1901 sampai
dengan 2155

Tipe data untuk karakter dan lain-lain


Tipe Data Keterangan
CHAR(M) Ukuran M byte,1 M 255 . Data string dengan
panjang
yang tetap. CHAR(1) cukup ditulis dengan CHAR.
VARCHAR(M) Ukuran L=1 byte dengan L M dan 1 M 255 .
Data
string dengan panjang bervariasi, tergantung
datanya
TINYBLOB, L+1 byte, dengan L < 28 . Tipe TEXT atau BLOB
TINYTEXT dengan panjang maksimum 255 karakter
BLOB,TEXT L+2 byte, dengan L < 216 . Tipe TEXT atau BLOB
dengan panjang maksimum 65535 karakter
MEDIUMBLOB L+3 byte, dengan L < 224 . Tipe TEXT atau BLOB
, dengan panjang maksimum 16777215 karakter
MEDIUMTEXT
LONGBLOB, L+4 byte, dengan L < 232 . Tipe TEXT atau BLOB
LONGTEXT dengan panjang maksimum 4294967295 karakter
ENUM(nilai1 Ukuran 1 atau 2 byte tergantung jumlah
, enumerasinya (maksimum 65535 nilai)
nilai2,)
SET(nilai1, 1, 2, 3, 4 atau 8 byte, tergantung jumlah anggota
nilai2, ) himpunan (maksimum 64 anggota)

4
GUI Pilih database yang akan diaktifkan
Pada kotak ciptakan tabel baru, Masukkan nama tabel dan
jumlah field
Tekan tombol Go
Mengisi struktur tabel pada kotak isian yang tersedia
Tekan tombol Simpan
SQL Pada tab SQL, berikan perintah
USE <nama_database>
CREATE TABLE <nama_table> (
<field1> <tipedata1> [<aturanField1>],
<field2> <tipedata2> [<aturanField2>],
...
<fieldn> <tipedatan> [<aturan_fieldn>],
[<aturanTabel] )
Tekan tombol Go

aturanFieldn berisi aturan untuk field yang bersangkutan, [] bersifat


optional, dan dapat berupa :
AUTO_INCREMENT Khusus field dengan tipe integer, kenaikan 1
setiap record
PRIMARY KEY Khusus field yang akan dijadikan sebagai kunci
utama
NOT NULL Field tersebut tidak boleh kosong, harus diisi
DEFAULT <nilai> Jika tidak diisi, maka nilai default yang diberikan
UNSIGNED Bilangan tersebut tidak memiliki nilai negatif,
hanya positif
ZEROFILL Menempatkan angka 0 didepan bilangan

Sedangkan aturanTabel berisi aturan untuk tabel yang bersangkutan.


Jika aturan lebih dari satu, maka dibatasi oleh tanda koma, dapat
berupa :
PRIMARY KEY (<fields>)
FOREIGN KEY (<fields >) REFERENCES <nama_tabel> (<fields>)
[ON DELETE <aturanDelete>] [ON UPDATE <aturanUpdate>]
[ON INSERT <aturanInsert>]
Khusus untuk aturanTabel yang diberi nama_aturan, diberikan
perintah :
CONSTRAINT <nama_aturan> <aturanTabel>

Pemberian aturanTabel disamping untuk mengatur batasan


(constraint) untuk tabel yang bersangkutan seperti primary key dan

5
unique, juga mengatur atau menentukan hubungan (relations)
dengan tabel lain seperti :
- FOREING KEY yang merujuk ke primary key dari tabel lain
- <aturanDelete> dapat terdiri dari salah satu dari cascade,
restrict, ignore
Cascade : penghapusan record di parent table, akan diikuti
oleh penghapusan record-record yang terelasi pada
child table
Restrict : mencegah proses penghapusan record di parent table,
jika record tersebut berelasi dengan record-record
pada child table
Ignore : mengabaikan referensi
- <aturanUpdate> dapat terdiri dari salah satu dari cascade,
restrict, ignore
Cascade : pembaharuan record di parent table, akan diikuti
oleh pembaharuan record-record yang terelasi pada
child table
Restrict : mencegah proses pembaharuan record di parent table,
jika record tersebut berelasi dengan record-record
pada child table
Ignore : mengabaikan referensi
- <aturanInsert> dapat terdiri dari salah satu dari restrict, ignore
Restrict : mencegah proses penambahan record baru di child
table, jika data yang dimasukkan pada kolom foreing
key child table tersebut tidak terdapat pada parent
table
Ignore : mengabaikan referensi

Dalam kenyataannya, sampai dengan MySQL 5.1.30 aturan referential


(referential integrity constraint) belum berfungsi sebagaimana
mestinya. Hal ini menyebabkan user harus mengaturnya pada level
aplikasi dengan memberikan code/script yang sesuai, dan bukan pada
level database.

5. Menghapus Table
Adakalanya tabel dihapus karena tidak diperlukan lagi.
Penghapusan suatu tabel, mengakibatkan penghapusan semua
field, data, dan relasi yang melekat pada tabel tersebut.

GUI Pilih database, dimana tabel berada


Pada tab Struktur, tekan tombol Hapus () pada tabel yang
bersangkutan

6
SQL Pada tab SQL, berikan perintah DROP TABLE
<nama_tabel>
Tekan tombol Go

6. Memodifikasi Struktur Table


Melakukan perubahan pada struktur tabel dapat dilakukan dengan
menambah field baru, menghapus sebagian field lama, dan
merubah nama field, tipe data, dan nama tabel.

GUI Pilih tabel, dimana struktur tabelnya akan dimodifikasi


Pada tab Struktur, pilih field yang bersangkutan
Tekan tombol Hapus (), atau ubah () dan lakukan modifikasi
SQL Pada tab SQL, berikan perintah ALTER TABLE
<namatabel> <modifikasi>
Menambah field :
ALTER TABLE <namatabel> ADD <namafield>
<tipedatabaru>
Menghapus field :
ALTER TABLE <namatabel> DROP COLUMN <namafield>
Merubah nama field :
ALTER TABLE <namatabel> CHANGE <namafieldlama>
<namafieldbaru> <tipedata>
Merubah Tipe Data :
ALTER TABLE <namatabel> MODIFY <namafield>
<tipedatabaru>
Mengganti nama tabel :
ALTER TABLE <namatabellama> RENAME <namatabelbaru>

7. Menentukan Relationship
Pengaturan terhadap relasi antara satu tabel dengan tabel lain
yang berhubungan sangat diperlukan untuk menjaga konsistensi
record-record data antara dua buah tabel atau penerapan aturan
referential secara ketat terhadap modifikasi data sehingga dapat
meminimalkan kesalahan modifikasi yang sangat mungkin
dilakukan oleh user.

GUI Pilih tabel child table, dimana foreign key berada


Pada tab Struktur, tekan teks Tampilan relasi
Pada tampilan Link, pasangkan foreign key dari child table ke
primary key dari parent table
Tekan tombol Simpan

7
Untuk melihat visualisasi dari relationship, Pilih database, dan
tab Designer
Pengaturan relations juga dapat dilakukan langsung pada
tab Designer

SQL Pembuatan relationship terjadi saat pembuatan tabel


child table dengan perintah SQL dengan pemberian
aturanTable seperti foreing key, dan cascade, restrict, ignore
pada on delete, on update, on insert

Studi Kasus Perpustakaan Universitas :

Beberapa asumsi yang digunakan :


- Perpustakaan mempunyai anggota terdiri dari dosen, karyawan,
dan mahasiswa yang mempunyai kuota jumlah peminjaman
buku yang berbeda.
- Perpustakaan mengelola koleksi buku yang diklasifikan dalam
berbagai tipe koleksi, dan berasal dari berbagai penerbit dan
pengarang.
- Perpustakaan memberikan layanan peminjaman dan
pengembalian koleksi buku kepada para anggota.

Diberikan suatu database relationship sebagai berikut :

8
Diberikan sekumpulan perintah SQL untuk
mengimplementasikannya :

create database dbPerpus;


use dbperpus;
create table tbJenisAnggota(
idJenisAnggota smallint auto_increment not null primary key,
JenisAnggota varchar(25) not null unique,
PinjamPerHari smallint
)

create table tbAnggota(


idAnggota char(3), Nama varchar(50), idJnsAnggota smallint,
Alamat varchar(50), JK enum('P','W'), TglLahir date,
primary key(idAnggota),
foreign key(idJnsAnggota) references
tbJenisAnggota(idJenisAnggota)
on delete restrict on update cascade
)
create table tbPengarang(
idPengarang smallint auto_increment not null primary key,
Nama varchar(25) not null, Alamat varchar(25) not null,
JK enum('P','W'), TglLahir date )
create table tbTipeKoleksi(
idTipeKoleksi smallint auto_increment not null primary key,
TipeKoleksi varchar(25) not null unique, LamaPinjam smallint )
create table tbPenerbit(
idPenerbit smallint auto_increment not null primary key,
Nama varchar(25) not null, Alamat varchar(25) not null,
Telepon varchar(15) )
create table tbKoleksi(
idKoleksi char(5), Judul varchar(50), idTipeKoleksi smallint not
null,
idPengarang smallint not null, idPenerbit smallint not null,
Keterangan varchar(50), Harga int, DendaPerHari int,
primary key(idKoleksi),
constraint refKolTipe foreign key(idTipeKoleksi) references
tbTipeKoleksi(idTipeKoleksi) on delete restrict on update
cascade,

9
constraint refKolPengarang foreign key(idPengarang) references
tbPengarang(idPengarang) on delete restrict on update
cascade,
constraint refKolPenerbit foreign key(idPenerbit) references
tbPenerbit(idPenerbit) on delete restrict on update cascade
)
create table tbPeminjaman(
idPinjam smallint auto_increment not null, TglPinjam date,
idKoleksi smallint not null, idAnggota smallint not null,
TglHarusKembali date, TglKembali date, BayarDenda int,
primary key(idPinjam,TglPinjam),
constraint refPinKol foreign key(idKoleksi) references
tbKoleksi(idKoleksi)
on delete restrict on update cascade,
constraint refPinAnggota foreign key(idAnggota) references
tbAnggota(idAggota)
on delete restrict on update cascade
)

MODUL II
BAHASA SQL - DML

Materi : Insert, Update, Delete, Select, Studi Kasus


Perpustakaan

Setelah objek database, tabel, dan penentuan aturan referential


selesai dibuat, maka selanjutnya bagaimana melakukan pengisian
data, perbaikan data, penghapusan data, pengambilan dan pencarian
kembali data.

1. Memasukkan Data (Insert)


INSERT INTO <nama_tabel> [ (field1, field2, ) ] VALUES (nilai1,
nilai2, ...) | SELECT

<namaTabel> adalah tabel yang akan diisi data.


[(field1, field2, )] adalah field-field di dalam tabel yang akan diisi
data nilai sesuai urutannya. Bersifat optional, karena pengisian
data untuk semua field boleh tidak menyertakan field.
(nilai1 ,nilai2, ) adalah nilai tunggal yang akan diisikan sesuai
dengan tipe data field yang akan menampung. Jika nilai yang akan
diisikan berasal dari tabel lain atau hasil query dari tabel lain,
maka digunakan perintah SELECT dengan ketentuan jumlah kolom
dan tipe datanya sama.

10
Contoh :
INSERT INTO tbPenerbit VALUES (1, 'PT. Ilmu', 'Jl Karimata',
'59911111');
INSERT INTO tbPenerbit (IdPenerbit, Nama) VALUES (2, 'PT. Graha
Ilmu');

2. Memperbaiki Data (Update)


UPDATE <nama_tabel> SET <field1>=<nilai1>
[,<field2>=<nilai2> [,]]
[WHERE kondisi]

<nama_tabel> adalah tabel yang akan diperbaiki datanya.


<Field1> adalah nama
field dalam tabel yang akan diubah. Nilai1 adalah data yang akan
dimasukkan ke dalam field1. field2 dan nilai2 adalah nama field
dan datanya, dan seterusnya. Kondisi adalah kriteria data dalam
tabel yang akan diperbaiki.

Contoh :
UPDATE tbKoleksi SET Harga=Harga*1.1;
UPDATE tbKoleksi SET Keterangan = 'Buku TA' WHERE
idTipeKoleksi=4;

3. Menghapus Data (Delete)


DELETE FROM <nama_tabel> [WHERE kondisi]

<nama_tabel> adalah nama tabel yang akan dihapus datanya.


Kondisi adalah kriteria data dalam tabel yang akan dihapus.

Contoh :
DELETE FROM tbPeminjaman ;
DELETE FROM tbKoleksi WHERE idTipeKoleksi=4 ;

4. Manampilkan Data (Select)


SELECT [DISTINCT] <select_list>
FROM <table_source>
[WHERE <search_condition>]
[GROUP BY <group_by_expression>]
[HAVING <search_condition>]
[ORDER BY <order_expression> [ASC | DESC] ]

Perintah select merupakan perintah untuk mencari atau


menampilkan data secara keseluruhan atau sebagian sesuai
dengan kriteria baik dalam satu tabel maupun dalam banyak
tabel. Perintah ini digunakan untuk menghasilkan informasi dalam
berbagai cara, gaya dan kebutuhan dalam bentuk pelaporan.

11
Perintah select secara bertahap dapat dijelaskan sebagai berikut :

SELECT [DISTINCT] <select_list>


SELECT merupakan perintah untuk menampilkan data, [DISTINCT]
bersifat optional untuk menghilangkan duplikasi data dari hasil
query (hasil query yang sama ditampilkan sekali), <select_list>
berisi daftar field-field yang datanya akan ditampilkan. Jika lebih
dari satu field, maka dipisahkan koma.

FROM <table_source>
FROM merupakan perintah untuk menunjukkan asal dari sumber
data. <table_source> berisi daftar tabel atau view yang menjadi
sumber data. Jika melibatkan lebih dari satu tabel, maka
dipisahkan oleh koma.

[WHERE <search_condition>]
WHERE merupakan perintah untuk melakukan penyaringan data
(filter) sesuai kriteria dalam <search_condition>, dan juga
digunakan untuk merelasikan satu tabel dengan tabel lain untuk
menghasilkan query atau view yang melibatkan banyak tabel. Jika
melibatkan lebih dari satu <search_condition>, dapat
dihubungkan dengan operator AND atau OR sesuai kebutuhan.
Untuk tujuan filter, pada <search_condition> dapat digunakan (1)
operasi perbandingan (= < <= >= > <> is ), (2) operasi
pendekatan pola (LIKE) dengan simbol % menyatakan sembarang
karakter tak terhingga, dan _ menyatakan satu karakter tunggal.
(3) operasi pembandingan dengan sekumpulan nilai dengan
perintah IN dan NOT IN.

[GROUP BY <group_by_expression>]
GROUP BY digunakan untuk pengelompokan data fungsi-fungsi
agregate. Fungsi agregate merupakan fungsi yang digunakan
untuk summary atau akumulasi nilai dari setiap baris record pada
tabel atau view.
Fungsi agregate terdiri dari (1) COUNT(*) untuk mendapatkan
jumlah baris, (2) SUM(kolom) untuk mendapatkan hasil
penjumlahan kolom, (3) MAX(kolom) untuk mendapatkan nilai
tertinggi, (4) MIN(kolom) untuk mendapatkan nilai terendah, (5)
AVG(kolom) untuk mendapatkan nilai rata-rata.
<group_by_expression> berisi daftar field yang akan dijadikan
sebagai dasar dalam pengelompokan. Field-field dalam

12
<group_by_expression> harus sama dengan field-field yang
dinyatakan dalam SELECT selain fungsi aggregate.

[HAVING <search_condition>]
HAVING digunakan untuk penyaringan data (filter) yang hanya
menggunakan fungsi-fungsi aggregate.

[ORDER BY <order_expression> [ASC | DESC] ]


ORDER BY digunakan untuk pengurutan berdasarkan field-field
tertentu dalam <order_expression>. Pengurutan dilakukan menaik
(ASC) atau menurun (DESC).

Contoh : SELECT ... FROM


a. Menampilkan keseluruhan field
SELECT * FROM tbAnggota;
SELECT idAnggota, Nama, idJnsAnggota, Alamat, JK, TglLahir
FROM tbAnggota;

b. Menampilkan kolom-kolom tertentu


SELECT Nama, JK, Alamat FROM tbAnggota ; # field
tabel
SELECT 1, Nama, Alamat FROM tbAnggota ; #
konstanta
SELECT UPPER(nama), alamat FROM tbAnggota ; #
fungsi

c. Menggunakan distinct untuk menghilangkan duplikasi


SELECT DISTINCT idAnggota FROM tbPeminjaman ;

d. Mengubah judul kolom (nama alias field)


SELECT Nama AS NmAnggota, Alamat AS AlamatAnggota FROM
tbAnggota ;

e. Menyertakan nama table, alias tabel


SELECT tbAnggota.Nama, tbAnggota.Alamat FROM tbAnggota ;
SELECT A.Nama, A.Alamat FROM tbAnggota A ;
#table
SELECT AP.Nama, AP.Alamat FROM vwAnggotaPria AP ;
#view
SELECT A.Nama, J.JenisAnggota FROM tbAnggota A,
tbJenisAnggota J;
Contoh : SELECT ... FROM ... WHERE untuk Filter
a. Menggunakan operasi perbandingan

13
SELECT * FROM tbAnggota WHERE JK=P;
SELECT * FROM tbAnggota WHERE year(TglLahir) > 1985
SELECT * FROM tbAnggota WHERE JK="P" AND
month(TglLahir)=1
SELECT * FROM tbPeminjaman WHERE TglKembali IS NULL

b. Menggunakan operasi pendekatan pola


SELECT * FROM tbAnggota WHERE Nama LIKE "A%"
SELECT * FROM tbAnggota WHERE Nama LIKE "__a%"
SELECT * FROM tbKoleksi WHERE Judul LIKE "%pemrograman%"

c. Menggunakan operasi IN dan NOT IN


SELECT * FROM tbKoleksi WHERE idTipeKoleksi IN (1, 2) ;
SELECT * FROM tbAnggota WHERE idJnsAnggota NOT IN (2, 3) ;

SELECT * FROM tbAnggota WHERE idAnggota NOT IN (SELECT


DISTINCT idAnggota FROM tbPeminjaman) ;
SELECT * FROM tbKoleksi WHERE idKoleksi IN (SELECT idKoleksi
FROM tbPeminjaman WHERE TglKembali is NULL) ;

Contoh : SELECT ... FROM ... WHERE untuk Relasi


a. Mengambil informasi pada dua tabel tanpa kondisi tambahan
SELECT KL.idKoleksi, KL.Judul, PG.Nama
FROM tbKoleksi KL, tbPengarang PG
WHERE KL.idPengarang=PG.idPengarang

b. Mengambil informasi dari dua tabel atau lebih dengan kondisi


tambahan
SELECT KL.idKoleksi, KL.Judul, KL.Harga
FROM tbKoleksi KL, tbPeminjaman PJ, tbAnggota AG
WHERE PJ.idKoleksi=KL.idKoleksi AND
PJ.idAnggota=AG.idAnggota
AND AG.idAnggota = 101 ORDER BY KL.Judul

Contoh : SELECT ... FROM ... WHERE ... GROUP BY


a. Menggunakan fungsi-fungsi agregate
SELECT COUNT(*) FROM tbAnggota ;
SELECT MIN(year(TglLahir)) FROM tbAnggota ;

b. Menggunakan Group By
SELECT JK, COUNT(*) FROM tbAnggota
GROUP BY JK;

14
SELECT idPenerbit, AVG(Harga) FROM tbKoleksi
GROUP BY idPenerbit ;

SELECT idPenerbit, AVG(Harga) FROM tbKoleksi


WHERE Harga >=50000
GROUP BY idPenerbit ;

Contoh : SELECT ... FROM ... WHERE ... GROUP BY ...


HAVING
SELECT idPenerbit, COUNT(*) FROM tbKoleksi
GROUP BY idPenerbit
HAVING COUNT(*)>10

Contoh : SELECT ... FROM ... ORDER BY


SELECT * FROM tbAnggota WHERE JK=P
ORDER BY idAnggota;

5. Manampilkan Data (Select Joining)


Perintah pada Select-Joining dimaksudkan untuk menggabungkan
beberapa data pada beberapa tabel dalam berbagai gaya dan
kebutuhan. Penggabungan tersebut melibatkan semua data yang
ada pada masing-masing tabel. Oleh karenya, tidak menggunakan
WHERE, GROUP BY, HAVING, ORDER BY.

SELECT [DISTINCT] <select_list>


FROM <table_source_utama>
INNER JOIN | STRAIGHT_JOIN | LEFT JOIN | RIGHT JOIN | NATURAL
RIGHT JOIN <table_join> ON <kondisi>

Diberikan suatu data awal sebagai berikut :

tbKoleksi

tbTipeKoleksi

15
Perintah-perintah yang biasa digunakan yaitu :

Inner Join
Contoh :
SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi
FROM tbKoleksi KL
INNER JOIN tbTipeKoleksi TP ON
KL.idTipeKoleksi=TP.idTipeKoleksi

Straight Join
Identik dengan Join

Contoh
SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi
FROM tbKoleksi KL
STRAIGHT_JOIN tbTipeKoleksi TP ON
KL.idTipeKoleksi=TP.idTipeKoleksi

Left (outer) Join


Left outer join akan menampilkan tabel di sebelah kanannya
dengan NULL jika tidak terdapat hubungan dengan tabel di
sebelah kiri.

Contoh :
SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi
FROM tbKoleksi KL
LEFT JOIN tbTipeKoleksi TP ON KL.idTipeKoleksi=TP.idTipeKoleksi

16
Right (outer) Join
Kebalikan dengan left outer join, jika data di sebelah kanan
tabel tidak dapat menemukan hubungannya dengan tabel
disebelah kiri, akan ditampilkan NULL.

Contoh :
SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi
FROM tbKoleksi KL
RIGHT JOIN tbTipeKoleksi TP ON
KL.idTipeKoleksi=TP.idTipeKoleksi

Natural (Right|Left (Outer)) Join

Contoh :
SELECT KL.idKoleksi, KL.Judul, TP.idTipeKoleksi, TP.TipeKoleksi
FROM tbKoleksi KL
NATURAL RIGHT JOIN tbTipeKoleksi TP

Cross Join

Contoh :
SELECT * FROM tbKoleksi CROSS JOIN tbTipeKoleksi

17
MODUL III
BAHASA SQL DDL,DML Advance

Materi : View, Store Procedure, Trigger

Setelah objek database, tabel, aturan referential, dan manipulasi data


selesai dipahami dan dipraktekkan, maka selanjutnya mengenal fitur-
fitur pengembangan yang akan menjadikan database dapat berguna
secara optimal (powerfull).

1. Membuat View
View menyimpan sebagian data yang memenuhi kondisi atau
kriteria tertentu, sumber datanya berasal dari tabel-tabel dalam
sebuah database. Oleh karenanya, jika pada tabel-tabel sumber
terdapat modifikasi maka data-data yang ditampilkan/tersimpan
dalam view juga akan berubah mengikuti perubahan data pada
tabel-tabel sumber tersebut. Hal ini dapat dipahami karena view
tidak menyimpan data secara fisik, tetapi virtual.

Table (Physic) View (Virtual)

Filter berdasarkan

Dilakukan Query=>hasil

CREATE VIEW <nama_view> AS <ekspresi_Query>;

CREATE VIEW merupakan perintah untuk membuat view.


<nama_view> adalah nama dari view yang akan dibuat untuk
menyimpan hasil query dari tabel-tabel. <ekspresi_Query> adalah
perintah select dan kondisi query yang ditentukan sama seperti
halnya pada saat kita melakukan perintah select dengan
menggunakan kondisi (criteria) tertentu.

18
Contoh :
Membuat view dengan nama Anggota_Dosen yang menyimpan
data anggota yang mempunyai idJenisAnggota 1, perintah yang
diberikan :
CREATE VIEW Anggota_Dosen AS
SELECT * FROM tbAnggota WHERE idJenisAnggota=1;

Dengan pola dan pengertian yang sama, diberikan contoh lain :


CREATE VIEW Koleksi_Jogiyanto AS
SELECT * FROM tbKoleksi WHERE idPengarang=1;
CREATE VIEW AnggotaPria(idAnggota, Nama) AS SELECT
idAnggota, Nama
FROM tbAnggota WHERE kota='Jember';
Sebagai suatu tabel virtual, view akan memiliki kolom-kolom yang
sesuai dengan nama-nama kolom yang ada pada ekspresi query.
View merupakan alias yang berupa isi sebagian suatu tabel atau
gabungan beberapa tabel yang disederhanakan proses
pembacaannya.

Contoh :
Membuat View dengan nama KoleksiDipinjamAnggota yang
menyimpan data-data koleksi yang dipinjam oleh anggota
tertentu, diberikan perintah :
CREATE VIEW KoleksiDipinjamAnggota AS
SELECT KL.idKoleksi, KL.Judul, KL.Harga
FROM tbKoleksi KL, tbPeminjaman PJ, tbAnggota AG
WHERE PJ.idKoleksi=KL.idKoleksi AND
PJ.idAnggota=AG.idAnggota
AND AG.idAnggota = 101 ORDER BY KL.Judul

Pembuatan view seringkali berhubungan dengan masalah


keamanan agar pengakses data tidak perlu mengetahui secara
fisik ada di mana data tersebut berada dan apa criteria yang
digunakan untuk membuat view tersebut, sehingga sebagian
pemakai hanya diberikan akses hanya kepada view.

Contoh : Penggunaan
SELECT * FROM Anggota_Dosen ;
SELECT * FROM Koleksi_Jogiyanto ;
SELECT * FROM AnggotaPria ;
SELECT * FROM KoleksiDipinjamAnggota;

2. Membuat Store Procedure


Store procedure adalah pernyataan SQL yang dapat disimpan
didalam server. Sekali store prosedur tersebut dijalankan, maka

19
clien tidak perlu membuat lagi tetapi cukup memanggil store
procedure yang sudah ada.

CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES
SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Valid SQL procedure statement

Secara default, rutin dihubungkan dengan sebuah database


default. Untuk menghubungkan rutin secara eksplisit dengan
databases yang diberikan, sebutkan nama databasenya seperti
db_name.sp_name ketika menciptakan rutin.
Secara default, masing-masing parameter adalah parameter IN.
Untuk menentukan parameter lainnya, gunakan kata kunci OUT
atau INOUT sebelum nama parameter.
RETURNS hanya digunakan untuk fungsi. Hal itu mengindikasikan
tipe kembalian dari fungsi, dan fungsi harus berisi pernyataan
RETURN value.
routine_body terdiri dari pernyataan SQL yang valid. Dapat berupa
pernyataan yang sederhana seperti SELECT atau INSERT, atau
dapat berupa pernyataan yang banyak ditulis dengan
menggunakan BEGINEND.
Jika tidak disebutkan DETERMINISTIC atau NOT DETERMINISTIC
maka defaultnya
adalah NOT DETERMINISTIC.

Contoh : Pembuatan
CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)

20
RETURN CONCAT('Hello ',s,'!');

Contoh : Penggunaan
SELECT hello('ladies');

3. Merubah Store Procedure


Perintah yang digunakan untuk mengubah karakteristik dari
sebuah store prosedure.

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]


characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

4. Memanggil Store Procedure


Pernyataan CALL meminta sebuah prosedur yang telah
didefinisikan sebelumnya melalui pernyataan CREATE
PROCEDURE.

CALL sp_name([parameter[,...]])
5. Menghapus Store Procedure
Perintah yang digunakan untuk menghapus store prosedur
adalah :

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

Contoh :
DROP FUNCTION hello;

6. Membuat Trigger
Trigger adalah sebuah obyek dalam database yang berupa
prosedur yang merespon setiap kali terdapat proses modifikasi
pada tabel . Proses modifikasi dapat berupa: INSERT, UPDATE DAN
DELETE.
Trigger berisi program yang dihubungkan dengan suatu tabel yang
secara otomatis melakukan suatu tindakan ketika suatu baris di
dalam tabel dikenai operasi tertentu.

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER <trigger_name> <trigger_time> <trigger_event>
ON <tbl_name> FOR EACH ROW <trigger_stmt>

21
Trigger diasosiasikan dengan sebuah tabel yang bernama
<tbl_name>, yang harus berupa tabel permanen, tidak boleh
berupa tabel sementara atau view.
Ketika trigger diaktifkan, DEFINER memperkirakan privilege yang
berlaku untuk user tersebut.
<Trigger_time> adalah waktu aksi bagi trigger, dapat berupa
BEFORE atau AFTER yang mengindikasikan bahwa trigger aktif
sebelum atau sesudah pernyataan yang mengaktifkan trigger.
<Trigger_event> mengindikasikan macam pernyataan yang
mengaktifkan trigger, yaitu :
INSERT.
Trigger aktif ketika sebuah baris baru dimasukkan ke dalam
tabel melalui pernyataan INSERT, LOAD DATA dan REPLACE
UPDATE.
Trigger aktif ketika sebuah baris data diubah melalui
pernyataan UPDATE
DELETE.
Trigger aktif ketika sebuah baris dihapus dari tabel melalui
pernyataan
DELETE atau REPLACE.
Meskipun demikian, DROP TABLE dan TRUNCATE pada sebuah
tabel tidak mengaktifkan trigger karena tidak menggunakan
DELETE.

<trigger_stmt> adalah pernyataan yang dieksekusi ketika trigger


aktif. Jika ingin mengeksekusi multiple pernyataan digunakan
BEGIN END.
Contoh :
Membuat trigger dg nama testMasukLogHistoris untuk setiap
penambahan data pada tabel tbAnggota, dilakukan penambahan
data pada tabel LogHistoris.

Membuat tabel LogHistoris :


CREATE TABLE LogHistoris (tanggal date, proses varchar(50));
Membuat Trigger pada tabel tbAnggota :
CREATE TRIGGER testMasukLogHistoris AFTER INSERT ON
tbAnggota
FOR EACH ROW
INSERT INTO LogHistoris SET tanggal = current_date,
proses='terjadi pemasukan data baru';

Menguji trigger testMasukLogHistoris dengan memberikan


perintah INSERT pada tabel tbAnggota, maka trigger tersebut akan

22
memberikan respon dengan memasukkan data pada tabel
LogHistoris :
INSERT INTO tbAnggota VALUES ('123','adi s',1,'Jl.
Jawa','P','1976-01-10')

Contoh :
Membuat trigger dg nama testUbahLogHistoris untuk setiap
perubahan data pada tabel tbAnggota, dilakukan penambahan
data pada tabel LogUbahHistoris.

Membuat tabel LogUbahHistoris :


CREATE TABLE LogUbahHistoris (tanggal date, proses
varchar(50), idAnggota CHAR(3));
Membuat Trigger pada tabel tbAnggota :
CREATE TRIGGER testUbahLogHistoris AFTER UPDATE ON
tbAnggota
FOR EACH ROW
INSERT INTO LogUbahHistoris SET tanggal = current_date,
proses='terjadi pemasukan data baru',
idAnggota=New.idAnggota;

Menguji trigger testUbahLogHistoris dengan memberikan perintah


UPDATE pada tabel tbAnggota, maka trigger tersebut akan
memberikan respon dengan memasukkan data pada tabel
LogUbahHistoris :
UPDATE tbAnggota SET Nama='Adi Saputra ;

7. Menghapus Trigger
DROP TRIGGER [schema_name.]trigger_name

DROP TRIGGER testLogHistoris;


DROP TRIGGER testUbahLogHistoris;

23
MODUL IV
BAHASA SQL DCL

Materi : Keamanan (Grant/Revoke)

Salah satu fungsi administrasi yang harus dilakukan agar MySQL


dapat digunakan secara aman, harus ada pengaturan siapa saja yang
berhak mengakses sistem database dengan melakukan konfigurasi
bagaimana server mengelola user-user.

1. Memahami Hak Akses User (User Privileges)


Privilege adalah hak dan wewenang yang diberikan kepada
pemakai yang telah
didefinisikan untuk mengakses dan mengelola database MySQL.
Privilege dalam bahasa yang lebih sederhana adalah hak akses
atau permission.
Privilege melakukan pengaturan hak siapa saja yang boleh
mengakses data, data mana saja yang bisa dilihat oleh user.
Privilege setiap pemakai berbeda-beda, ditentukan oleh yang
berwenang dalam hal ini ditentukan oleh super user
(administrator) database.

MySQL menggunakan tabel-tabel khusus untuk melakukan


pengeloaan pemakai dan privilege-nya, yaitu :
Table db

24
Berisi informasi database mana saja yang bisa diakses oleh
setiap pemakai dan dari komputer mana
Tabel user
Digunakan untuk menyimpan data pemakai database dan data
privilege-nya pada saat melakukan akses ke dalam database.
Tabel host
Digunakan untuk menyimpan informasi komputer mana saja
yang dapat mengakses database MySQL, siapa nama
pemakainya.
Tabel tables_priv
Tabel ini menyimpan informasi privilege pemakai pada level
tabel.
Tabel column_priv
Tabel ini digunakan untuk menyimpan informasi privilege
pemakai sampai pada level kolom (field).

Saat pertama kali MySQL diaktifkan maka akan ada dua database
penting yaitu database mysql dan test. Database mysql adalah
database sistem, database yang berisi informasi yang digunakan
oleh server MySQL untuk melakukan kendali terhadap siapa saja
yang bisa mengakses server MySQL dan dari mana saja, kemudian
apa saja hak (privilege) yang diberikan oleh pemakai tersebut
pada saat telah berada dalam lingkungan MySQL.

Pada tabel user, data yang dimasukkan ke dalam tabel user:


1. Host, data alamat komputer yang bisa digunakan untuk
mengakses server database
Host merupakan alamat komputer atau nama komputer yang
digunakan untuk
mengakses server MySQL. Alamat komputer didefinisikan
dengan menggunakan nomor IP atau nama server. Alamat IP
dapat juga dinyatakan dengan tanda % untuk menyatakan
semua nomor IP.
2. User, nama pemakai
Dalam field user disimpan nama pemakai atau userid sebagai
identifikasi pemakai (user identification, atau userid), pengenal
yang digunakan untuk melakukan otentikasi untuk mengakses
ke dalam server MySQL.
3. Password, password untuk pemakai
Password adalah kata sandi yang digunakan oleh setiap
pemakai untuk memverifikasi bahwa userid yang dimasukkan
tadi memang sah milik pemakai tersebut.
4. Privilege-privilege untuk pemakai tersebut di dalam mengakses
dan mengelola data dalam server MySQL.

25
Field lain dari tabel user ini adalah informasi privilege yang
diberikan kepada host untuk mengakses database yang
didefinisikan.

Berikut ini adalah daftar field yang menunjukkan privilege :


Nama Kegunaan
Field
Select_priv Digunakan untuk mendefinisikan hak untuk
melakukan query yang menggunakan perintah
Select
Insert_priv Mendefinisikan hak untuk dapat melakukan
penambahan data
Update_pri Mendefinisikan hak untuk dapat melakukan
v perubahan data
Delete_pri Mendefinisikan hak untuk dapat melakukan
v penghapusan data
Create_pri Mendefinisikan hak agar dapat membuat
v tabel/database baru
Drop_priv Mendefinisikan hak agar dapat menghapus
tabel/database
Grant_priv Hak untuk dapat memberikan privilege kepada
pemakai lain. Privilege ini sebaiknya diberikan
kepada pemakai dengan level administrator
Index_priv Hak untuk dapat melakukan pembuatan,
perubahan, dan penghapusan index
Alter_priv Hak untuk mengubah struktur tabel
Reload_pri Mendefinisikan apakah pemakai berhak
v mengaktifkan definisi privilege yang diacu
database secara lansung atau tidak. Menentukan
pemakai boleh memberikan perintah FLUSH
PRIVELEGES atau tidak
Shutdown_ Menentukan apakah pemakai boleh mematikan
priv server atau tidak
Process_pr Mendefinisikan agar pemakai dapat mematikan
iv proses-proses yang dibuat oleh MySQL
File_priv Mendefinisikan apakah pemakai dapat melakukan
operasi file di dalam server atau tidak, seperti
perintah untuk melakukan LOAD DATA INFILE
Field-field untuk privilege diisi dengan data Y atau N. jika diisi
Y maka pada
record tersebut diijinkan untuk memiliki privilege tersebut,
sebaliknya jika diisi N maka record tersebut tidak memiliki
privilege.

Pada tabel db, Struktur tabel db hampir sama dengan tabel user,
hanya saja tabel db memiliki tambahan field yaitu field db. Field db
digunakan untuk mendefinisikan nama tabel yang dapat diakses
oleh setiap pemakai, dari host mana dan apa saja privilegenya

26
Pada tabel host, Tabel ini digunakan untuk memudahkan
pendefinisian akses kepada suatu database dari suatu host,
sehingga entri dalam tabel db tidak perlu mendefinisikan nama
host, cukup pada tabel host saja didefinisikan, field host pada tabel
db dapat dikosongkan.
Tabel tables_priv, mendefinisikan privilege lebih detail untuk
seorang pemakai pada level tabel mana saja yang diberikan
privilegenya kepada pemakai tersebut dan privilege apa yang
dimiliki.
Host, adalah nama host untuk mengakses database
Db, adalah nama database yang didefinisikan.
Use, mendefinisikan pemakai yang diberi privelege tabel yang
didefinisikan.
Table_name, mendefinisikan nama tabel yang didefinisikan
Grantor, adalah pemakai yang memberikan privilege kepada
pemakai
Timestamp, mencatat kapan (waktu) perubahan dilakukan.
Pada tabel columns_priv, Isi tabel columns_priv seperti halnya
tables_priv, digunakan untuk lebih merinci lagi privilege yang
dimiliki oleh seseorang pemakai sampai dengan level kolom dari
suatu tabel.

27

Anda mungkin juga menyukai