Anda di halaman 1dari 205

LAPORAN LENGKAP

BASIS DATA

OLEH:
ABD WAHID A. ANTU

521 414 019

LABORATORIUM KOMPUTER KONTROL

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK

UNIVERSITAS NEGERI GORONTALO

2018
KATA PENGANTAR

Dengan mengucapkan puji syukur atas kehadirat Tuhan yang Maha Esa, atas

segala kebesaran dan limpahan nikmat yang diberikannya, sehingga penulis dapat

menyelesaikan Laporan Praktikum “BASIS DATA”

Laporan praktikum ini di tulis untuk memenuhi mata kuliah Basis Data di

Universitas Negeri Gorontalo Fakultas Teknik Jurusan Elektro.

Dalam penyusunan laporan praktikum ini, penulis menyadari pengetahuan dan

pengalaman penulis masih sangat terbatas. Oleh karena itu, penulis memohon kepada

Bapak/Ibu dosen khusunya, umumnya para pembaca apabila menemukan kesalahan

atau kekurangan dalam karya tulis ini, baik dari segi bahasanya maupun isinya, penulis

mengharapkan kritik dan saran yang bersifat membangun kepada semua pembaca

demi lebih baiknya karya-karya tulis yang akan datang.

i
DAFTAR ISI

KATA PENGANTAR ............................................................................................................. i


DAFTAR ISI........................................................................................................................... ii
MODUL I OBJEK DATABASE .......................................................................................... 1
A. TUJUAN ....................................................................................................................... 1
B. PETUNJUK .................................................................................................................. 1
C. DASAR TEORI ............................................................................................................ 1
D. HASIL LATIHAN......................................................................................................... 2
E. TUGAS PRAKTIKUM ................................................................................................ 4
MODUL II SQL ..................................................................................................................... 7
A. TUJUAN ....................................................................................................................... 7
B. PETUNJUK .................................................................................................................. 7
C. DASAR TEORI ............................................................................................................ 7
D. HASIL LATIHAN...................................................................................................... 10
E. TUGAS PRAKTIKUM .............................................................................................. 25
MODUL III FUNGSI AGREGAT ..................................................................................... 27
A. TUJUAN ..................................................................................................................... 27
B. PETUNJUK ................................................................................................................ 27
C. DASAR TEORI .......................................................................................................... 27
D. LATIHAN ................................................................................................................... 28
E. TUGAS PRAKTIKUM .............................................................................................. 46
MODUL IV PENGENALAN MYSQL .............................................................................. 51
A. TUJUAN ..................................................................................................................... 51
B. PETUNJUK ................................................................................................................ 51
C. DASAR TEORI .......................................................................................................... 51
D. HASIL LATIHAN....................................................................................................... 53
E. TUGAS PRAKTIKUM .............................................................................................. 62
MODUL V RELASI DAN JOIN ........................................................................................ 65
A. TUJUAN ..................................................................................................................... 65
B. PETUNJUK ................................................................................................................ 65
C. DASAR TEORI .......................................................................................................... 65
D. LATIHAN ................................................................................................................... 68

ii
E. TUGAS PRAKTIKUM .............................................................................................. 79
MODUL VI SUBQUERY .................................................................................................... 88
A. TUJUAN ..................................................................................................................... 88
B. PETUNJUK ................................................................................................................ 88
C. DASAR TEORI .......................................................................................................... 88
D. HASIL LATIHAN...................................................................................................... 90
E. TUGAS PRAKTIKUM ............................................................................................ 105
MODUL VII STORED PROCEDURE............................................................................ 110
A. TUJUAN ................................................................................................................... 110
B. PETUNJUK .............................................................................................................. 110
C. DASAR TEORI ........................................................................................................ 110
D. LATIHAN ................................................................................................................. 111
E. TUGAS PRAKTIKUM ............................................................................................ 126
MODUL VIII TRIGGER .................................................................................................. 131
A. TUJUAN ................................................................................................................... 131
B. PETUNJUK .............................................................................................................. 131
C. DASAR TEORI ........................................................................................................ 131
D. HASIL LATIHAN.................................................................................................... 132
E. TUGAS PRAKTIKUM ............................................................................................ 144
MODUL IX VIEW ............................................................................................................. 160
A. TUJUAN ................................................................................................................... 160
B. PETUNJUK .............................................................................................................. 160
C. DASAR TEORI ........................................................................................................ 160
D. LATIHAN ................................................................................................................. 161
E. TUGAS PRAKTIKUM ............................................................................................ 168
MODUL X DATABASE TRANSACTION ..................................................................... 171
A. TUJUAN ................................................................................................................... 171
B. PETUNJUK .............................................................................................................. 171
C. DASAR TEORI ........................................................................................................ 171
D. HASIL LATIHAN.................................................................................................... 173
E. TUGAS PRAKTIKUM ............................................................................................ 199

iii
PRAKTIKUM BASIS DATA

MODUL I

OBJEK DATABASE

OLEH:
FRENKI TAHIR

521 414 011

LABORATORIUM KOMPUTER KONTROL

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK

UNIVERSITAS NEGERI GORONTALO

2017

1
MODUL I

OBJEK DATABASE

A. TUJUAN
 Praktikan mampu memahami objek-objek basis data
 Praktikan mampu menciptakan tabel (MS Access)
 Praktikan memahami penggunaan primary key
 Praktikan memahami relasi antar tabel

B. PETUNJUK
 Awali setiap aktivitas dengan do'a, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. Objek Basis Data
a. Basis data (database)
Basis data adalah kumpulan data yang saling berhubungan; diorganisasikan
sedemikian rupa untuk keperluan tertentu.
b. Tabel
Tabel adalah himpunan elemen-elemen data yang diorganisasikan
menggunakan model kolom vertikal dan baris horizontal. Tabel juga
merupakan ekuivalensi dari sebuah entitas dalam Entity Relationship
Diagram (ERD).
c. Field dan Record
Sebuah tabel dapat terdiri dari satu atau beberapa field (atau kolom) dan baris
(atau row)
d. Primary Key
Primary key atau unique key adalah suatu nilai di basis data yang
digunakan untuk mengidentifikasi keunikan baris-baris di dalam tabel.
e. Relationship
1
Relationship adalah asosiasi antara beberapa entitas (atau tabel). Relasi antar
tabel bertujuan untuk mendefinisikan keterhubungan satu tabel dengan
tabel lainnya.

D. HASIL LATIHAN
1. Menciptakan Basis Data
- membuka PhpMyadmin

- Kemudian Klik Databases

- Memasukkan nama database kemudian klik Create

- Maka akan muncul kotak dialog seperti dibawah ini yang bertanda bahwa
database berhasil dibuat atau diciptakan.

2. Menciptakan Tabel
- Klilk database modul_1a.mdb untuk membuat/menciptakan sebuah tabel
2
- Memasukkan nama tabel dengan nama Tabel Mahasiswa dan jumlah
kolom adalah 4 kemudian klik Go

- Mengisikan nilai dimasing-masing kolom sesuai tabel berikut kemudian


klik Save

No Nama Field Tipe Data Size Keterangan


1 No Number Primary Key
2 NIKK Text 60 Nama mahasiswa
3 No Rumah Text 2 Jenis kelamin
4 Dusun Text 120 Alamat mahasiswa

3
- Maka akan muncul structure tabel yang telah dibuat.

E. TUGAS PRAKTIKUM

1. Membuat tabel bernama matakuliah dengan struktur sebagai berikut:


Tabel matakuliah

No Nama Field Tipe Data Size Keterangan


1 No Number Primary Key
2 NIKK Text 60 Nama mahasiswa
3 No Rumah Text 10 Jenis kelamin
4 Dusun Text 120 Alamat mahasiswa

Hasil Praktikum :
- Memasukkan nama tabel dengan nama Tabel Mahasiswa dan jumlah
kolom adalah 4 kemudian klik Go

4
- Maka akan muncul structure tabel yang telah di buat.

2. Buat sebuah tabel bernama data_penduduk dengan struktur sebagai berikut:


Tabel ambil_mk
No Nama Field Contoh Nilai Keterangan
1 NIK 123456 Nomor induk
2 No_kk 4545464 Nomor kk

Hasil Praktikum :
- Memasukkan nama tabel dengan nama Tabel Mahasiswa dan jumlah
kolom adalah 2 kemudian klik Go

- Isikan nilai masing-masing pada tabel data_penduduk sesuai nilai


primary key dari tabel NIK dan NO_kk kemudian klik Save
5
- Maka struktur tabel yang telah dibuat adalah sebagai berikut.

3. membuat relasi antara tabel mahasiswa, matakuliah, dan ambil_mk.


- masuk kedalam tabel data_penduduk, pilih “Relation view” untuk
melakukan relasi dengan tabel NIK dan NO_kk

- kemudian pilih nilai masing-masing field sesuai dengan tabel_NIK dan


tabel no_kk kemudian klik Save
- untuk melihat hasil relasi pilih more kemudian pilih designer

- Hasil tampilan relasi adalah sebagai berikut.

6
MODUL II

SQL

A. TUJUAN
 Memahami SQL, komponen-komponen, dan kegunaannya
 Mengenal operasi-operasi DDL dan DML
 Mampu melakukan operasi-operasi retrieve yang spesifik
 Mampu menguraikan dan mentranslasikan pernyataan-pernyataan SQL.

B. PETUNJUK
 Awali setiap aktivitas dengan d'oa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
o SQL (Structured Query Language)
SQL (atau query language) adalah sebuah bahasa yang digunakan untuk me-
request informasi dari basis data; bahasa ini sudah disediakan oleh DBMS.
Konstruksi SQL terbentuk atas kombinasi relational-algebra dan relational-
calculus.
SQL terdiri dari beberapa komponen, dua di antaranya yang sangat
fundamental adalah DDL (Data Definition Language) dan DML (Data
Manipulation Language)
o DDL (Data Definition Language)
DDL menyediakan perintah-perintah untuk mendefinisikan,
memodifikasi, dan menghapus skema relasi—misalnya tabel, view,
prosedur, dan fungsi.
Contoh perintah DDL adalah: CREATE, ALTER, dan DROP
o DML (Data Manipulation Language)
DML menyediakan perintah-perintah untuk menambah, memodifikasi,
menghapus, dan mengambil data di dalam basis data.
Contoh perintah DML adalah: INSERT, UPDATE, DELETE, dan SELECT.
7
 Penambahan Data
Sintaks operasi penambahan data dapat dituliskan sebagai berikut:

