BASIS DATA
OLEH:
ABD WAHID A. ANTU
FAKULTAS TEKNIK
2018
KATA PENGANTAR
Dengan mengucapkan puji syukur atas kehadirat Tuhan yang Maha Esa, atas
segala kebesaran dan limpahan nikmat yang diberikannya, sehingga penulis dapat
Laporan praktikum ini di tulis untuk memenuhi mata kuliah Basis Data di
pengalaman penulis masih sangat terbatas. Oleh karena itu, penulis memohon kepada
atau kekurangan dalam karya tulis ini, baik dari segi bahasanya maupun isinya, penulis
mengharapkan kritik dan saran yang bersifat membangun kepada semua pembaca
i
DAFTAR ISI
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
FAKULTAS TEKNIK
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
- 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
3
- Maka akan muncul structure tabel yang telah dibuat.
E. TUGAS PRAKTIKUM
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.
Hasil Praktikum :
- Memasukkan nama tabel dengan nama Tabel Mahasiswa dan jumlah
kolom adalah 2 kemudian klik Go
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:
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:
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
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:
Seleksi Data
Sintaks operasi seleksi atau pengambilan data dapat dituliskan
sebagai berikut:
SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P
SELECT *
FROM desa_dunggala
9
D. HASIL LATIHAN
1. Menciptakan Objek Query
Untuk menciptakan objek query di PhpMyAdmin,
1. Membuka PhpMyAdmin
10
6. Maka Akan muncul objek Query baru
11
Langkah-langkah di atas akan menghasilkan query kosong (belum
terdapat pernyataan valid). Untuk selanjutnya, langkah inilah yang akan
digunakan dalam praktikuam.
Hasil :
1. Menciptakan objek query baru.
12
Pernyataan untuk membuat
table Jurusan
13
Untuk menghapus tabel, ikuti langkah-langkah berikut:
1. Menuliskan pernyataan SQL seperti berikut
DROP TABLE jurusan;
Pernyataan untuk
menghapus table Jurusan
14
3. Penambahan Data
1. Membuat objek query baru.
Pernyataan untuk
menambah data pada table
Jurusan
15
3. Klik Go Eksekusi pernyataan SQL.
4. Modifikasi Data
1. Buat objek query baru.
16
Pernyataan untuk
mengubah data pada table
Jurusan dengan id=1
17
5. Penghapusan Data
1. Buat objek query baru.
Pernyataan untuk
menghapus isi data pada
table Jurusan dengan id=1
18
3. Eksekusi pernyataan SQL.
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
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:
Hasil:
21
3. Dapatkan kode_mk, nama_mk, sks, dan semester yang sksnya kurang dari
sama dengan 2.
Hasil:
SELECT *
FROM tabel_matakuliah
WHERE nama_mk LIKE "Sistem%"
Hasil:
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:
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 :
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 :
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
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:
D. LATIHAN
Dalam latihan ini, gunakan kembali tabel beserta data matakuliah yang telah
dibuat sebelumnya.
28
1. Mengeliminasi Duplikasi Data
1. Buat objek query baru.
Hasil :
29
3. Klik Go Untuk Mengeksekusi pernyataan SQL.
5. Perhatikan adanya data dengan nama sama pada hasil query. Untuk
mengeliminasi, tambahkan keyword DISTINCT.
30
Menuliskan Pernyataan pada SQL :
31
2. Mendapatkan Jumlah Data
1. Buat objek query baru.
Hasil :
32
3. Klik Go untuk mengeksekusi pernyataan SQL.
33
3. Mendapatkan Jumlah Total
1. Buat objek query baru.
Hasil :
34
3. Klik Go Mengeksekusi pernyataan SQL.
35
4. Mendapatkan Nilai Rata-Rata
1. Buat objek query baru.
Hasil :
36
3. Klik Go untuk mengeksekusi pernyataan SQL.
37
5. Mendapatkan Nilai Minimum
1. Buat objek query baru.
Hasil :
38
3. Klik Go Untuk Mengeksekusi pernyataan SQL.
39
6. Mendapatkan Nilai Maksimum
Hasil :
40
3. Klik Go Untuk Mengeksekusi pernyataan SQL.
41
7. Pengelompokan Data
Hasil :
42
3. Klik Go Untuk Mengeksekusi pernyataan SQL.
43
8. Menyaring Pengelompokan
Tuliskan pernyataan SQL untuk mengelompokkan semester berdasarkan
jumlah kemunculannya dan semester lebih dari 3.
Hasil :
44
3. Klik Go untuk Mengeksekusi pernyataan SQL.
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 :
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.
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:
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]
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.
D. HASIL LATIHAN
1. Masuk ke mysql-client.
- Buka terminal (melalui menu Applications > Terminal).
$ mysql –u userXXX –p
Enter Password: userXXX
53
- Jika account valid, akan terlihat tampilan prompt mysql.
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 “_”.
54
2. Memilih database sebagai database aktif, gunakan perintah \u atau
use.
mysql> \u _207533408615
Database Changed
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;
57
4. Operasi Tabel
Menciptakan Tabel
1. Buat file SQL baru, kemudian tuliskan pernyataan SQL berikut:
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
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);
60
- Hasil :
Menghapus Field
Sintaks operasi penghapusan field diperlihatkan sebagai berikut:
ALTER TABLE nama_tabel DROP COLUMN nama_field
- 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
62
- Hasil Berdasarkan terminal
63
3. Isikan data di table matakuliah (sesuaikan contoh di pertemuan
sebelumnya).
64
MODUL V
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.
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:
66
Gambar 3. Right Outer Join
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:
Hasil :
- Pernyataan pada 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 :
70
- Hasil pernyataan :
71
- Hasil pernyataan :
Agar penulisan SQL lebih efisien, kita dapat memanfaatkan fitur “derived
table” (atau alias).
72
- Hasil pernyataan :
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 :
74
- Hasil pernyataan :
75
- Hasil pernyataan :
76
- Hasil 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 :
81
- Pernyataan dalam SQL
- Hasil Eksekusi
82
2. Kelompokkan data mahasiswa yang tidak mengambil
matakuliah berdasarkan jenis kelaminnya, kemudian hitung banyaknya
.
83
- Hasil Eksekusi pernyataan 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.
86
- Pernyataan dalam 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:
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.
b. Multiple-Row Subquery
Subquery baris ganda (multiple-row) mengembalikan lebih dari satu baris data.
Bentuk subquery ini diperlihatkan seperti Gambar 2.
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
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:
90
Hasil :
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
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
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
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.
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.
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
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.
98
- Pernyataan dalam 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
99
- Hasil Eksekusi pernyataan SQL
100
- Penulisan Pernyataan dalam SQL.
101
- Penulisan pernyataan dalam SQL.
102
- Penulisan pernyataan dalam SQL
103
- Penulisan pernyataan dalam SQL.
- Pendekatan join:
104
- Penulisan pernyataan dalam SQL.
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.
105
- Pernyataan dalam SQL.
106
2. Dapatkan matakuliah yang tidak diambil oleh mahasiswa terdaftar
(mahasiswa di tabel mahasiswa). (Point 20)
107
3. Dapatkan data mahasiswa yang mengambil matakuliah dengan sks lebih
kecil dari sembarang sks. (Point 25)
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)
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:
110
CALL
sp_na
me
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.
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
END //
DELIMITER ;
- Hasil :
112
2. Eksekusi file stored (\. /xampp/htdocs/db7/getMahasiswa.sql)
Hasil :
113
Hasil :
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 //
BEGIN SELECT *
FROM matakuliah
WHERE semester = smt; END //
DELIMITER ;
114
harus menspesifikasikan argumennya. Misalkan kita ingin mendapatkan
data matakuliah di semester 3.
Hasil :
115
DELIMITER //
BEGIN
SELECT *
FROM matakuliah
WHERE semester = smt
AND sks = s;
END //
DELIMITER ;
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 :
- Hasil :
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 //
BEGIN
END //
DELIMITER ;
118
- Penambahan Tabel Pada Db
119
mysql> CALL addJurusan('TG', 'Teknik Geodesi', 9);
Query OK, 1 row affected (0.17 sec)
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 //
BEGIN
SELECT COUNT(kode_mk)
END //
DELIMITER ;
- Hasil
121
- Hasil
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 //
BEGIN
END //
DELIMITER ;
122
- Hasil Pecobaan Parameter INOUT
- secara terpisah.
DELIMITER //
BEGIN
END //
DELIMITER ;
Contoh penggunaannya:
123
- Hasil Secara Terpisah
BEGIN
END //
DELIMITER ;
Contoh penggunaan:
mysql> CALL demoIF(3);
+----------------+
| str |
+----------------+
| Lebih dari Nol |
+----------------+
1 row in set (0.00 sec)
124
+-------------------------------+
| Kurang dari / sama dengan Nol |
+-------------------------------+
1 row in set (0.00 sec)
- Hasil :
BEGIN
-- Deklarasi variabel
DECLARE x INT;
DECLARE str VARCHAR(50);
SET x = 1;
SET str = '';
-- Inkremen
SET x = x + 1;
END WHILE;
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)
E. TUGAS PRAKTIKUM
1. Definisikan stored procedure untuk mendapatkan banyaknya matakuliah
dan jumlah total sks dengan melibatkan dua buah parameter OUT. (Point
20)
126
- Hasil :
127
- Menampilkan kode_mk dengan nim 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
129
- Data sebelum 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:
132
- Pernyataan dalam SQL.
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 //
END //
DELIMITER ;
134
2. Eksekusi file trigger (sesuaikan path lokasi penyimpanan file).
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 :
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)
- Hasil:
137
- Penulisan pernyataan dalam SQL.
- Hasil
DELIMITER //
END //
138
DELIMITER ;
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 //
END //
DELIMITER ;
140
- penulisan pernyataan dalam SQL
END //
DELIMITER ;
141
- Penulisan Pernyataan dalam 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 //
THEN
SET NEW.nama_brg = NEW.nama_brg, NEW.stok = NEW.stok;
ELSE
END IF;
END //
DELIMITER ;
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
144
- Untuk melihat data dari tabel barang dengan mengeksekusi
pernyataan
145
- Maka data table “pembelian” akan terhapus
146
- Hasil penambahan trigger
147
- Setelah berhasil membuat kedua trigger, kemudian praktikum
menambahkan data pada tabel pembelian seperti pernyataan ini :
- Setelah eksekusi data pada tabel pembelian, praktikkan eksekusi data pada
tabel barang dengan mengeksekusi pernyataan sebagai berikut
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.
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
149
- Setelah itu seleksi data pada tabel barang untuk melihat data setelah
di UPDATE.
150
- Kemudian eksekusi pembuatan trigger pembayaran, sehingga akan
menampilkan seperti berikut :
- Setelah itu praktikkan cek data pada tabel pembelian dengan seleksi
tabel pembelian
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.
152
- Kemudian setelah penambahan data praktikkan seleksi pada tabel
pembelian, menampilkan data-data pada tabel pembelian seperti
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.
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.
155
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 itu praktikkan cek data setelah penambahan data pada tabel
pembelian dengan cara
157
- Sehingga hasil dari eksekusi pernyataan penambahan diatas adalah
sebagai berikut
- Setelah itu praktikkan cek data setelah update data pada tabel
pembelian dengan cara
158
- Kemudian muncul massage box, klik ok.
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
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.
D. LATIHAN
1. Menggunakan View
Secara umum, pembuatan view tidak berbeda dengan objek-
objek database lainnya.
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)
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
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).
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;
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:
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)
5. Check
Option
166
WITH CHECK OPTION
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 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
- 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
C. DASAR TEORI
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.
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:
173
- Penulisan dalam 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;
174
- Penulisan pernyataan dalam SQL.
175
- Penulisan Pernytaan dalam 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.
177
- Pernulisan pernyataan dalam SQL.
178
- Pernulisan pernyataan dalam SQL.
179
- Pernulisan pernyataan dalam SQL.
180
- Pernulisan pernyataan dalam SQL.
181
1 row in set (0.00 sec)
182
- Hasil Eksekusi pernyataan SQL.
183
- Pernulisan pernyataan dalam SQL.
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.
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)
186
3. Tambahkan baris data
berikut:
mysql> INSERT INTO trans_demo
->
VALUES('sybas
e');
Query OK, 1 row affected (0.02 sec)
187
- Pernulisan pernyataan dalam SQL.
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
188
- Hasil Eksekusi pernyataan SQL.
189
- Hasil Eksekusi pernyataan SQL.
190
- Pernulisan pernyataan dalam SQL.
191
- Pernulisan pernyataan dalam SQL.
192
- Pernulisan pernyataan dalam SQL.
193
- Pernulisan pernyataan dalam 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.
195
- Pernulisan pernyataan dalam SQL.
196
- Hasil Eksekusi pernyataan SQL.
8. Terapkan
transaksi.
mysql> COMMIT;
Query OK, 0 rows affected (0.05 sec)
197
9. Lihat hasilnya.
mysql> SELECT * FROM trans_demo;
+--------+
| nama |
+--------+
| db2 |
| mysql |
| oracle |
| sybase |
+--------+
4 rows in set (0.00 sec)
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;
199
200