INSERT INTO r (A1, A2, ..., An


VALUES (V1, V2, ..., An)

di mana :
r adalah relasi (tabel)
A adalah atribut (field atau kolom)
V adalah value (nilai yang diisikan)
Misalkan tabel jurusan memiliki field id dan nama, maka pernyataan
SQL untuk penambahan data dituliskan sebagai berikut:

INSERT INTO data_penduduk (id, nama)


VALUES (1, "desa dunggala")

 Modifikasi Data
Sintaks operasi modifikasi data dapat dituliskan sebagai berikut:

UPDATE r
SET A1=V1, A2=V2, ..., An=Vn
WHERE P
di mana :
P adalah predikat
Misalkan nilai field nama untuk data dengan id 1 ingin diubah
menjadi Teknik Informatika, berikut pernyataan SQL-nya:

UPDATE data_penduduk
SET nama = "desa dunggala"
WHERE id = 1

Perhatikan, operasi modifikasi tanpa menyertakan klausa WHERE akan


mengakibatkan diubahnya seluruh data di tabel. Jadi, jika Anda hanya ingin
memodifikasi data tertentu gunakan selalu klausa WHERE.

 Penghapusan Data
Sintaks operasi penghapusan data dapat dituliskan sebagai berikut:
DELETE FROM r
WHERE P

8
Misalkan nilai data dengan id ingin dihapus, pernyataan SQL-nya
dituliskan sebagai berikut:

DELETE FROM desa_dunggala


WHERE id = 1

Perhatikan juga, operasi penghapusan tanpa menyertakan klausa


WHERE akan mengakibatkan dihapusnya seluruh data di tabel. Jadi, jika
Anda hanya ingin menghapus data tertentu gunakan selalu klausa WHERE.

 Seleksi Data
Sintaks operasi seleksi atau pengambilan data dapat dituliskan
sebagai berikut:
SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P

Misalkan ingin menampilkan data id dan nama jurusan, pernyataan SQL-


nya dituliskan sebagai berikut:

SELECT id, nama


FROM desa_dunggala

Sebagai alternatif, tersedia karakter asterisk (*) yang menyatakan seluruh


field. Jadi, pernyataan di bawah ini ekuivalen dengan pernyataan di
atas.

SELECT *
FROM desa_dunggala

Untuk efisiensi, karakter asterik sebaiknya digunakan jika ingin


me-retrieve seluruh nilai field.

9
D. HASIL LATIHAN
1. Menciptakan Objek Query
Untuk menciptakan objek query di PhpMyAdmin,
1. Membuka PhpMyAdmin

2. Kemudian Klik Databases

3. Memasukkan nama database kemudian klik Create

4. Klilk database modul_1a.mdb untuk membuat/menciptakan sebuah tabel

5. Kemudian pilih SQL

10
6. Maka Akan muncul objek Query baru

7. Di editor SQL inilah kita menuliskan pernyataan SQL. Sebagai


contoh, isikan pernyataan berikut:
SELECT NOW()

8. Klik Go untuk mengeksekusi penyataan SQL

11
Langkah-langkah di atas akan menghasilkan query kosong (belum
terdapat pernyataan valid). Untuk selanjutnya, langkah inilah yang akan
digunakan dalam praktikuam.

Untuk efisiensi penulisan pernyataan SQL, gunakan editor teks


(misalnya notepad). Selanjutnya, pernyataan SQL dapat di-copy ke
editor SQL dan dimodifikasi untuk operasi lain.

2. Menciptakan dan Menghapus Tabel


Seperti di modul pertama, kita dapat menciptakan tabel menggunakan perintah
DDL. Sebagai contoh, kita buat tabel jurusan dengan struktur sebagai berikut:

No Nama Field Tipe Data Keterangan


1 Id Number Primary Key
2 Nama Text Nama Jurusan

Hasil :
1. Menciptakan objek query baru.

2. Menuliskan pernyataan berikut:


CREATE TABLE jurusan (
id INT,
nama VARCHAR,
PRIMARY KEY(id)
);

12
Pernyataan untuk membuat
table Jurusan

3. Klik Go untuk mengeksekusi pernyataan SQL.

4. Memeriksa hasil pembuatan tabel di menu Tables.

13
Untuk menghapus tabel, ikuti langkah-langkah berikut:
1. Menuliskan pernyataan SQL seperti berikut
DROP TABLE jurusan;

Pernyataan untuk
menghapus table Jurusan

2. Klik Go untuk mengeksekusi pernyataan SQL

3. Memeriksa hasil pembuatan tabel di menu Tables.

14
3. Penambahan Data
1. Membuat objek query baru.

2. Tuliskan pernyataan SQL seperti berikut:


INSERT INTO jurusan (id, nama)
VALUES (1, "Teknik Elektro")

Pernyataan untuk
menambah data pada table
Jurusan

15
3. Klik Go Eksekusi pernyataan SQL.

4. Memeriksa apakah penambahan data berhasil dilakukan.

4. Modifikasi Data
1. Buat objek query baru.

2. Tuliskan pernyataan SQL seperti berikut:


UPDATE jurusan
SET nama = "Teknik Informatika"
WHERE id = 1

16
Pernyataan untuk
mengubah data pada table
Jurusan dengan id=1

3. Klik Go Mengeksekusi pernyataan SQL.

4. Memeriksa apakah pengubahan data berhasil dilakukan.


- Sebelum di ubah (Update)

- Setelah di ubah (Update) “Teknik Elektro” menjadi “Teknik Informatika”

17
5. Penghapusan Data
1. Buat objek query baru.

2. Tuliskan pernyataan SQL seperti berikut:

DELETE FROM jurusan


WHERE id = 1

Pernyataan untuk
menghapus isi data pada
table Jurusan dengan id=1

18
3. Eksekusi pernyataan SQL.

4. Memeriksa apakah penghapusan data berhasil dilakukan.

6. Seleksi Data
1. Buat objek query baru.

19
2. Tuliskan pernyataan SQL seperti berikut:
SELECT id, nama
FROM jurusan

Pernyataan untuk
mengseleksi data pada table
Jurusan

3. Klik Go Mengeksekusi pernyataan SQL.

4. Memeriksa apakah penghapusan data berhasil dilakukan.

7. Seleksi dengan Kriteria


Manfaatkan kembali tabel matakuliah yang sudah dibuat sebelumnya pada
pertemuan pertama. Selanjutnya, isikan data sebagai berikut:
kode_mk nama_mk Sks semester

20
PTI447 Praktikum Basis Data 1 3
TIK342 Praktikum Basis Data 1 3
PTI333 Basis Data Terdistribusi 3 5
TIK123 Jaringan Komputer 2 5
TIK333 Sistem Operasi 3 5
PTI123 Grafika Multimedia 3 5
PTI777 Sistem Informasi 2 3

Hasil Insert Tabel Berdasarkan data diatas:

1. Mencari kode_mk, nama_mk, sks, dan semester yang sksnya 3.


SELECT * FROM tabel_matakuliah
WHERE Sks=3

Hasil:

2. Dapatkan kode_mk, nama_mk, sks, dan semester yang sksnya 2 dan


semester 3.

SELECT * FROM tabel_matakuliah


WHERE Sks=2 AND Semester=3

Hasil:

21
3. Dapatkan kode_mk, nama_mk, sks, dan semester yang sksnya kurang dari
sama dengan 2.

SELECT * FROM tabel_matakuliah


WHERE Sks <= 2

Hasil:

8. Seleksi dengan Operator LIKE


Operator LIKE memungkinkan pengambilan data yang mirip atau
mendekati kata kunci.
1. Dapatkan kode_mk, nama_mk, sks dan semester yang nama
matakuliahnya berawalan “Sistem”

SELECT *
FROM tabel_matakuliah
WHERE nama_mk LIKE "Sistem%"

Hasil:

2. Dapatkan kode_mk, nama_mk, sks dan semester yang nama


matakuliahnya berakhiran “Data”
SELECT *
FROM tabel_matakuliah
WHERE nama_mk LIKE "Praktikum%"

Hasil:

22
3. Dapatkan kode_mk, nama_mk, sks, dan semester yang nama
matakuliahnya mengandung kata “Basis”.

SELECT *
FROM tabel_matakuliah
WHERE nama_mk LIKE "%Basis%"

Hasil:

Karakter wildcard di beberapa DBMS mungkin tidak sama.


Sebagai contoh, MySQL/PostgreSQL menggunakan %.

9. Pengurutan Data
Mengurutkan data, kita memanfaatkan klausa ORDER BY, di mana nilai
defaultnya adalah ASC (ascending atau pengurutan menaik)
1. Urutkan data matakuliah berdasarkan nama matakuliah dengan urutan
menaik (ascending).
SELECT *
FROM tabel_matakuliah
ORDER BY nama_mk

23
Hasil :

2. Urutkan data matakuliah berdasarkan sks dengan urutan menurun


(descending).

SELECT *
FROM tabel_matakuliah
ORDER BY sks DESC

Hasil :

24
E. TUGAS PRAKTIKUM
1. Tuliskan pernyataan SQL untuk menciptakan tabel mahasiswa2 dengan
struktur seperti tabel mahasiswa di modul pertama.
Hasil:
- Membuat Tabel Mahasiswa 2

- Hasil Create tabel mahasiswa 2

2. Pernyataan SQL untuk mendapatkan data matakuliah yang sksnya 1


ATAU 2.
SELECT * FROM tabel_matakuliah
WHERE Sks <= 2

Hasil :

25
3. Tuliskan pernyataan SQL untuk mendapatkan data matakuliah yang nama
depannya tidak sama dengan “Praktikum”.

SELECT *
FROM tabel_matakuliah
WHERE nama_mk NOT LIKE "Praktikum%"

Hasil :

26
MODUL III

FUNGSI AGREGAT

A. TUJUAN
 Memahami fungsi-fungsi agregat dan penggunaannya.
 Memahami operasi pengelompokan data.
 Mampu menyelesaikan kasus-kasus yang melibatkan penggunaan fungsi-
fungsi agregat dan pengelompokan.

B. PETUNJUK
 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. Fungsi Agregat
Fungsi agregat (aggregate) adalah fungsi yang menerima koleksi nilai dan
mengembalikan nilai tunggal sebagai hasilnya. Standar ISO mendefinisikan
lima jenis fungsi agregat.

Fungsi Deskripsi
COUNT Mengembalikan jumlah (banyaknya atau
kemunculannya) nilai di suatu kolom
SUM Mengembalikan jumlah (total atau sum) nilai di suatu
kolom
AVG Mengembalikan rata-rata nilai di suatu kolom
MIN Mengembalikan nilai terkecil di suatu kolom
MAX Mengembalikan nilai terbesar di suatu kolom

2. Keyword DISTINCT
Keyword DISTINCT dapat dimanfaatkan untuk mengeliminasi duplikasi
kemunculan data yang sama.
Sintaks keyword DISTINCT diperlihatkan sebagai berikut:
SELECT DISTINCT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P

3. Pengelompokan
Operasi non-trivial lainnya di dalam pengambilan data adalah pengelompokan.
Operasi ini direpresentasikan melalui klausa GROUP BY dan diikuti nama
field.

27
Sintaks klausa GROUP BY diperlihatkan sebagai berikut:
SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
GROUP BY A1, A2, ..., An

Dalam implementasinya, klausa GROUP BY sering dikombinasikan dengan


fungsi-fungsi agregat untuk operasi-operasi spesifik.

4. Having
Pada saat bekerja dengan fungsi agregat, terkadang diperlukan klausa
WHERE untuk menspesifikasikan hasil. Sayangnya, klausa WHERE tidak bole
mengandung fungsi agregat. Sebagai solusi, kita bisa memanfaatkan klausa
HAVING; penggunaan kalusa ini mirip WHERE.
Sintaks klausa HAVING diperlihatkan sebagai berikut:

SELECT A1, COUNT(A1)


FROM r
GROUP BY A1
HAVING P;

D. LATIHAN
Dalam latihan ini, gunakan kembali tabel beserta data matakuliah yang telah
dibuat sebelumnya.

kode_mk nama_mk sks semester


PTI447 Praktikum Basis Data 1 3
TIK342 Praktikum Basis Data 1 3
PTI333 Basis Data Terdistribusi 3 5
TIK123 Jaringan Komputer 2 5
TIK333 Sistem Operasi 3 5
PTI123 Grafika Multimedia 3 5
PTI777 Sistem Informasi 2 3

28
1. Mengeliminasi Duplikasi Data
1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:


SELECT nama_mk
FROM matakuliah
ORDER BY nama_mk

Hasil :

29
3. Klik Go Untuk Mengeksekusi pernyataan SQL.

4. Memeriksa Data apa sudah di temukan

5. Perhatikan adanya data dengan nama sama pada hasil query. Untuk
mengeliminasi, tambahkan keyword DISTINCT.

SELECT DISTINCT nama_mk


FROM matakuliah
ORDER BY nama_mk

30
Menuliskan Pernyataan pada SQL :

6. Memeriksa Hasil DISTINCT

31
2. Mendapatkan Jumlah Data
1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:


SELECT COUNT(*) AS jumlah
FROM matakuliah

Hasil :

32
3. Klik Go untuk mengeksekusi pernyataan SQL.

4. Memeriksa data yang sudah ditemukan

33
3. Mendapatkan Jumlah Total
1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:

SELECT SUM(sks) AS total


FROM matakuliah

Hasil :

34
3. Klik Go Mengeksekusi pernyataan SQL.

4. Memeriksa data Yang di Temukan

35
4. Mendapatkan Nilai Rata-Rata
1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:

SELECT AVG(sks) AS rata_rata


FROM matakuliah;

Hasil :

36
3. Klik Go untuk mengeksekusi pernyataan SQL.

4. Memeriksa Data yang Di temukan

37
5. Mendapatkan Nilai Minimum
1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:

SELECT MIN(sks) AS min


FROM matakuliah;

Hasil :

38
3. Klik Go Untuk Mengeksekusi pernyataan SQL.

4. Memeriksa Hasil Yang di temukan

39
6. Mendapatkan Nilai Maksimum

1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:

SELECT MAX(sks) AS min


FROM matakuliah;

Hasil :

40
3. Klik Go Untuk Mengeksekusi pernyataan SQL.

4. Memeriksa Data yang sudah ditemukan

41
7. Pengelompokan Data

Tuliskan pernyataan SQL untuk mengelompokkan semester berdasarkan


jumlah kemunculannya.

1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:


SELECT semester, COUNT(semester) AS jumlah
FROM matakuliah
GROUP BY semester;

Hasil :

42
3. Klik Go Untuk Mengeksekusi pernyataan SQL.

4. Memeriksa hasil data Yang ditemukan

43
8. Menyaring Pengelompokan
Tuliskan pernyataan SQL untuk mengelompokkan semester berdasarkan
jumlah kemunculannya dan semester lebih dari 3.

1. Buat objek query baru.

2. Tuliskan pernyataan SQL berikut:

SELECT semester, COUNT(semester) AS jumlah


FROM matakuliah
WHERE semester > 3
GROUP BY semester

Hasil :

44
3. Klik Go untuk Mengeksekusi pernyataan SQL.

4. Memeriksa Data yang sudah ditemukan

45
E. TUGAS PRAKTIKUM
1. Dapatkan kode_mk, nama_mk, semester, urutkan berdasar semester dan kode
matakuliah.

Hasil :
- Berdasarkan Semseter

Hasil Pencarian :

46
- Berdasarkan Kode Mata kuliah

Hasil Pencarian :

2. Dapatkan kode_mk, nama_mk, sks, dan js dari matakuliah. Urutkan


berdasar nama matakuliah.
- Pernyataan dalam SQL

SELECT kode_mk, nama_mk, Sks, (2*Sks) AS js


FROM tabel_matakuliah ORDER BY nama_mk

47
- Hasil Eksekusi pernyataan SQL

48
3. Dapatkan jumlah total sks dari tiap-tiap semester.
- Pernyatan dalam SQL
SELECT
COUNT(Semester) AS jumlah,
SUM(Sks) AS total,
Semester FROM tabel_matakuliah
ORDER BY Semester

- Hasil Eksekusi

49
4. Tuliskan pernyataan SQL untuk mengelompokkan sks berdasarkan
jumlah kemunculannya, di mana jumlah kemunculan sksnya lebih dari 2.

- Pernyataan dalam SQL


SELECT Sks, COUNT(Sks) AS jumlah
FROM tabel_matakuliah
WHERE Sks > 2
GROUP BY Sks

- Hasil Eksekusi pernyataan SQL

50
MODUL IV

PENGENALAN MYSQL

A. TUJUAN
 Mengenal DBMS MySQL dan penggunaannya untuk pengelolaan basis data.
 Mampu memanfaatkan command-line (client) MySQL.
 Memahami operasi-operasi DDL dan DML di MySQL

B. PETUNJUK

 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. MySQL
MySQL (dieja "My Ess Que Ell") merupakan perangkat lunak basis data yang
dikembangkan oleh perusahaan bernama MySQL AB. Sebagai sebuah
produk, ada beberapa point penting mengenai MySQL.
 MySQL merupakan suatu Database Management System (DBMS).
 MySQL adalah suatu Relational Database Management System
(RDBMS)
 MySQL merupakan sebuah produk yang didistribusikan secara open
source.
MySQL dapat berjalan baik di hampir semua platform sistem operasi.
Adapun di dalam praktikum ini, lingkungan yang digunakan adalah Linux
(khususnya distro ubuntu).
2. Server dan Client MySQL
Arsitektur DBMS MySQL dapat diklasifikasikan ke dalam dua jenis:
server dan client. Secara garis besar, client digunakan untuk melakukan
request informasi; server bertindak merespon permintaan dari client.
Dengan demikian, lingkungan yang nantinya akan digunakan pada

51
3. Objek Basis Data
Di MySQL, basis data direpresentasikan sebagai suatu direktori; di mana di
dalamnya terdapat himpunan file-file tabel yang terdefinisi. Pembuatan basis
data dilakukan menggunakan pernyataan CREATE DATABASE dan diikuti
dengan nama basis data yang akan dibuat.
Bentuk sintaks pembuatan basis data:

CREATE DATABASE [IF NOT EXISTS] nama_database;

Oleh karena basis data merupakan suatu schema, maka penghapusannya


dilakukan menggunakan perintah DDL DROP DATABASE.
Bentuk formal penghapusan basis data:

DROP DATABASE [IF EXISTS] nama_database

Untuk dapat bekerja dengan sebuah basis data yang terdefinisi, maka basis data
tersebut harus dipilih terlebih dahulu. Langkah untuk mengindikasikan current
database ini dilakukan melalui perintah \u atau USE.

4. Objek Tabel
MySQL mendukung penuh standar ANSI/ISO SQL. Dengan demikian,
perintah pembuatan tabel di MySQL juga sama seperti DBMS lainnya.
Bentuk sintaks pembuatan tabel diperlihatkan sebagai berikut:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nama_tabel
[(create_definisi,...)]
[table_options] [select_statement]

Untuk menghapus tabel yang terdefinisi, kita dapat memanfaatkan


perintah DROP.
DROP TABLE [IF EXISTS] nama_tabel

Adapun untuk operasi-operasi modifikasi - baik modifikasi tabel maupun field


- dapat dilakukan dengan memanfaatkan perintah ALTER.

52
5. Akses dan Manipulasi Data
Operasi-operasi akses dan manipulasi data—mencakup pengambilan atau
seleksi, penambahan, pengubahan, dan penghapusan—di MySQL juga
didasarkan pada standar SQL. Dengan demikian, adanya standardisasi ini
memungkinkan keseragaman operasi di lintas DBMS.

Untuk mengetahui lebih jelasnya mengenai perintah-perintah dasar SQL,


lihat kembali modul praktikum pertemuan II dan III mengenai SQL dan
fungsi agregat.

D. HASIL LATIHAN
1. Masuk ke mysql-client.
- Buka terminal (melalui menu Applications > Terminal).

- Jalankan mysql-client dengan mengetikkan perintah berikut:

$ mysql –u userXXX –p
Enter Password: userXXX

53
- Jika account valid, akan terlihat tampilan prompt mysql.

Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 1
Server version: 5.0.67-community-nt MySQL Community Edition
(GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

- Untuk keluar dari prompt mysql, ketikkan \q atau quit atau exit.
mysql> \q
Bye

2. Operasi
Database
Menciptakan Database
1. Membuat database dengan nama sesuai NIM Anda dan awali dengan garis
bawah “_”.

mysql> CREATE DATABASE _207533408615;


Query OK, 1 row affected (0.00 sec)

54
2. Memilih database sebagai database aktif, gunakan perintah \u atau
use.

mysql> \u _207533408615
Database Changed

3. Apabila Anda ingin mendapatkan nama database yang aktif, gunakan


perintah berikut:
mysql> SELECT DATABASE()

4. Untuk menampilkan daftar nama database di server, gunakan perintah


SHOW.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| Information_schema |
| _207533408615 |
| test |
+--------------------+
3 row in set (0.00 sec)

55
5. Untuk menghapus database, gunakan perintah DROP yang diikuti
nama database.
mysql> DROP DATABASE _207533408615;
Query OK, 1 row affected (0.00 sec)

Perhatikan, setiap pernyataan SQL harus diakhiri dengan titik koma (atau
\g); sedangkan perintah mysql-client tidak perlu diakhiri titik koma.

56
3. Eksekusi File SQL
Untuk efisiensi, mysql-client mengizinkan eksekusi pernyataan – pernyataan
SQL di suatu file.
1. Buka editor teks, kemudian ketikkan perintah berikut:
SHOW DATABASES;

2. Simpan file SQL, misalnya di lokasi /home/didik/show_db.sql.

3. Dari prompt MySQL, eksekusi file SQL dengan mengetikkan


perintah berikut:
mysql> \. /home/didik/show_db.sql

57
4. Operasi Tabel
Menciptakan Tabel
1. Buat file SQL baru, kemudian tuliskan pernyataan SQL berikut:

CREATE TABLE mahasiswa (


nim INT(12) NOT NULL,
nama VARCHAR(60) NOT NULL,
jenis_kelamin CHAR(1) NOT NULL,
alamat VARCHAR(120),
PRIMARY KEY(nim)
);

2. Simpan dengan nama create_mahasiswa.sql.

3. Eksekusi file SQL.

Melihat Daftar dan Struktur Tabel


1. Untuk mendapatkan daftar nama tabel di database, gunakan perintah
SHOW.
mysql> SHOW TABLES;

58
2. Apabila Anda ingin melihat struktur tabel, gunakan perintah
DESCRIBE.

Hasil :

Modifikasi Tabel
Sintaks operasi modifikasi nama tabel diperlihatkan sebagai berikut:
ALTER TABLE nama_tabel_lama RENAME nama_tabel_baru

Contoh berikut akan mengubah tabel mahasiswa menjadi mhs.


ALTER TABLE mahasiswa RENAME mhs;

59
5. Mengelola Field
Berkaitan dengan eksistensi field (kolom), ada beberapa operasi yang bisa
diberikan.
Menambah Field Baru
Sintaks operasi penambahan field baru diperlihatkan sebagai berikut:
ALTER TABLE nama_tabel ADD nama_field tipe_data [FIRST | AFTER
nama_field]

Contoh berikut akan menambah field no_tlp dan diletakkan di akhir tabel.
ALTER TABLE mahasiswa ADD no_tlp INT(12);

Mengubah Nama Field


Sintaks operasi modifikasi nama field diperlihatkan sebagai berikut:
ALTER TABLE nama_tabel CHANGE nama_field_lama nama_field_baru tipe_data

Contoh berikut akan mengubah field no_tlp menjadi no_hp.


ALTER TABLE mahasiswa CHANGE no_tlp no_hp INT(12);

60
- Hasil :

- Hasil Perubahan nama Table

Menghapus Field
Sintaks operasi penghapusan field diperlihatkan sebagai berikut:
ALTER TABLE nama_tabel DROP COLUMN nama_field

Contoh berikut akan menghapus field no_hp dari tabel.


ALTER TABLE mahasiswa DROP COLUMN no_hp;

- Hasil :

61
- Hasil Penambahan

6. Manipulasi Data
Operasi penambahan, pengubahan, dan penghapusan data di MySQL
mengacu pada standar SQL. Penjelasan detail mengenai operasi-operasi ini
bisa dilihat kembali di modul SQL.

E. TUGAS PRAKTIKUM
1. Isikan data berikut ke tabel mahasiswa:
nim nama jenis_kelamin alamat
101 Arif L Jl. Kenangan
102 Budi L Jl. Jombang
103 Wati P Jl. Surabaya
104 Ika P Jl. Jombang
105 Tono L Jl. Jakarta
106 Iwan L Jl. Bandung
107 Sari P Jl. Malang

- Pengisian Tabel Berdasarkan Data di Atas :

62
- Hasil Berdasarkan terminal

2. Buat tabel ambil_mk dan matakuliah dengan mengacu pada struktur di


pertemuan sebelumnya.
- Create Table Mata Kuliah

- Create Table ambil_mk

63
3. Isikan data di table matakuliah (sesuaikan contoh di pertemuan
sebelumnya).

- Insert Data Table mata_kuliah

- Hasil Insert Data mata_kuliah

64
MODUL V

RELASI DAN JOIN


A. TUJUAN
 Memahami keterhubungan entitas di dalam basis data.
 Memahami jenis-jenis operasi pengambilan data di beberapa entitas.
 Mampu menyelesaikan kasus-kasus retrieval yang melibatkan lebih dari satu
entitas.

B. PETUNJUK
 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. Relationship
Relationship adalah suatu hubungan antara beberapa entitas. Konsep ini
sangat penting sekali di dalam basis data, di mana memungkinkan entitas-
entitas untuk saling berhubungan satu sama lain.
Di dalam sebuah relationship, primary key memiliki peran penting untuk
mengaitkan entitas. Selain itu, primary key juga digunakan untuk
mendefinisikan batasan keterhubungan.
2. JOIN
Join merupakan salah satu konstruksi dasar dari SQL dan basis data. Join
dapat didefinisikan sebagai kombinasi record dari dua atau lebih tabel di
dalam basis data relasional dan menghasilkan sebuah tabel (temporary)
baru—yang disebut sebagai joined table.

Join dapat diklasifikasikan ke dalam dua jenis: inner dan outer.


a. Inner Join
Inner join pada dasarnya adalah menemukan persimpangan (intersection)
antara dua buah tabel.
Sintaks inner join diperlihatkan sebagai berikut:
SELECT A1, A2, ..., An
FROM r1
INNER JOIN r2
ON r1.join_key = r2.join_key

Inner join juga dapat direpresentasikan dalam bentuk implisit.


SELECT A1, A2, ..., An
FROM r1, r2
WHERE r1.key = r2.key

Misalkan terdapat table A dan B, maka hasil inner join dapat


diperlihatkan sebagai bidang terarsir – dalam diagram Venn seperti
Gambar 1.

65
Gambar 1. Inner
Join

b. Outer Join
Outer join dibagi ke dalam tiga jenis: Left , Right, dan Full outer join.
Left Outer Join
Left outer join (atau left join) mengembalikan semua nilai dari tabel kiri
ditambah dengan nilai dari tabel kanan yang sesuai (atau NULL jika tidak
ada nilai yang sesuai).
Sintaks left outer join diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1
LEFT OUTER JOIN r2
ON r1.join_key = r2.join_key

Left outer join antara tabel A dan B dapat diilustrasikan dalam


diagram Venn seperti Gambar 2.

Gambar 2. Left Outer Join

Right Outer Join


Right outer join (atau right join) pada dasarnya sama seperti left join,
namun dalam bentuk terbalik—kanan dan kiri.
Sintaks right outer join diperlihatkan sebagai berikut:
SELECT A1, A2, ..., An
FROM r1
RIGHT OUTER JOIN r2
ON r1.join_key = r2.join_key

Right outer join antara tabel A dan B dapat diilustrasikan dalam


diagram Venn seperti Gambar 3.

66
Gambar 3. Right Outer Join

Full Outer Join


Full outer join (atau full join) pada hakekatnya merupakan kombinasi dari
left dan right join.
Sintaks full outer join diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1
FULL OUTER JOIN r2
ON r1.join_key = r2.join_key

Bentuk visual dari full outer join dapat diperlihatkan menggunakan


diagram Venn seperti Gambar 4.

Gambar 4. Full Outer Join


Selain empat jenis join yang utama di atas, masih ada beberapa
variasi join lainnya, seperti CROSS JOIN (cartesian product),
NATURAL JOIN, dan sebagainya.
Perlu juga diperhatikan, join bisa diimplementasikan dalam bentuk
bersarang (nested join). Jadi, di dalam sebuah operasi join bisa
terdapat operasi join lainnya.

67
D. LATIHAN
1. Relationship
Dalam latihan ini digunakan dua buah tabel bernama Karyawan dan
Departemen dengan relationship bekerja pada. Struktur tabelnya diperlihatkan
sebagai berikut:

CREATE TABLE karyawan (


nama varchar(30) NOT NULL,
id_dep int(5) NOT NULL
) ENGINE=MyISAM;

CREATE TABLE departemen (


id_dep int(5) NOT NULL,
nama_dep varchar(30) NOT NULL,
PRIMARY KEY (id_dep)
) ENGINE=MyISAM;

Hasil :
- Pernyataan pada SQL

- Hasil eksekusi pernyatan SQL

68
Data yang digunakan adalah sebagai berikut:
Tabel
- Karyawan

nama id_dep
Agus 10
Budi 16
Citra 12
Dani 17

Hasil :

- Departemen

id_dep nama_dep
10 Penelitian
11 Pemasaran
12 SDM
13 Keuangan

Hasil :

69
2. Inner Join
Sebagaimana dijelaskan, inner join akan mengembalikan data di tabel A dan
B yang sesuai. Sebagai contoh, kita bisa mendapatkan data karyawan yang
memiliki departemen.

- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Bentuk implisit dari inner join diperlihatkan sebagai berikut:

70
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Dalam pengambilan data ini, kita juga bisa menspesifikasikan field


terkait. Sebagai contoh, hanya mengambil nama karyawan dan nama
departemen saja.

71
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Agar penulisan SQL lebih efisien, kita dapat memanfaatkan fitur “derived
table” (atau alias).

72
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Pada pernyataan SQL di atas, tabel karyawan dinotasikan dengan huruf k


dan tabel departemen menggunakan huruf d.

Penggunaan derived table akan semakin efisien manakala kita berurusan dengan
banyak field dan banyak tabel. Selain itu, juga menjadikan pernyataan SQL
mudah dipahami.

3. Outer Join
Left Outer Join

73
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Apabila diperlukan, kita juga dapat menggunakan klusa WHERE di dalam


join. Sebagai contoh, untuk mendapatkan data karyawan yang tidak
memiliki departemen.

74
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Right Outer Join

75
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

Full Outer Join


Beberapa DBMS tidak mendukung fungsionalitas full outer join. Meski
demikian, join ini dapat disimulasikan dengan memanfaatkan UNION.
Tekniknya, kita menggabung left join dan right join.

76
- Hasil pernyataan :

- Hasil eksekusi pernyataan :

4. Cross Join
Cross join pada hakekatnya merupakan inner join di mana kondisi join selalu
dievaluasi true. Secara matematis, jika A dan B merupakan dua himpunan,
maka cross join-nya = A X B. Cross join juga dapat direpresentasikan dalam
bentuk implisit.

77
- Hasil operasi cross join:

- Hasil pernyataan :

78
- Hasil eksekusi pernyataan :

E. TUGAS PRAKTIKUM
Perhatikan, dalam mengerjakan tugas praktikum ini, sebaiknya pernyataan SQL
disimpan di file untuk kemudian dieksekusi.
Tugas praktikum ini menggunakan tabel-tabel yang sudah dibuat sebelumnya. Berikut
adalah data-data tabel yang akan digunakan (sesuaikan nilainya agar sama persis).
- Hasil Pernyataan :

79
- Hasil eksekusi Pernyataan:

Tabel mahasiswa
nim nama jenis_kelami alam
101 Arif n L at
Jl. Kenangan
102 Budi L Jl. Jombang
103 Wati P Jl. Surabaya
104 Ika P Jl. Jombang
105 Tono L Jl. Jakarta
106 Iwan L Jl. Bandung
107 Sari P Jl. Malang

- Hasil :

Tabel ambil_mk
nim kode_mk
101 PTI447
103 TIK333
104 PTI333
104 PTI777
111 PTI123
123 PTI999

80
- Hasil :

- Tabel matakuliah
kode_mk nama_mk Sks semester
PTI447 Praktikum Basis Data 1 3
TIK342 Praktikum Basis Data 1 3
PTI333 Basis Data Terdistribusi 3 5
TIK123 Jaringan Komputer 2 5
TIK333 Sistem Operasi 3 5
PTI123 Grafika Multimedia 3 5
PTI777 Sistem Informasi 2 3

- Hasil :

1. Dapatkan data mahasiswa yang mengambil matakuliah. Selesaikan


dengan pendekatan join eksplisit dan implisit. Hindari duplikasi data.

81
- Pernyataan dalam SQL

- Hasil Eksekusi

82
2. Kelompokkan data mahasiswa yang tidak mengambil
matakuliah berdasarkan jenis kelaminnya, kemudian hitung banyaknya
.

- Pernyataan dalam SQL.

83
- Hasil Eksekusi pernyataan SQL.

3. Dapatkan nim dan nama mahasiswa yang mengambil matakuliah beserta


kode_mk dan nama_mk yang diambilnya. Selesaikan dengan pendekatan
join eksplisit dan implisit.

- Pernyataan dalam SQL

84
- Hasil eksekusi pernyataan SQL

4. Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa, di
mana total sksnya lebih dari 4 dan kurang dari 10.

85
- Pernyataan dalam SQL.

- Hasil eksekusi pernyataan SQL.

5. Dapatkan matakuliah yang tidak diambil oleh mahasiswa terdaftar


(mahasiswa di tabel mahasiswa).

86
- Pernyataan dalam SQL.

- Hasil eksekusi pernyataan SQL.

87
MODUL VI

SUBQUERY

A. TUJUAN
 Memahami keterhubungan entitas di dalam basis data.
 Memahami operasi subquery dan jenis-jenisnya di dalam pengambilan data.
 Mampu menyelesaikan kasus-kasus pengambilan data yang kompleks
dengan pendekatan subquery.

B. PETUNJUK

 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI

1. Subquery

Subquery (disebut juga subselect atau nested select/query atau inner- select) adalah
query SELECT yang ada di dalam perintah SQL lain misalnya SELECT, INSERT,
UPDATE, atau DELETE.
Keberadaan subquery secara nyata mampu menyederhanakan persoalan - persoalan rumit
berkaitan query data. Sebagai contoh, missal terdapat pernyataan sebagai berikut:
“Dapatkan data mahasiswa yang alamatnya sama dengan mahasiswa dengan nim
104”
Secara normal, diperlukan dua tahapan untuk menyelesaikan kasus di atas. Pertama
adalah mendapatkan alamat dari mahasiswa yang memiliki nim 104. Langkah selanjutnya,
baru kita bisa mengetahui data mahasiswa yang alamatnya sama dengan mahasiswa dengan
nim 104.
Adapun dengan memanfaatkan subquery, maka penyelesaian kasus di atas hanya
memerlukan sebuah query (akan dijelaskan nanti). Pada hakekatnya, subquery
sangat berguna ketika sebuah query didasarkan pada nilai-nilai yang tak diketahui.
Sintaks formal subquery diperlihatkan sebagai berikut:

SELECT A1, A2, ..., An


FROM r1, r2, r3, ..., rm
WHERE P
(SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P)

Subquery dapat diklasifikasikan ke dalam tiga jenis: scalar, multiple-row, dan multiple-
column.
88
a. Scalar Subquery
Subquery baris tunggal (scalar) hanya mengembalikan hasil satu baris data.
Bentuk subquery ini diperlihatkan seperti Gambar 1.

Gambar 1 Scalar subquery


Subquery baris tunggal dapat menggunakan operator baris tunggal =, >, >=, <, <=,
atau <>.

b. Multiple-Row Subquery
Subquery baris ganda (multiple-row) mengembalikan lebih dari satu baris data.
Bentuk subquery ini diperlihatkan seperti Gambar 2.

Gambar 2 Multiple-row subquer


Subquery baris ganda dapat menggunakan operator komparasi IN, ANY/SOME, atau
ALL.

c. Multiple-Column Subquery
Subquery kolom ganda (multiple-column) mengembalikan lebih dari satu baris dan
satu kolom data. Bentuk subquery ini diperlihatkan seperti Gambar 3.

89
Gambar 3 Multiple-column subquery

Subquery dapat diimplementasikan di dalam klausa WHERE,


HAVING, atau FROM.

D. HASIL LATIHAN
1. Himpunan Entitas
Dalam latihan ini digunakan kembali tiga buah table - meliputi mahasiswa,
ambil_mk, dan matakuliah yang telah dibuat sebelumnya, dan ditambah
dengan dua buah tabel baru, yaitu dosen dan jurusan. Untuk itu, terlebih
dahulu ciptakan tabel dosen dan jurusan dengan struktur sebagai berikut:

CREATE TABLE dosen ( kode_dos


int(5) NOT NULL, nama_dos
varchar(30) NOT NULL,
alamat_dos varchar(30) NOT
NULL, PRIMARY KEY
(kode_dos)
)
ENGINE=MyISA
M;

CREATE TABLE jurusan (


kode_jur varchar(5) NOT
NULL, nama_jur varchar(30)
NOT NULL, kode_dos int(5)
NOT NULL, PRIMARY KEY
(kode_jur)
) ENGINE=MyISAM;

90
Hasil :

- Penulisan pernyataan SQL

- Hasil Eksekusi pernyataan SQL

91
Data yang digunakan adalah sebagai berikut (sesuaikan agar sama persis):

Tabel mahasiswa
nim nama jenis_kelamin alama
101 Arif L Jl. Kenangant
102 Budi L Jl. Jombang
103 Wati P Jl. Surabaya
104 Ika P Jl. Jombang
105 Tono L Jl. Jakarta
106 Iwan L Jl. Bandung
107 Sari P Jl. Malang

- Pengisian tabel berdasarkan data diatas

Tabel ambil_mk
nim kode_mk
101 PTI447
103 TIK333
104 PTI333
104 PTI777
111 PTI123
123 PTI999

92
- Pengisian tabel berdasarkan data diatas

Tabel dosen
kode_dos nama_dos alamat_dos
10 Suharto Jl. Jombang
11 Martono Jl. Kalpataru
12 Rahmawati Jl. Jakarta
13 Bambang Jl. Bandung
14 Nurul Jl. Raya Tidar

- Pengisian tabel berdasarkan data diatas.

Tabel matakuliah
kode_mk nama_mk sks semester kode_dos
PTI447 Praktikum Basis Data 1 3 11
TIK342 Praktikum Basis Data 1 3 11
PTI333 Basis Data Terdistribusi 3 5 10
TIK123 Jaringan Komputer 2 5 33
TIK333 Sistem Operasi 3 5 10
PTI123 Grafika Multimedia 3 5 12
PTI777 Sistem Informasi 2 3 99

93
- Pengisisan tabel berdasarkan data diatas.

Tabel jurusan
kode_jur nama_jur kode_dos
TE Teknik Elektro 10
TM Teknik Mesin 13
TS Teknik Sipil 33

- Pengisisan tabel berdasarkan data diatas.

Himpunan entitas di atas dapat direpresentasikan ke dalam diagram


skema (schema diagram) seperti Gambar 4.

94
- Hasil Diagram Skema dapat dilihat juga pada phpmyadmin (More 
Desaigner)

2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang
alamatnya sama dengan mahasiswa dengan nim 104.

- Pernyataan dalam SQL

95
- Hasil Eksekusi Pernyataan

3. Multiple-Row Subquery
Pada subquery ini, kita menggunakan operator komparasi IN, ANY/SOME,
atau ALL.
Operator IN
Operator IN memiliki arti: sama dengan member di dalam list. Sebagai
contoh, kita bisa menggunakan operator ini untuk mendapatkan data
mahasiswa yang mengambil matakuliah.

- Pernyataan dalam SQL

96
- Hasil Eksekusi penyataan dalam SQL

Operator ANY/SOME
Operator ANY/SOME memiliki arti: membandingkan suatu nilai dengan
setiap nilai yang dikembalikan oleh subquery.
Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih
kecil dari sembarang sks matakuliah di semester 5.
3, 3, 2, 3

- Pernyataan dalam SQL.

97
- Hasil Eksekusi pernyataan SQL.

Operator ALL
Operator ALL memiliki arti: membandingkan suatu nilai dengan semua nilai
yang dikembalikan oleh subquery.
Misalkan kita ingin mendapatkan data matakuliah yang memiliki sks lebih
kecil dari semua sks matakuliah di semester 5.

Operator < ALL ekuivalen dengan MIN (kurang dari


min). Operator > ALL ekuivalen dengan MAX (lebih
dari maks).

98
- Pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

4. Multiple-Column Subquery
Subquery kolom ganda (atau tabel) juga menggunakan operator komparasi IN,
ANY/SOME, atau ALL. Pada query ini, nilai dari subquery – dalam bentuk kolom
ganda – dikomparasi dengan main query.
Sebagai contoh, misalkan kita ingin menampilkan data matakuliah yang
semester dan sksnya sesuai dengan semester dan sks matakuliah dengan kode
“PTI333”.

5 3

- Pernyataan dalam SQL

99
- Hasil Eksekusi pernyataan SQL

5. Operator EXISTS dan NOT EXISTS


Operator EXISTS dan NOT EXISTS digunakan pada correlated subquery
untuk memeriksa apakah subquery mengembalikan hasil atau tidak.
Apabila subquery mengembalikan hasil, EXISTS akan mengembalikan nilai
true; begitu pula sebaliknya, jika tidak mengembalikan hasil.
Sebagai contoh, pernyataan berikut akan mendapatkan data mahasiswa yang
mengambil matakuliah.

100
- Penulisan Pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL

Pernyataan berikut akan mendapatkan data mahasiswa yang tidak


mengambil matakuliah.

101
- Penulisan pernyataan dalam SQL.

- Hasi eksekusi penyataan SQL.

6. Subquery dan Fungsi Agregat


Operasi-operasi pada subquery juga dapat melibatkan fungsi-fungsi
agregat.
Sebagai contoh, misalkan ingin mendapatkan data matakuliah yang
memiliki sks sama dengan sks terbesar.

102
- Penulisan pernyataan dalam SQL

- Hasil Eksekusi pernyataan SQL

7. Subquery dan Join


Dalam beberapa kasus sederhana, fungsionalitas subquery dan join dapat
dipertukarkan. Dengan kata lain, keduanya dapat digunakan untuk
menyelesaikan persoalan yang sama.
Sebagai contoh, misalkan kita ingin mendapatkan nim dan nama
mahasiswa yang tidak mengambil matakuliah.
Pendekatan subquery:

103
- Penulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan dalam SQL

- Pendekatan join:

104
- Penulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Jika diperhatikan, pernyataan pada subquery mengalir secara alami - lebih


mudah dicerna - dibanding join. Bagaimanapun, salah satu kendala dalam
join adalah menentukan mana yang akan menjadi tabel kiri dan kanan ☺ .

E. TUGAS PRAKTIKUM
Dalam mengerjakan tugas praktikum ini, sebaiknya pernyataan SQL disimpan di
file untuk kemudian dieksekusi.
Selesaikan tugas-tugas di bawah ini dengan menggunakan pendekatan
subquery.

1. Dapatkan data mahasiswa yang jenis kelaminnya sama dengan “Arif”


tidak termasuk “Arif”.

105
- Pernyataan dalam SQL.

- Hasil Eksekutif pernyataan SQL.

106
2. Dapatkan matakuliah yang tidak diambil oleh mahasiswa terdaftar
(mahasiswa di tabel mahasiswa). (Point 20)

- Pernyataan dalam SQL.

- Hasil Eksekutif pernyataan SQL.

107
3. Dapatkan data mahasiswa yang mengambil matakuliah dengan sks lebih
kecil dari sembarang sks. (Point 25)

- Pernyataan dalam SQL.

- Hasil Eksekutif pernyataan SQL.

4. Dapatkan data dosen yang mengajar matakuliah di semester yang sama


dengan dosen yang sekaligus menjadi ketua jurusan Teknik Elektro tidak
termasuk ketua jurusan Teknik Elektro. (Point 30)

- Pernyataan dalam SQL.

108
- Hasil Eksekutif pernyataan SQL.

5. Dapatkan nim, nama, dan alamat mahasiswa yang tempat tinggalnya sama
dengan dosen yang mengajar matakuliah dengan sks di atas rata-rata.
(Point 35)

- Pernyataan dalam SQL.

- Hasil Eksekutif pernyataan SQL.

109
MODUL VII

STORED PROCEDURE

A. TUJUAN
 Memahami konsep dasar stored procedure, kelebihan dan kekurangannya.
 Memahami implementasi stored procedure di dalam basis data.
 Mampu menyelesaikan operasi-operasi data spesifik dengan
memanfaatkan stored procedure.

B. PETUNJUK

 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. Stored Procedure
Stored procedure adalah sebuah prosedur – layaknya subprogram (subrutin)
di dalam bahasa pemrograman reguler – yang tersimpan di dalam katalog
basis data.
Beberapa kelebihan yang ditawarkan stored procedure antara lain :
meningkatkan performa, mereduksi trafik jaringan, reusable dan
meningkatkan kontrol sekuriti. Di balik kelebihan-kelebihannya, stored
procedure juga memiliki kekurangan, di antaranya : berpotensi
meningkatkan beban server dan penulisannya tidak mudah (memerlukan
pengetahuan spesifik).
Sintaks stored procedure diperlihatkan sebagai berikut:

CREATE PROCEDURE sp_name


([proc_parameter[,...]])
[characteristic ...] routine_body

Untuk memanggil stored procedure, digunakan perintah CALL (beberapa


DBMS ada yang menggunakan EXECUTE).

110
CALL
sp_na
me

Dalam implementasi nyata, penggunaan stored procedure sering


melibatkan parameter. Di MySQL, parameter stored procedure dibedakan
menjadi tiga mode: IN, OUT, dan INOUT.

 IN
Parameter yang merupakan mode default ini mengindikasikan bahwa
sebuah parameter dapat di-pass ke stored procedure tetapi nilainya
tidak dapat diubah (dari dalam stored procedure).
 OUT
Mode ini mengindikasikan bahwa stored procedure dapat mengubah
parameter dan mengirimkan kembali ke program pemanggil.
 INOUT
Mode ini pada dasarnya merupakan kombinasi dari mode IN dan OUT.

Sintaks pendefinisian parameter diperlihatkan sebagai berikut:

MODE param_name param_type(param_size)

Stored procedure dapat mencerminkan beragam operasi data, misalnya


seleksi, penambahan, pengubahan, penghapusan, dan juga operasi-operasi
DDL.
Seperti halnya prosedur di bahasa pemrograman, stored procedure juga
dapat melibatkan variabel, pernyataan kondisional, dan pengulangan.

D. LATIHAN
1. Stored Procedure
Seperti halnya tabel, stored procedure diciptakan dengan menggunakan
perintah CREATE. Sebagai contoh, buat stored procedure getMahasiswa()
untuk menampilkan semua data mahasiswa.

111
1. Ketikkan pernyataan pembuatan stored procedure berikut di editor
teks.
DELIMITER //
CREATE PROCEDURE getMahasiswa()

BEGIN

/* Ini baris komentar */


SELECT * FROM mahasiswa;

END //

DELIMITER ;

- Hasil :

Perintah DELIMITER digunakan untuk mengubah delimiter standar,


misalnya di sini dari titik koma (;) menjadi slash ganda (//). Langkah
ini umumnya dilakukan ketika isi stored procedure mengandung titik
koma – yang merupakan delimiter standar di SQL.
Pernyataan di antara BEGIN dan END merupakan badan (body) stored
procedure.
Perintah DELIMITER di akhir baris digunakan untuk mengembalikan
delimiter ke karakter semula.

112
2. Eksekusi file stored (\. /xampp/htdocs/db7/getMahasiswa.sql)

3. Setelah tahap pembuatan berhasil, panggil stored procedure


getMahasiswa().
mysql> CALL getMahasiswa();
+-----+------+---------------+--------------+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+--------------+
| 101 | Arif | L | Jl. Kenangan |
| 102 | Budi | L | Jl. Jombang |
| 103 | Wati | P | Jl. Surabaya |
| 104 | Ika | P | Jl. Jombang |
| 105 | Tono | L | Jl. Jakarta |
| 106 | Iwan | L | Jl. Bandung |
| 107 | Sari | P | Jl. Malang |
+-----+------+---------------+--------------+
7 rows in set (0.00 sec)
Untuk mendapatkan informasi mengenai status stored procedure,

Hasil :

gunakan perintah SHOW PROCEDURE STATUS.


mysql> SHOW PROCEDURE STATUS;

113
Hasil :

Untuk menghapus stored procedure, gunakan perintah DROP


PROCEDURE.
mysql> DROP PROCEDURE getMahasiswa;
Query OK, 0 rows affected (0.00 sec)

Hasil :

2. Parameter IN
Stored procedure di contoh sebelumnya memperlihatkan bentuk default
(tanpa parameter). Di sini kita juga bisa mendefinisikan parameter yang
nantinya dapat digunakan oleh pernyataan di body stored procedure.
Sebagai contoh, kita bisa mendapatkan semua data matakuliah di
semester tertentu.
DELIMITER //

CREATE PROCEDURE getMhsBySemester(IN smt INT(2))

BEGIN SELECT *

FROM matakuliah
WHERE semester = smt; END //

DELIMITER ;

Untuk memanggil stored procedure yang memiliki parameter, maka kita

114
harus menspesifikasikan argumennya. Misalkan kita ingin mendapatkan
data matakuliah di semester 3.

mysql> CALL getMhsBySemester(3);


+---------+----------------------+-----+----------+---------
-+
| kode_mk | nama_mk | sks | semester | kode_dos
|
+---------+----------------------+-----+----------+---------
-+
| PTI447 | Praktikum Basis Data | 1 | 3 | 11
|
| PTI777 | Sistem Informasi | 2 | 3 | 99
|
| TIK342 | Praktikum Basis Data | 1 | 3 | 11
|
+---------+----------------------+-----+----------+---------
-+
3 rows in set (0.00 sec)

Hasil :

Apabila pemanggilan stored procedure di atas mengabaikan argumen,


DBMS akan merespon dengan pesan kesalahan.
Bergantung kebutuhan, pendefinisian parameter pada stored procedure
juga bisa lebih dari satu. Sebagai contoh, buat stored procedure dengan
dua buah parameter seperti berikut:

115
DELIMITER //

CREATE PROCEDURE getMhsBySemSks(IN smt INT(2), IN s INT(2))

BEGIN

SELECT *
FROM matakuliah
WHERE semester = smt
AND sks = s;

END //

DELIMITER ;

Pemanggilan stored procedure di atas tentunya akan memerlukan dua


buah argumen.
mysql> CALL getMhsBySemSks(3, 2);
+---------+------------------+-----+----------+----------+
| kode_mk | nama_mk | sks | semester | kode_dos |
+---------+------------------+-----+----------+----------+
| PTI777 | Sistem Informasi | 2 | 3 | 99 |
+---------+------------------+-----+----------+----------+
1 row in set (0.00 sec)

Hasil :

Variabel
Di MySQL, kita juga bisa mendeklarasikan variabel global—ruang
lingkup session—dengan menggunakan perintah SET dan notasi @.
Sebagai contoh, perintah berikut akan mendeklarasikan variabel bernama
smt dan diinisialisasi dengan nilai 3.
mysql> SET @smt = 3;
Query OK, 0 rows affected (0.00 sec)

116
- Hasil :

Untuk memeriksa nilai variabel, gunakan perintah SELECT.


mysql> SELECT @smt;
+------+
| @smt |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

- Hasil :

Langkah selanjutnya, kita bisa memanfaatkan variable – yang telah


dideklarasikan – untuk operasi-operasi lain, misalnya sebagai argumen
stored procedure.

mysql> CALL getMhsBySemester(@smt);


+---------+----------------------+-----+----------+---------
-+
| kode_mk | nama_mk | sks | semester | kode_dos
|
+---------+----------------------+-----+----------+---------
-+
| PTI447 | Praktikum Basis Data | 1 | 3 | 11
|
| PTI777 | Sistem Informasi | 2 | 3 | 99
|
| TIK342 | Praktikum Basis Data | 1 | 3 | 11
|
+---------+----------------------+-----+----------+---------
-+
3 rows in set (0.00 sec)

117
- Hasil :

Penambahan Data
Pada operasi penambahan, data-data terkait diisikan melalui argumen.
Selanjutnya, isi stored procedure tinggal memasukkan data ke tabel.
Contoh berikut memperlihatkan stored procedure untuk penambahan data
di tabel jurusan.

DELIMITER //

CREATE PROCEDURE addJurusan(


IN kode VARCHAR(2),
IN nama VARCHAR(30),
IN dos INT(3)
)

BEGIN

INSERT INTO jurusan


VALUES(kode, nama, dos);

END //

DELIMITER ;

118
- Penambahan Tabel Pada Db

Contoh eksekusi stored procedure penambahan data.

mysql> SELECT * FROM jurusan;


+----------+----------------+----------+
| kode_jur | nama_jur | kode_dos |
+----------+----------------+----------+
| TE | Teknik ELektro | 10 |
| TM | Teknik Mesin | 13 |
| TS | Teknik Sipil | 23 |
+----------+----------------+----------+
3 rows in set (0.00 sec)

- Penambahan Data Pada tabel Jurusan

- Hasi Penambahan Data

119
mysql> CALL addJurusan('TG', 'Teknik Geodesi', 9);
Query OK, 1 row affected (0.17 sec)

mysql> SELECT * FROM jurusan;


+----------+----------------+----------+
| kode_jur | nama_jur | kode_dos |
+----------+----------------+----------+
| TE | Teknik ELektro | 10 |
| TM | Teknik Mesin | 13 |
| TS | Teknik Sipil | 23 |
| TG | Teknik Geodesi | 9 |
+----------+----------------+----------+
4 rows in set (0.00 sec)

- Untuk Menambahkan data pada tabel Jurusan

- Hasil Penambahan data pada tabel Jurusan

Operasi-operasi manipulasi data lainnya bisa Anda coba sendiri, dan tak
jauh beda dengan pernyataan SQL reguler.

120
3. Parameter OUT
Dalam konteks bahasa pemrograman, parameter OUT analog dengan
passing-by-reference. Dengan demikian, parameter ini nilainya bisa
diubah oleh stored procedure.

DELIMITER //

CREATE PROCEDURE countMK(OUT total INT(2))

BEGIN

SELECT COUNT(kode_mk)

/* Hasil counting di-pass back ke variabel total */


INTO total
FROM matakuliah;

END //

DELIMITER ;

Untuk mengeksekusi stored procedure dengan parameter OUT, kita harus


menspesifikasikan argumennya.

mysql> CALL countMK(@total);


Query OK, 0 rows affected (0.00 sec)

- Hasil

Perhatikan, argumen harus menggunakan notasi @, yang mengindikasikan


sebagai suatu parameter OUT.
Langkah selanjutnya, untuk mendapatkan nilai variabel, gunakan
pernyataan SELECT.
mysql> SELECT @total AS total_mk;
+----------+
| total_mk |
+----------+
| 7 |
+----------+
1 row in set (0.00 sec)

121
- Hasil

Parameter mode OUT juga bisa dikombinasikan dengan mode IN (akan


dijelaskan nanti).

4. Parameter INOUT
Pada parameter dengan mode ini, kita bisa mengirimkan parameter ke
stored procedure dan mendapatkan nilai kembalian yang baru.
Sebagai contoh, buat stored procedure seperti berikut:
DELIMITER //

CREATE PROCEDURE countBySex(INOUT arg VARCHAR(5))

BEGIN

SELECT COUNT(nim) INTO arg


FROM mahasiswa
WHERE jenis_kelamin = arg;

END //

DELIMITER ;

Contoh penggunaannya, misal untuk mendapatkan jumlah mahasiswa


yang jenis kelaminnya L.

mysql> SET @var = 'L';


Query OK, 0 rows affected (0.00 sec)

mysql> CALL countBySex(@var);


Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @var;


+------+
| @var |
+------+
| 4 |
+------+
1 row in set (0.00 sec)

Pendekatan INOUT juga bisa direpresentasikan dalam bentuk IN dan OUT

122
- Hasil Pecobaan Parameter INOUT

- secara terpisah.

DELIMITER //

CREATE PROCEDURE countBySex2(IN sx VARCHAR(1), OUT total


INT(5))

BEGIN

SELECT COUNT(nim) INTO total


FROM mahasiswa
WHERE jenis_kelamin = sx;

END //

DELIMITER ;

Contoh penggunaannya:

mysql> CALL countBySex2('L', @total); Query OK, 0 rows


affected (0.00 sec)

mysql> SELECT @total;


+--------+
| @total |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)

123
- Hasil Secara Terpisah

5. Pencabangan dan Pengulangan


Penggunaan pernyataan-pernyataan pencabangan ataupun pengulangan di
dalam stored procedure merupakan tindakan yang legal. Dengan
demikian, kita bisa menghasilkan suatu prosedur yang kompleks.
Contoh berikut memperlihatkan penggunaan pernyataan IF.
DELIMITER //

CREATE PROCEDURE demoIF(IN bil INT(3))

BEGIN

-- Deklarasi variabel di dalam stored procedure


DECLARE str VARCHAR(30);

IF (bil > 0) THEN


SET str = 'Lebih dari Nol'; ELSE
SET str = 'Kurang dari / sama dengan Nol'; END IF;

-- Mencetak output ke layar


SELECT str;

END //

DELIMITER ;

Contoh penggunaan:
mysql> CALL demoIF(3);
+----------------+
| str |
+----------------+
| Lebih dari Nol |
+----------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> CALL demoIF(-5);


+-------------------------------+
| str |

124
+-------------------------------+
| Kurang dari / sama dengan Nol |
+-------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

- Hasil :

Contoh implementasi pernyataan perulangan diperlihatkan sebagai berikut:


DELIMITER //

CREATE PROCEDURE demoLoop(IN bil INT(3))

BEGIN

-- Deklarasi variabel
DECLARE x INT;
DECLARE str VARCHAR(50);

SET x = 1;
SET str = '';

WHILE x <= bil DO

SET str = CONCAT(str, x, ', ');

-- Inkremen
SET x = x + 1;

END WHILE;

-- Mencetak output ke layar


SELECT str;

END //

DELIMITER ;

125
Contoh eksekusi stored procedure perulangan.
mysql> CALL demoLoop(9);
+-----------------------------+
| str |
+-----------------------------+
| 1, 2, 3, 4, 5, 6, 7, 8, 9, |
+-----------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

- Hasil implementasi pernyataan perulangan

E. TUGAS PRAKTIKUM
1. Definisikan stored procedure untuk mendapatkan banyaknya matakuliah
dan jumlah total sks dengan melibatkan dua buah parameter OUT. (Point
20)

mysql> SELECT @jml AS jumlah_mk, @total AS total_sks;


+-----------+-----------+
| jumlah_mk | total_sks |
+-----------+-----------+
| 7 | 7 |
+-----------+-----------+
1 row in set (0.00 sec)

126
- Hasil :

2. Definisikan stored procedure untuk penambahan data ambil_mk.


Skenarionya, penambahan dapat dilakukan jika dan hanya jika nilai nim
eksis di table mahasiswa dan nilai kode_mk eksis di tabel matakuliah.
Apabila operasi berhasil, kembalikan status “OK”; sebaliknya jika gagal,
kembalikan pesan “Operasi Gagal”. (Point: 40)
DELIMITER //
CREATE PROCEDURE InsertAmbilMk(IN nim_mhs INT(3),IN
kd_matkul char(12))
BEGIN
DECLARE status VARCHAR(15);
SET status="";
IF EXISTS(
SELECT*FROM mahasiswa
WHERE nim=nim_mhs)THEN
INSERT INTO ambil_mk
VALUES (nim_mhs,kd_matkul);
SET status="OK";
ELSE
SET status ="Operasi Gagal";
END IF;
SELECT status;
END//

127
- Menampilkan kode_mk dengan nim eksist pada tabel

- Menampilkan kode_mk dengan nim Tidak eksist pada tabel

128
3. Definisikan stored procedure untuk memodifikasi data dosen apabila
eksis dan melakukan penambahan jika belum eksis. Jadi, masukan dari
argumen dapat digunakan untuk penambahan ataupun modifikasi data.
(Point: 50)

- Hasil

- Memodifikasi kode_dos 10 menjadi nama fatmawati dan alamat


Jl.jakarta

- menambahkan kode_dos 213 dengan nama wawan dan alamat Jl.Araya

129
- Data sebelum dimodifikasi

- Data setelah dimodifikasi

130
MODUL VIII

TRIGGER
A. TUJUAN
 Memahami konsep dasar trigger di dalam basis data.
 Memahami implementasi trigger sebagai bentuk respon atas suatu
kejadian.
 Mampu menyelesaikan kasus-kasus manipulasi data yang kompleks
dengan memanfaatkan trigger.

B. PETUNJUK

 Awali setiap aktivitas dengan doa, semoga berkah dan mendapat kemudahan.
 Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar.
 Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
 Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. Trigger
Trigger dapat didefinisikan sebagai himpunan kode (prosedural) yang
dieksekusi secara otomatis sebagai respon atas suatu kejadian berkaitan
dengan tabel basis data. Kejadian (event) yang dapat membangkitkan
trigger umumnya berupa pernyataan INSERT, UPDATE, dan DELETE.
Berdasarkan ruang lingkupnya, trigger diklasifikasikan menjadi dua jenis:
row trigger dan statement trigger. Trigger baris (row) mendefinisikan
aksi untuk setiap baris tabel; trigger pernyataan hanya berlaku untuk
setiap pernyataan INSERT, UPDATE, atau DELETE.
Dari sisi perilaku (behavior) eksekusi, trigger dapat dibedakan menjadi
beberapa jenis; namun umumnya ada dua jenis: trigger BEFORE dan
AFTER. Sesuai penamaannya, jenis-jenis ini merepresentasikan waktu
eksekusi trigger—misalnya sebelum ataukah sesudah pernyataan -
pernyataan yang berkorespondensi.
Adakalanya trigger dipandang sebagai bentuk spesifik dari stored
procedure (terkait pendefinisian body). Bagaimanapun, trigger akan
dipanggil (secara otomatis) ketika event terjadi, sedangkan stored

131
procedure harus dipanggil secara eksplisit.
2. Trigger MySQL
MySQL mendukung fitur trigger—termasuk juga stored procedure dan
view—sejak versi 5.0.2 Sebagaimana objek-objek lainnya, trigger
diciptakan menggunakan pernyataan CREATE.
Sintaks pendefinisian trigger diperlihatkan sebagai berikut:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

MySQL tidak mengizinkan multiple trigger dengan waktu aksi dan event
sama per tabel. Misalkan di tabel A sudah didefinisikan trigger AFTER
INSERT, maka kita tidak boleh mendefinisikan trigger AFTER INSERT
lagi; namun AFTER EDIT, AFTER DELETE, atau BEFORE (INSERT, EDIT,
dan DELETE) bisa diterima.

D. HASIL LATIHAN
Dalam latihan ini digunakan dua buah tabel bernama barang dan
pembelian dengan struktur seperti berikut:

CREATE TABLE barang (


id_brg varchar(5) NOT NULL, nama_brg varchar(30) NOT NULL,
stok int(5) NOT NULL,
PRIMARY KEY (id_brg)
) ENGINE = MyISAM;

CREATE TABLE pembelian ( id_pem int(5) NOT NULL, id_brg


varchar(5) NOT NULL, jml_beli int(5) NOT NULL
) ENGINE = MyISAM;

132
- Pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Data yang digunakan adalah sebagai berikut:


Tabel barang
id_brg nama_brg stok
A10 Mouse 10
A11 Keyboard 15
A12 DVD R-W 10

- Pengisian data berdasarkan data diatas

Tabel pembelian
id_pem id_brg jml_beli
1 A10 5

133
- Pengisian tabel berdasarkan tabel di atas.

1. Menggunakan Trigger
Operasi-operasi berkenaan dengan pendefinisian trigger tidak berbeda
dengan objek-objek database lainnya.
1. Ketikkan pernyataan pembuatan trigger berikut di editor teks.
DELIMITER //

CREATE TRIGGER inkremenStok2


BEFORE INSERT ON barang

FOR EACH ROW BEGIN

-- Menambah nilai stok dengan 1


SET NEW.stok = NEW.stok + 1;

END //

DELIMITER ;

Pernyataan di atas memiliki arti untuk menambah nilai stok dengan


nilai satu setiap kali ada penambahan data baru.
- Penulisan Pernyataan dalam SQL.

134
2. Eksekusi file trigger (sesuaikan path lokasi penyimpanan file).

3. Berikan perintah untuk menambah data baru, misalnya seperti


berikut:
mysql> INSERT INTO barang
-> VALUES('A13', 'Modem', 5);
Query OK, 1 row affected (0.11 sec)

- Pengisian data berdasarkan data diatas. Kemudian klik go

4. Periksa hasilnya:
mysql> SELECT * FROM barang;
+--------+----------+------+
| id_brg | nama_brg | stok |
+--------+----------+------+
| A10 | Mouse | 10 |
| A11 | Keyboard | 15 |
| A12 | DVD R-W | 10 |
| A13 | Modem | 6 |

135
+--------+----------+------+
4 rows in set (0.00 sec)
Terlihat bahwa trigger sudah bekerja seperti yang diharapkan, di
mana setiap penambahan baru akan menginkremen nilai stok.
- Hasil :

Untuk mendapatkan informasi mengenai daftar trigger yang


telah terdefinisi, gunakan perintah SHOW TRIGGERS
(tambahkan \G untuk menampilkan data secara vertikal)
mysql> SHOW TRIGGERS\G
*************************** 1. row
***************************
Trigger: inkremenStok
Event: INSERT
Table: barang
Statement: BEGIN

SET NEW.stok = NEW.stok + 1;

END
Timing: BEFORE Created: NULL

- Hasil :

sql_mode:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTI
ON
Definer: didik@localhost

136
1 row in set (0.02 sec)
Sebagaimana objek-objek database lainnya, kita menghapus
trigger dengan menggunakan perintah DROP.
mysql> DROP TRIGGER inkremenStok; Query OK, 0 rows affected
(0.00 sec)

- Penulisan pernyataan dalam SQL.

- Hasil:

Untuk memastikan bahwa operasi penghapusan sudah berhasil,


periksa kembali eksistensi trigger.
mysql> SHOW TRIGGERS\G Empty set (0.02 sec)

137
- Penulisan pernyataan dalam SQL.

- Hasil

2. Keyword OLD dan NEW


Untuk merujuk ke kolom-kolom tabel yang diasosiasikan dengan trigger,
kita menggunakan keyword OLD dan NEW. Keyword OLD mengacu pada
nilai lama, sedangkan NEW merepresentasikan nilai baru.
Di trigger INSERT, kita hanya dapat menggunakan keyword NEW karena
tidak ada data lama.eu
Contoh berikut memperlihatkan penggunaan keyword NEW pada trigger
INSERT.

DELIMITER //

CREATE TRIGGER updateStok


AFTER INSERT ON pembelian

FOR EACH ROW BEGIN

-- Update nilai stok barang


UPDATE barang
SET stok = stok + NEW.jml_beli
WHERE id_brg = NEW.id_brg;

END //

138
DELIMITER ;

Pada contoh di atas, penambahan data pembelian akan mengakibatkan


nilai stok barang berubah menyesuaikan banyaknya nilai jumlah
pembelian.

- Penulisan Pernyataan dalam SQL.

139
- Hasil Eksekusi pernyataan SQL.

Untuk kasus trigger DELETE, keyword yang bisa digunakan hanya OLD.
Misalkan kita ingin mendefinisikan trigger untuk menghapus semua data
pembelian manakala data barang yang sesuai – diindikasikan melalui
primary key dan foreign key – dihapus.

DELIMITER //

CREATE TRIGGER deleteChild


AFTER DELETE ON barang

FOR EACH ROW BEGIN

-- Hapus data pembelian yang berkorespondensi


DELETE FROM pembelian
WHERE id_brg = OLD.id_brg;
-- id_brg pertama merujuk ke tabel pembelian
-- OLD.id_brg merujuk tabel barang

END //

DELIMITER ;

140
- penulisan pernyataan dalam SQL

- Hasil eksekusi pernyataan SQL

Contoh penggunaan trigger deleteChild diperlihatkan sebagai berikut:


Khusus untuk operasi UPDATE, kita bisa memanfaatkan keyword NEW
maupun OLD.
DELIMITER //

CREATE TRIGGER updateStokEdit


AFTER UPDATE ON pembelian

FOR EACH ROW BEGIN

-- Update nilai stok barang


UPDATE barang
SET stok = stok + (NEW.jml_beli - OLD.jml_beli) WHERE
id_brg = NEW.id_brg;

END //

DELIMITER ;

141
- Penulisan Pernyataan dalam SQL.

- Hasil eksekusi pernyataan SQL.

3. Trigger Kompleks
Keberadaan trigger secara nyata mampu mengatasi berbagai persoalan
pelik, misalnya berkaitan dengan integritas atau audit data. Ini tentu
sangat masuk akal, karena trigger juga bias mengandung pernyataan –
pernyataan yang kompleks - termasuk pencabangan, pengulangan,
fungsi-fungsi agregat, bahkan kode pemanggilan prosedur.

142
Sebagai ilustrasi sederhana, kita bisa mendefinisikan trigger untuk
memeriksa operasi penambahan data barang. Skenarionya, jika data
sudah ada, berikan status eksistensi barang; sebaliknya, data bisa
langsung dimasukkan.
DELIMITER //

CREATE TRIGGER auditBarang


BEFORE INSERT ON barang

FOR EACH ROW BEGIN

IF NOT EXISTS (SELECT id_brg FROM barang WHERE id_brg =


NEW.id_brg)

THEN
SET NEW.nama_brg = NEW.nama_brg, NEW.stok = NEW.stok;

ELSE

SET @status = CONCAT('Id ', NEW.id_brg, ' sudah ada');

END IF;

END //

DELIMITER ;

- Penulisan pernyataan dalam SQL.

143
- Hasil Eksekusi pernyataan dalam SQL.

E. TUGAS PRAKTIKUM
1. Modifikasi trigger INSERT pembelian untuk menambahkan fitur
pemberian bonus. Skenarionya, jika pembelian lebih dari 100 dan kurang
dari 200, bonus 10; pembelian lebih dari 200 dan kurang dari 300, bonus
20; pembelian lebih dari 300, bonus 50. Ingat, aturan penyesuaian stok
barang juga masih berlaku. (Point: 30)
- Hal Permata adalah melakukan pengecekan data dengan Pernyataan

- Maka menampilkan data pada tabel barang

- Karena data dengan kode A 1 0 , A11, A12, A13 STOK nya


tidak memenuhi ketentuan, maka data harus di update, dengan
eksekusi pernyataan seperti berikut :

144
- Untuk melihat data dari tabel barang dengan mengeksekusi
pernyataan

- Sehingga tabel barang memiliki data-data sebagai berikut

- Setelah mengedit tabel barang, kemudian praktikkan mengecek


data pada tabel pembelian. Dengan eksekusi pernyataan sebagai
berikut

- Maka akan menampilkan data pada tabel pembelian

- Mengosongkan tabel pembelian dengan pernyataan

- Klik Ok, Saat akan tampil dialog TRUNCATE TABLE

145
- Maka data table “pembelian” akan terhapus

- Langkah selanjutnya adalah membuat trigger dengan nama


praktikum, yang dieksekusi adalah tabel pembelian
 jika pembelian lebih dari 100 dan kurang dari 200, bonus 10;
 jika pembelian lebih dari 200 dan kurang dari 300, bonus 20;
 j i k a pembelian lebih dari 300, bonus 50.

146
- Hasil penambahan trigger

- selanjutnya adalah pembuatan trigger untuk perintah aturan


penyesuaian stok barang.

- Hasil Penambahan Trigger UpdateStokPemb

147
- Setelah berhasil membuat kedua trigger, kemudian praktikum
menambahkan data pada tabel pembelian seperti pernyataan ini :

- Setelah itu seleksi tabel pembelian untuk menampilkan data


pada tabel pembelian

- Sehingga data pada tabel pembelian akan tampil.

- Setelah eksekusi data pada tabel pembelian, praktikkan eksekusi data pada
tabel barang dengan mengeksekusi pernyataan sebagai berikut

- Dan akan menampilkan data pada tabel barang.

Stok
Berkurang

Terlihat bahwa stok dari id_brg A10 berubah. Hal ini terjadi karena
adanya trigger updateStokPemb dimana setelah menambahkan data pada
tabel pembelian dengan jml_beli 60 ditambah dengan bonus 5, sehingga
stok pada tabel barang yang awal mulanya 200 menjadi 140. Sesuai dengan
perintah tugas praktikum bahwa aturan penyesuaian stok barang masih
berlaku, setiap ada pembelian maka stok akan berkurang. Maka hal
tersebut mengakibatkan stok pada id_brg A10 berubah menjadi 140.

2. Buat tabel pembayaran dengan field id_pem dan jumlah, kemudian


tambahkan field harga di table barang. Modifikasi trigger INSERT pembelian

148
untuk menambahkan fitur penghitungan nota pembayaran. Misalkan harga
satuan barang A adalah Rp. 1000, dan terjadi pembelian 10 barang, maka
jumlah pembayaran tercatat Rp. 10000. Ingat, aturan penyesuaian stok
barang dan juga pemberian bonus masih berlaku di sini. (Point: 40)

Hasil :
- Membuat tabel pembayaran

- Setelah membuat tabel pembayaran sesuai dengan perintah tugas


rumah pertama yaitu menambahakan field harga pada tabel barang,
dengan eksekusi perintah sebagai berikut

- Setelah itu menyeleksi data pada tabel dengan eksekusi perintah

- Sehingga data pada tabel barang akan ditampilkan.

- Karena pada field harga belum diambahkan data maka harus


UPDATE data pada tabel barang dengan eksekusi perintah berikut.

149
- Setelah itu seleksi data pada tabel barang untuk melihat data setelah
di UPDATE.

- Sehingga akan menampilkan data barang setelah di UPDATE field


harga.

- Setelah membuat tabel pembayaran, dan UPDATE tabel barang,


praktikkan membuat trigger sesuai dengan perintah tugas rumah
nomor 1.

150
- Kemudian eksekusi pembuatan trigger pembayaran, sehingga akan
menampilkan seperti berikut :

- Setelah pembuatan trigger, praktikkan akan menambahkan


data pada tabel pembelian dengan eksekusi pernyataan
dibawah ini

- Setelah itu praktikkan cek data pada tabel pembelian dengan seleksi
tabel pembelian

- Sehingga menampilkan data pada tabel pembelian

- Setelah eksekusi data pada tabel pembelian, praktikkan eksekusi


data pada tabel barang dengan mengeksekusi pernyataan sebagai
berikut

151
- Dan akan menampilkan data pada tabel barang.

Terlihat bahwa STOK dari ID_BRG A11 berubah. Hal ini terjadi
karena adanya trigger pembayaran dimana setelah praktikkan
menambahkan data pada tabel pembelian dengan JML_BELI 110
ditambah dengan bonus 10, sehingga STOK pada tabel barang yang
awal mulanya 200 menjadi 80. Sesuai dengan perintah tugas rumah no
1 bahwa aturan penyesuaian stok barang masih berlaku, setiap ada
pembelian maka stok akan berkurang. Maka hal tersebut
mengakibatkan STOK pada ID_BRG A11 berubah menjadi 80.

- Setelah itu praktikkan eksekusi tabel pembayaran

- Dan menampilkan data pada tabel pembayaran seperti berikut

Tabel pembayaran yang semula kosong, namun setelah


penambahan data pada tabel pembelian, tabel pembayaran
menampilkan data dengan ID_PEM 2 dan JML_PEM 220000 hal
tersebut dapat terjadi karena pada trigger pembayaran terdapat
pernyataan bahwa JML_BELI pada tabel pembelian dikali dengan
HARGA pada tabel barang, karena praktikkan menambahkan data
pembelian dengan JML_BELI 110 dan HARGA barang yang dibeli
adalah 2000, maka 110x2000 sehingga menghasilkan 220000.
- Praktikkan lakukan lagi penambahan data lain, dengan eksekusi
pernyataan berikut

152
- Kemudian setelah penambahan data praktikkan seleksi pada tabel
pembelian, menampilkan data-data pada tabel pembelian seperti
berikut

JML_BELI pada tabel pembelian ID_BRG A12 adalah 180,


karena praktikkan menambahkan data JML_BELI 160 dengan
adanya trigger pembayaran terdapat ketentuan apabila JML_BELI
lebih dari 150 maka mendapatkan bonus 20. Sehingga ketika
praktikkan menambahkan data pembelian dengan ID_PEM 3,
ID_BRG A12, dan JML_BELI adalah 160, berubah menjadi
JML_BELI adalah 180.
- Kemudian praktikkan seleksi tabel barang dan menghasilkan
tampilan sebagai berikut

Semula STOK pada ID_BRG A12 adalah 300, karena praktikkan


menambahkan data pembelian barang A12 dengan 160 dan bonus 20
sehingga data STOK pada ID_BRG A12 menjadi 120.

- Setelah itu praktikkan seleksi tabel pembayaran, dan menampilkan


data sebagai berikut

153
Tabel pembayaran menampilkan data dengan ID_PEM 3 dan
JML_PEM 480000 hal tersebut dapat terjadi karena pada trigger
pembayaran terdapat pernyataan bahwa JML_BELI pada tabel
pembelian dikali dengan HARGA pada tabel barang, karena
praktikkan menambahkan data pembelian dengan JML_BELI 160
dan HARGA barang yang dibeli adalah 3000, maka 160x3000
sehingga menghasilkan 480000.

3. Buat tabel log_pembelian dengan field waktu dan operasi. Selanjutnya,


definisikan trigger di tabel pembelian untuk merekam operasi INSERT,
UPDATE, dan DELETE, dan kemudian menyimpannya—sebagai bukti
transaksi—di tabel log_pembelian. (Point: 50)
Contoh hasil operasi:
INSERT: Menambah data bla bla bla...
UPDATE: Mengubah data ... menjadi ..., ... menjadi ...
DELETE: Menghapus data bla bla bla
Note:
Untuk mencegah duplikasi pendefinisian trigger, terlebih dahulu hapus
semua trigger di tabel pembelian.

154
Tabel yang kedua bernama log_pembelian, dengan memiliki 2
field yaitu field pertama yaitu OPERASI yang bertipe data bertipe data
VARCHAR dengan length 300. Field kedua yaitu WAKTU yang
bertipe data DATE. OPERASI di set sebagai primary key karena
bersifat unik. Kemudian eksekusi pernyataan penciptaan tabel dan
penambahan data pada tabel tersebut dengan klik Go.

- Setelah eksekusi penciptaan tabel kemudian kita klik tabel


pembayaran dan pilih Structure. Maka akan menampilkan
struktur dari tabel pembayaran.

- Kemudian praktikkan seleksi tabel


log_pembelian dengan eksekusi

- Dan hasilnya adalah sebagai


berikut

- Setelah pembuatan tabel log_pembelian, praktikkan membuat


3 trigger, trigger yang pertama bernama logInsert dengan
trigger time AFTER dan trigger event INSERT pada tabel
pembelian, kemudian praktikkan mendeklarasikan KET yang
bertipe data VARCHAR dengan length 300. Variabel KET di
SET CONCAT atau menggabung antara new.ID_PEM,
new.ID_BRG, dan new.JML_BELI. Lalu INSERT INTO tabel
log_pembelian dengan field (OPERASI, WAKTU) VALUES
(KET,NOW()) jadi pada field OPERASI diisi oleh KET, dan
field WAKTU diisi oleh NOW atau tanggal sekarang.

155
Setelah trigger tersebut dieksekusi akan menampilkan seperti
pada gambar dibawah ini

Trigger yang kedua bernama logUpdate dengan trigger time


AFTER dan trigger event UPDATE pada tabel pembelian,
kemudian praktikkan mendeklarasikan KET yang bertipe data
VARCHAR dengan length 300. Variabel KET di SET CONCAT
atau menggabung antara old.ID_PEM, new.ID_PEM,
old_ID_BRG, new.ID_BRG, dan old_JML_BELI,
new.JML_BELI. Lalu INSERT INTO tabel log_pembelian dengan
field (OPERASI, WAKTU) VALUES (KET,NOW()) jadi pada
field OPERASI diisi oleh KET, dan field WAKTU diisi oleh NOW
atau tanggal sekarang.

- Setelah trigger tersebut dieksekusi akan menampilkan seperti


pada gambar dibawah ini

156
Trigger yang ketiga bernama logDelete dengan trigger time
AFTER dan trigger event DELETE pada tabel pembelian, kemudian
praktikkan mendeklarasikan KET yang bertipe data VARCHAR
dengan length 300. Variabel KET di SET CONCAT atau
menggabung antara old.ID_PEM, old_ID_BRG, dan
old_JML_BELI. Lalu INSERT INTO tabel log_pembelian dengan
field (OPERASI, WAKTU) VALUES (KET,NOW()) jadi pada field
OPERASI diisi oleh KET, dan field WAKTU diisi oleh NOW atau
tanggal sekarang.

- Setelah trigger tersebut dieksekusi akan menampilkan seperti


pada gambar dibawah ini

- Setelah praktikkan berhasil membuat ketiga trigger


diatas, praktikkan mencoba menambahkan data dengan
eksekusi pernyataan dibawah ini

- Setelah itu praktikkan cek data setelah penambahan data pada tabel
pembelian dengan cara

157
- Sehingga hasil dari eksekusi pernyataan penambahan diatas adalah
sebagai berikut

- Setelah mencoba menambahkan data, kemudian praktikkan


mencoba mengupdate data yang telah ditambahkan tadi
dengan eksekusi pernyataan dibawah ini

- Setelah itu praktikkan cek data setelah update data pada tabel
pembelian dengan cara

- Eksekusi update sebelumnya mengubah JML_BELI pada


ID_PEM 4 dimana yang awal mulanya JML_BELI tersebut
adalah 5, diubah menjadi 10.

- Setelah mengupdate data ID_PEM 4, praktikkan akan


menghapus data ID_PEM 4 dengan eksekusi pernyataan berikut

158
- Kemudian muncul massage box, klik ok.

- Setelah itu praktikkan cek data tabel pembelian dengan cara

- Eksekusi tabel pembelian kali ini hanya menampilkan 3 record


karena seblumnya ID_PEM 4 telah dihapus oleh praktikkan.

- Setelah praktikkan mencoba menambahkan data (INSERT),


mengubah data (UPDATE), dan menghapus data (DELETE),
praktikkan akan mengeksekusi tabel log_pembelian dengan
cara

- Eksekusi perintah diatas menampilkan 3 record antara lain


UPDATE DATA, INSERT DATA, DELETE DATA.

Hal tersebut terjadi karena adanya trigger logInsert, logUpdate, dan


logDelete, sehingga ketika praktikkan menambahkan, mengedit,
menghapus semua kegiatan yang berada pada tabel pembelian akan
terekam pada tabel log_pembelian.

159
MODUL IX

VIEW

A. TUJUAN
Memahami konsep dasar view di dalam basis data. Memahami
implementasi view, termasuk algoritma dan jenis-jenisnya yang
tersedia. Mampu menyelesaikan kasus-kasus pengambilan data dengan
menggunakan pendekatan view.

B. PETUNJUK

Awali setiap aktivitas dengan doa, semoga berkah dan mendapat


kemudahan.
Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan
benar.
Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI
1. View
View dapat didefinisikan sebagai tabel maya (virtual) atau logical
yang terdiri dari himpunan hasil query. Tidak seperti umumnya
tabel di dalam basis data relasional, view bukanlah bagian dari
skema fisik. View bersifat dinamis; ia mengandung data dari
tabel yang direpresentasikannya. Dengan demikian, ketika tabel—
yang menjadi sumber datanya—berubah, data di view juga akan
berubah.
Merujuk pada dokumentasi MySQL, sintaks pendefinisian view
diperlihatkan sebagai berikut:
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE |
TEMPTABLE}] [DEFINER = { user |
CURRENT_USER }]
[SQL SECURITY { DEFINER |
INVOKER }] VIEW view_name
[(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

160
2. Updatable View
View dapat bersifat read-only atau updatable. Kondisi ini
sangat dipengaruhi oleh pendefinisian view itu sendiri.
Bagaimanapun, untuk menciptakan updatable view, pernyataan
SELECT yang didefinisikan di view harus mengikuti aturan-aturan
berikut:
Pernyataan SELECT tidak boleh merujuk ke lebih dari satu tabel.
Pernyataan SELECT tidak boleh menggunakan klausa GROUP BY
atau HAVING. Pernyataan SELECT harus tidak menggunakan
DISTINCT. Pernyataan SELECT harus tidak merujuk ke view
lain yang tidak updatable.

Pernyataan SELECT tidak boleh mengandung ekspresi apa pun,


misalnya fungsi atau agregat. Pada hakekatnya, jika sistem
database mampu menentukan pemetaan balik dari skema view ke
skema tabel dasar, maka view memungkinkan untuk di-update.
Dalam kondisi ini, operasi-operasi INSERT, UPDATE, dan DELETE
dapat diterapkan pada view.

D. LATIHAN
1. Menggunakan View
Secara umum, pembuatan view tidak berbeda dengan objek-
objek database lainnya.

1. Ketikkan pernyataan pembuatan view vGetMhs berikut di


editor teks.
CREATE VIEW vGetMhs
AS
SELECT * FROM mahasiswa
2. Eksekusi file view di atas (sesuaikan path lokasi penyimpanan
file).
3. Pemanggilan view tak ubahnya suatu
tabel.

161
mysql> SELECT * FROM vGetMhs;
+-----+------+---------------+--------------+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+--------------+
| 101 | Arif | L | Jl. Kenangan |
| 102 | Budi | L | Jl. Jombang |
| 103 | Wati | P | Jl. Surabaya |
| 104 | Ika | P | Jl. Jombang |
| 105 | Tono | L | Jl. Jakarta |
| 106 | Iwan | L | Jl. Bandung |
| 107 | Sari | P | Jl. Malang |
+-----+------+---------------+--------------+
7 rows in set (0.00 sec)

4. Apabila diperlukan, kita juga diperkenankan melakukan


penyaringan pada view.
mysql> SELECT * FROM vGetMhs
-> WHERE jenis_kelamin
= 'P';
+-----+------+---------------+---------
-----+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+---------
-----+
| 103 | Wati | P | Jl.
Surabaya |
| 104 | Ika | P | Jl.
Jombang |
| 107 | Sari | P | Jl.
Malang |
+-----+------+---------------+---------
-----+
3 rows in set (0.00 sec)

Untuk mendapatkan informasi mengenai pendefinisian view,


gunakan perintah SHOW CREATE VIEW nama_view.
mysql> SHOW CREATE VIEW vGetMhs;

Sebagaimana objek-objek database lainnya, view dapat dihapus


dengan menggunakan perintah DROP.
mysql> DROP VIEW vGetMhs;
Query OK, 0 rows affected (0.00 sec)

Apabila diperlukan, view yang sudah terdefinisi juga dapat


dimodifikasi dengan menggunakan perintah ALTER VIEW.

2. View Kompleks
View dapat mendefinisikan suatu pernyataan yang kompleks,

162
misalnya melibatkan fungsi-fungsi agregat, join, atau bahkan
subquery.
Sebagai ilustrasi, view berikut melibatkan join untuk
mendapatkan matakuliah yang tidak diambil oleh mahasiswa
terdaftar.
CREATE
VIEW vJOIN
AS
SELECT m.kode_mk, m.nama_mk, m.sks, m.semester
FROM matakuliah m
LEFT JOIN
(mahasiswa mhs LEFT JOIN ambil_mk a
ON mhs.nim=a.nim)
ON
m.kode_mk=a.kode
_mk
WHERE a.kode_mk IS NULL

Contoh pemanggilan view vJOIN


mysql> SELECT * FROM vJOIN;
+---------+----------------------+-----+----------+
| kode_mk | nama_mk | sks | semester |
+---------+----------------------+-----+----------+
| PTI123 | Grafika Multimedia | 3 | 5 |
| TIK123 | Jaringan Komputer | 2 | 5 |
| TIK342 | Praktikum Basis Data | 1 | 3 |
+---------+----------------------+-----+----------+
3 rows in set (0.06 sec)

Pada pendekatan subquery, view di atas dapat kita tuliskan


sebagai berikut:

3. Nested View
Umumnya, view diciptakan dengan mengacu pada tabel (seperti
contoh- contoh sebelumnya). Namun juga tak menutup
kemungkinan bagi kita untuk menciptakan view berbasis view.
Pendekatan inilah yang dikenal sebagai view bersarang (nested
view).

1. Ketikkan pernyataan pembuatan view berikut di


editor teks.
CREATE

163
VIEW vMK
AS
SELECT *
FROM matakuliah

2. Eksekusi
file view.
3. Buat view baru yang merujuk pada view vMK. Misalkan
dengan tambahan predikat semester sama dengan 5.
CREATE VIEW vMK5
AS
SELECT * FROM vMK
WHERE semester = 5;

4. Eksekusi file view


vMK5.
Hasil pemanggilan masing-masing view diperlihatkan sebagai
berikut:
mysql> SELECT *
FROM vMK;
+---------+--------------------------+-----+----------+----
------+
| kode_mk | nama_mk | sks | semester |
kode_dos |
+---------+--------------------------+-----+----------+----
------+
| PTI123 | Grafika Multimedia | 3 | 5
| 12 |
| PTI333 | Basis Data Terdistribusi | 3 | 5
| 10 |
| PTI447 | Praktikum Basis Data | 1 | 3
| 11 |
| PTI777 | Sistem Informasi | 2 | 3
| 99 |
| TIK123 | Jaringan Komputer | 2 | 5
| 33 |
| TIK333 | Sistem Operasi | 3 | 5
| 10 |
| TIK342 | Praktikum Basis Data | 1 | 3
| 11 |
+---------+--------------------------+-----+----------+----
------+
7 rows in set
(0.00 sec)

mysql> SELECT * FROM vMK5;


+---------+--------------------------+-----+----------+-----
-----+
| kode_mk | nama_mk | sks | semester |
kode_dos |
+---------+--------------------------+-----+----------+-----
-----+
| PTI123 | Grafika Multimedia | 3 | 5
| 12 |
| PTI333 | Basis Data Terdistribusi | 3 | 5
| 10 |
| TIK123 | Jaringan Komputer | 2 | 5
| 33 |
| TIK333 | Sistem Operasi | 3 | 5
| 10 |

164
+---------+--------------------------+-----+----------+-----
-----+
4 rows in set (0.00 sec)

4. Updatable View
Sebagaimana disinggung di awal, view dapat bersifat updatable.
Untuk mengetahui lebih jelasnya, perhatikan dan ikuti langkah-
langkah berikut:

1. Ketikkan pernyataan view sederhana sebagai


berikut.
CREATE VIEW vUpdate
AS
SELECT *
FROM mahasiswa

2. Periksa terlebih dahulu hasil pengambilan data.


mysql> SELECT * FROM vUpdate;
+-----+------+---------------+--------------+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+--------------+
| 101 | Arif | L | Jl. Kenangan |
| 102 | Budi | L | Jl. Jombang |
| 103 | Wati | P | Jl. Surabaya |
| 104 | Ika | P | Jl. Jombang |
| 105 | Tono | L | Jl. Jakarta |
| 106 | Iwan | L | Jl. Bandung |
| 107 | Sari | P | Jl. Malang |
+-----+------+---------------+--------------+
7 rows in set (0.08 sec)

3. Lakukan modifikasi pada view vUpdate (perhatikan, bukan di


tabel).
mysql> UPDATE vUpdate
-> SET alamat = 'Jl. Tidar'
-> WHERE nim = 107;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0

4. Periksa hasil modifikasi di view.


mysql> SELECT * FROM vUpdate;
+-----+------+---------------+--------------+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+--------------+
| 101 | Arif | L | Jl. Kenangan |
| 102 | Budi | L | Jl. Jombang |
| 103 | Wati | P | Jl. Surabaya |
| 104 | Ika | P | Jl. Jombang |
| 105 | Tono | L | Jl. Jakarta |
| 106 | Iwan | L | Jl. Bandung |
| 107 | Sari | P | Jl. Tidar |
+-----+------+---------------+--------------+
7 rows in set (0.00 sec)

5. Langkah selanjutnya, periksa data di tabel


mahasiswa.

165
mysql> SELECT * FROM mahasiswa;
+-----+------+---------------+--------------+
| nim | nama | jenis_kelamin | alamat |
+-----+------+---------------+--------------+
| 101 | Arif | L | Jl. Kenangan |
| 102 | Budi | L | Jl. Jombang |
| 103 | Wati | P | Jl. Surabaya |
| 104 | Ika | P | Jl. Jombang |
| 105 | Tono | L | Jl. Jakarta |
| 106 | Iwan | L | Jl. Bandung |
| 107 | Sari | P | Jl. Tidar |
+-----+------+---------------+--------------+
7 rows in set (0.00 sec)

Terlihat bahwa modifikasi di view vUpdate akan memengaruhi


data di tabel mahasiswa.
Latiha
n Kecil
Coba update data di view vSubQuery yang telah Anda
definisikan sebelumnya. Jelaskan hasilnya!

5. Check
Option

Pada saat menciptakan updatable view, MySQL mengizinkan kita


untuk menspesifikasikan bagaimana parser akan bekerja. Langkah
ini dilakukan dengan mengaktifkan CHECK OPTION. Sederhananya,
opsi ini mengakibatkan parser me-review klausa WHERE ketika
memroses pernyataan update di view.
Ada dua jenis keyword yang bisa digunakan saat aktivasi check
option: LOCAL dan CASCADED. Keyword LOCAL membatasi
pemeriksaan hanya sebatas pada view yang didefinisikan,
sedangkan CASCADED mencakup semua view yang terkait—
misalkan dalam kasus nested view.
Untuk mengetahui penggunaan check option, perhatikan langkah-
langkah berikut:
1. Definisikan updatable view sebagai
berikut:
CREATE VIEW vMkOption
AS
SELECT *
FROM matakuliah
WHERE sks < 2

166
WITH CHECK OPTION

2. Definisikan nested view vMkLocal dengan opsi LOCAL.


CREATE VIEW vMkLocal
AS
SELECT *
FROM vMkOption
WHERE sks > 0
WITH LOCAL CHECK OPTION

3. Definisikan nested view vMkCascade dengan opsi CASCADED.


CREATE VIEW vMkCascade
AS
SELECT *
FROM vMkOption
WHERE sks > 0
WITH CASCADED CHECK OPTION

4. Berikan perintah untuk menambah data baru di view vMkLocal.


mysql> INSERT INTO vMkLocal
-> VALUES ('PTI999', 'Bahasa Rakitan', 2,
7, 10); Query OK, 1 row affected (0.33 sec)

5. Berikan perintah untuk menambah data baru di view


vMkCascade.
mysql> INSERT INTO vMkCascade
-> VALUES ('PTI555', 'Metode Formal', 2,
7, 10);
ERROR 1369 (HY000): CHECK OPTION failed
'prak_db.vmkcascade'

Penambahan pada view vMkCascade gagal dilaksanakan


karena terhambat oleh rule opsi CASCADE; di mana view induk
(vMkOption) mensyaratkan bahwa sks harus kurang dari

167
E. TUGAS PRAKTIKUM
1. Definisikan updatable view dengan check option untuk
mendapatkan data matakuliah yang sksnya di antara 1 dan 4, dan
semesternya lebih dari semester terkecil. (Point: 25)

- Hasil Program SQL :

- Hasil Run

168
2. Definisikan nested view untuk mendapatkan data mahasiswa yang
jenis kelaminnya L, dengan main view berupa mahasiswa yang
mengambil sembarang matakuliah yang sksnya lebih dari sks
terkecil. (Point: 30)

- Hasil

3. Definisikan updatable view untuk mendapatkan nim dan nama


mahasiswa yang mengambil matakuliah di semester 3. (Point: 25)

- Hasil :

169
4. Definisikan view untuk mendapatkan nama dosen yang
mengajar matakuliah dengan jumlah siswa terbanyak. (Point: 30)

- Hasil

170
MODUL X

DATABASE TRANSACTION
A. TUJUAN
Memahami konsep dan urgensi transaksi dalam kehidupan sehari-
hari.
Mampu mengimplementasikan transaksi basis data.
Mampu menyelesaikan operasi-operasi sensitif dengan
memanfaatkan transaksi basis data.

B. PETUNJUK

Awali setiap aktivitas dengan doa, semoga berkah dan mendapat


kemudahan.
Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan
benar.
Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur.
Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.

C. DASAR TEORI

1. Transaksi Basis Data


Pada suatu hari, Tono ingin mentransfer uang ke rekening adiknya,
Tini, sebesar 9.000.000. Bisa diilustrasikan secara sederhana,
proses yang terjadi adalah sebagai berikut:
1. Saldo Tono dikurangi sebesar
9.000.000.

2. Saldo Tini ditambah sebesar


9.000.000.
Begitu kedua tahap di atas terlaksana dengan baik, Tono akan
merasa lega, dan Tini pun bersuka cita karena sebentar lagi dapat
memiliki laptop baru yang telah lama diimpikannya.
Namun, pertimbangkan jika di antara langkah 1 dan 2 terjadi
hal-hal buruk yang tak diinginkan, misal mesin ATM crash, listrik

171
padam dan UPS gagal up, disk di server penuh, atau ada cracker
yang merusak infrastruktur jaringan. Bisa dipastikan, saldo Tono
berkurang tetapi saldo Tini tidak bertambah. Sesuatu yang tidak kita
harapkan. Dari ilustrasi di atas, bisa disimpulkan bahwa solusi
yang tepat adalah memperlakukan perintah-perintah sebagai
satu kesatuan operasi. Sederhananya, lakukan semua
operasi atau tidak sama sekali—biasa juga dikenal dengan jargon
all or nothing.

Uniknya, konsep penyelesaian di atas sudah dikemukakan oleh


para ahli sejak puluhan tahun silam. Konsep yang disebut
transaksi basis data (database transaction) ini sebenarnya cukup
sederhana: tandai bagian awal dan akhir himpunan perintah, dan
putuskan di bagian akhir untuk mengeksekusi (commit) atau
membatalkan (rollback) semua perintah.

2. Properti Transaksi Basis Data


Dalam transaksi basis data, terdapat properti-properti yang
menjamin bahwa transaksi dilaksanakan dengan baik. Properti-
properti ini dikenal sebagai ACID (Atomicity, Consistency,
Isolation, Durability).
Atomicity: Transaksi dilakukan sekali dan sifatnya atomic,
artinya merupakan satu kesatuan tunggal yang tidak dapat
dipisah—baik itu pekerjaan dilaksanakan semua atau tidak satu
pun.
Consistency: Jika basis data pada awalnya dalam keadaan
konsisten, maka pelaksanaan transaksi dengan sendirinya juga
harus meninggalkan basis data tetap dalam status konsisten.
Isolation: Isolasi memastikan bahwa secara bersamaan
(konkuren) eksekusi transaksi terisolasi dari yang lain.
Durability: Begitu transaksi telah dilaksanakan (di-commit)
maka perubahan yang diakibatkan tidak akan hilang atau tahan

172
lama (durable), sekalipun ada kegagalan sistem.
Properti ACID memastikan perilaku yang dapat diprediksi dan
enguatkan peran transaksi sebagai konsep all or nothing yang
didesain untuk mengurangi manajemen load ketika ada banyak
variabel.

D. HASIL LATIHAN
1. Transaksi di MySQL
MySQL mendukung transaksi—melalui storage engine InnoDB
(full ACID compliance) dan BDB (BerkeleyDB)—sejak versi 4.0.
Oleh karena itu, untuk dapat mengimplementasikan transaksi,
DBMS MySQL harus mendukung salah satu atau kedua engine
transactional.
Untuk memeriksa dukungan transaksi basis data, gunakan
perintah berikut:

mysql> SHOW VARIABLES LIKE 'have_innodb';


+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)
Apabila nilai yang dikembalikan YES, berarti dukungan transaksi
basis data telah aktif. Idealnya, engine InnoDB akan menjadi
engine default di MySQL.

Perlu sekali diperhatikan, engine non-transactional (seperti


MyISAM) tidak dapat digunakan untuk mengimplementasikan
transaksi basis data.

173
- Penulisan dalam SQL.

- Hasil Eksekusi pernyataan SQL

2. Tabel Transaksi
Sebelum memulai implementasi transaksi basis data, terlebih
dahulu buat tabel seperti berikut:
CREATE TABLE
trans_demo ( nama
VARCHAR(10) NOT
NULL, PRIMARY
KEY(nama)
)
ENGINE=In
noDB;

Perhatikan, tipe atau storage engine-nya harus InnoDB.

174
- Penulisan pernyataan dalam SQL.

- Hasil eksekusi pernyataan SQL.

Jika Anda sudah memiliki tabel non transactional


dan ingin mengubahnya menjadi transactional, gunakan
perintah ALTER. Sebagai contoh, perintah berikut akan mengubah
engine tabel non_trans menjadi InnoDB.
mysql> ALTER TABLE non_trans
Engine='InnoDB'; Query OK, 0 rows
affected (0.13 sec)
Records: 0 Duplicates: 0
Warnings: 0

175
- Penulisan Pernytaan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

3. Implementasi Transaksi
Transaksi di MySQL diinisiasi dengan menggunakan pernyataan
START TRANSACTION atau BEGIN dan diakhiri COMMIT untuk
menerapkan semua transaksi.
Sebagai ilustrasi, ikuti dan pahami contoh kasus
berikut:
1. Aktifkan transaksi basis data
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

176
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

2. Tambahkan dua baris data ke tabel trans_demo, misal


mysql dan oracle.
mysql> INSERT INTO trans_demo
-> VALUES('mysql'),
('oracle'); Query OK, 2 rows
affected (0.00 sec) Records: 2
Duplicates: 0 Warnings: 0

177
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

3. Periksa hasil penambahan data.


mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| mysql |
| oracle |
+--------+
2 rows in set (0.00 sec)

178
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

4. Login lagi ke basis data yang sama, kemudian periksa


isi tabel trans_demo.
mysql> SELECT * FROM
trans_demo; Empty set
(0.00 sec)

179
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Mengapa tabel trans_demo kosong? Karena kita tidak


menerapkan transaksi dengan memanggil COMMIT. Adapun
penutupan prompt mysql mengakibatkan transaksi di-rollback
secara implisit.

Sekarang ulangi lagi langkah-langkah penambahan di tabel


trans_demo. Namun pada langkah 4, ketikkan pernyataan COMMIT.
mysql>
COMMIT;
Query OK, 0 rows affected (0.05
sec)

180
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Anda boleh menutup dan membuka prompt mysql kembali jika


ingin memastikan bahwa transaksi telah diterapkan.
Mode Autocommit

Selain menggunakan pernyataan START TRANSACTION, kita juga


bisa memanfaatkan pernyataan SET untuk mengatur nilai variabel
autocommit.
Nilai default autocommit adalah 1, yang menyatakan bahwa
transaksi basis data tidak aktif. Dengan kata lain, setiap perintah
akan langsung diterapkan secara permanen.
1. Terlebih dahulu periksa nilai variabel
autocommit.
mysql> SELECT @@ autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+

181
1 row in set (0.00 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

2. Tetapkan nilai autocommit menjadi 0 (mode


transaksi on).

mysql> SET @@autocommit = 0;


Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@autocommit;


+--------------+
| @@autocommit |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)

- Pernulisan pernyataan dalam SQL.

182
- Hasil Eksekusi pernyataan SQL.

3. Tambahkan baris data berikut


ke tabel.
mysql> INSERT INTO trans_demo
->
VALUES('db
2');
Query OK, 1 row affected (0.00 sec)

183
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Selama autocommit belum dikembalikan ke 1, maka mode transaksi


basis data akan selalu aktif. Jadi, tidak diperlukan lagi
pemanggilan START TRANSACTION.

Normalnya, pengaturan variabel autocommit berlaku untuk satu sesi


login.
Jadi, login ulang—meski di terminal sama—akan mengakibatkan
nilainya
di-reset.

184
4. Rollback
Transaksi
Bergantung kondisinya, akhir pernyataan transaksi bisa berupa
COMMIT atau ROLLBACK. Pernyataan ROLLBACK digunakan untuk
menggugurkan rangkaian perintah.
Bagaimanapun, rollback akan dilakukan manakala ada satu atau
lebih perintah yang gagal dilaksanakan. Di samping itu, rollback
juga dapat dilakukan secara
eksplisit dengan memanggil pernyataan ROLLBACK.

1. Aktifkan transaksi
basis data.

mysql> START TRANSACTION;


Query OK, 0 rows affected (0.00 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

185
2. Terlebih dahulu periksa nilai di tabel
trans_demo.
mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| mysql |
| oracle |
+--------+
2 rows in set (0.00 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

186
3. Tambahkan baris data
berikut:
mysql> INSERT INTO trans_demo
->
VALUES('sybas
e');
Query OK, 1 row affected (0.02 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

4. Tambahkan lagi baris data, namun dengan nilai yang


sama.
mysql> INSERT INTO trans_demo
->
VALUES('sybas
e');
ERROR 1062 (23000): Duplicate entry 'sybase' for key 1

187
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

5. Berikan pernyataan ROLLBACK guna membatalkan rangkaian


perintah dalam satu transaksi.

mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)

- Pernulisan pernyataan dalam SQL.

188
- Hasil Eksekusi pernyataan SQL.

6. Sampai langkah ini, seharusnya tidak ada penambahan data


baru yang tersimpan.
mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| mysql |
| oracle |
+--------+
2 rows in set (0.00 sec)

- Pernulisan pernyataan dalam SQL.

189
- Hasil Eksekusi pernyataan SQL.

Pemanggilan START TRANSACTION di akhir transaksi yang


tidak ditutup—misal menggunakan COMMIT—akan
mengakibatkan dipanggilnya COMMIT scara implisit. Dengan
demikian, kita tidak bisa lagi memaksa pembatalan melalui
pernyataan ROLLBACK.
5. Checkpointing
Idealnya, ROLLBACK akan menggugurkan keseluruhan perintah
dalam blok transaksi. Kondisi ini terkadang tidak dikehendaki,
misal terdapat tiga perintah namun kita hanya ingin
menggugurkan perintah setelah perintah kedua (perintah pertama
masih ada). Dalam kasus ini, kita bisa memanfaatkan fitur
checkpointing.
1. Aktifkan transaksi
basis data.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

190
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

2. Terlebih dahulu periksa nilai di tabel


trans_demo.
mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| mysql |
| oracle |
+--------+
2 rows in set (0.00 sec)

191
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

3. Tambahkan baris data


berikut:
mysql> INSERT INTO trans_demo
->
VALUES('sybas
e');
Query OK, 1 row affected (0.02 sec)

192
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

4. Gunakan pernyataan SAVEPOINT untuk menandai perintah


pertama.
mysql> SAVEPOINT my_point1;
Query OK, 0 rows affected (0.00 sec)

193
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

5. Tambahkan lagi
baris baru
mysql> INSERT INTO trans_demo
->
VALUES('sqlit
e');
Query OK, 1 row affected (0.00 sec)

194
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

6. Berikan perintah rollback ke savepoint


my_point1.
mysql> ROLLBACK TO SAVEPOINT
my_point1; Query OK, 0 rows
affected (0.00 sec)

195
- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

7. Tambahkan lagi sebuah


baris baru.
mysql> INSERT INTO trans_demo
->
VALUES('db
2');
Query OK, 1 row affected (0.00 sec)

- Pernulisan pernyataan dalam SQL.

196
- Hasil Eksekusi pernyataan SQL.

8. Terapkan
transaksi.
mysql> COMMIT;
Query OK, 0 rows affected (0.05 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

197
9. Lihat hasilnya.
mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| db2 |
| mysql |
| oracle |
| sybase |
+--------+
4 rows in set (0.00 sec)

- Pernulisan pernyataan dalam SQL.

- Hasil Eksekusi pernyataan SQL.

Sampai di sini seharusnya Anda bisa memahami fungsi


checkpointing. Jika belul;k m, sebaiknya ulangi lagi hingga benar-
benar paham.

198
E. TUGAS PRAKTIKUM
Untuk menyelesaikan tugas praktikum, gunakan tabel tabungan
dengan struktur sebagai berikut:

CREATE TABLE
tabungan (
no_rek INT(15)
NOT NULL, jumlah
DOUBLE NOT NULL,
trans_id INT NOT
NULL,
) ENGINE = InnoDB;

1. Definisikan stored procedure untuk menangani transfer


antarrekening dengan mengimplementasikan transaksi basis data.
Setelah transfer uang berhasil, tampilkan sisa saldo rekening
pengirim ke layar. (Point: 20)
2. Definisikan stored procedure untuk menangani penarikan
tabungan denganmengimplementasikan transaksi basis
data. Skenarionya: penarikan hanya dapat dilakukan jika:
Saldo mencukupi Menyisakan saldo minimal 50.000 dan Jumlah
(nominal) penarikan minimal 50.000 dan maksimal 500.000. (Point:
40)
3. Definisikan stored procedure untuk menangani penarikan
berulang. Artinya, penarikan tabungan dengan nominal tertentu
yang ispesifikasikan akan dilakukan sebanyak iterasi yang
dispesifikasikan juga. Aturan penarikan tabungan pada soal 2 masih
berlaku di sini.

Sebagai ilustrasi, misal A memiliki saldo 300.000, kemudian


melakukan penarikan melalui stored procedure berulang dengan
nominal 100.000 sebanyak 3 kali, maka stored procedure hanya
akan meng-commit penarikan 200.000 (2 * 100.000). Sisa 100.000
tidak bisa diambil karena harus menyisakan saldo 50.000. (Point:
50)

199
200

Anda mungkin juga menyukai