Kitab Suci SQL Fixed
Kitab Suci SQL Fixed
Modul 2 : SQL
1. SQL
SQL (Structured Query Languange) adalah sebuah bahasa pemrograman yang digunakan
untuk mengakses, mengelola, dan memanipulasi database relasional. Konstruksi SQL terbentuk
atas kombinasi relational-algebra dan relational-calculus. SQL terdiri dari beberapa kategori
perintah, dua di antaranya yang sangat fundamental termasuk DDL (Data Definition Language)
dan DML (Data Manipulation Language).
[2025] 1
Modul Database - Departemen Teknik Elektro dan Informatika
Keterangan:
CREATE DATABASE → Perintah untuk membuat database baru
akademik → Nama database yang akan dibuat. Nama ini harus unik dan tidak boleh
sama dengan database lain di server.
Sintaks dan Query operasi untuk membuat tabel dalam database dapat dituliskan sebagai
berikut:
Keterangan:
CREATE TABLE → Untuk membuat tabel baru di dalam database.
nama_tabel → Nama tabel yang akan dibuat. Nama ini harus unik dalam database
yang sama
kolom1, kolom2, ... → Nama-nama kolom yang akan dibuat dalam tabel. Nama kolom
tidak boleh duplikat dalam tabel yang sama.
tipe_data → Tipe data dari kolom, menentukan jenis data yang bisa disimpan.
atribut → Menentukan aturan atau properti tambahan untuk kolom
Contoh membuat tabel bernama mahasiswa, pernyataan SQL-nya dituliskan sebagai berikut:
Keterangan:
id INT NOT NULL AUTO_INCREMENT → Kolom id adalah bilangan bulat, tidak boleh kosong, dan
akan bertambah otomatis
nama VARCHAR(100) → Kolom nama adalah teks hingga 100 karakter, wajib diisi
jurusan VARCHAR(50) → Kolom jurusan adalah teks hingga 50 karakter, wajib diisi
angkatan YEAR → Kolom angkatan adalah tipe data tahun, wajib diisi
[2025] 2
Modul Database - Departemen Teknik Elektro dan Informatika
Keterangan:
ALTER TABLE → untuk mengubah struktur tabel yang sudah ada, seperti
menambahkan kolom, menghapus kolom, atau mengubah tipe data
kolom
nama_tabel → Nama tabel yang ingin diubah. Ganti nama_tabel dengan nama tabel
aktual yang ingin dimodifikasi
ADD kolom → Menambahkan kolom baru ke dalam tabel
tipe_data → Tipe data kolom yang akan ditambahkan
atribut → Menentukan aturan atau properti tambahan untuk kolom
Misalnya ingin menambah kolom email ke tabel mahasiswa, pernyataan SQL-nya dituliskan
sebagai berikut:
Keterangan:
ALTER TABLE mahasiswa → Untuk mengubah struktur tabel yang sudah ada, yaitu tabel
mahasiswa
ADD email → Menambahkan kolom baru bernama email ke dalam tabel
VARCHAR(100) → Kolom email adalah teks dengan panjang maksimal 100
karakter.
NOT NULL → Menandakan bahwa kolom email tidak boleh kosong (wajib
diisi).
• Menghapus Kolom
Sintaks dan Query operasi untuk menghapus kolom dapat dituliskan sebagai berikut:
[2025] 3
Modul Database - Departemen Teknik Elektro dan Informatika
Keterangan:
ALTER TABLE nama_tabel → untuk mengubah struktur tabel yang sudah ada,
nama_tabel adalah nama tabel yang ingin dimodifikasi.
DROP COLUMN kolom → Menghapus kolom tertentu dari tabel, kolom adalah nama
kolom yang ingin dihapus.
Misalnya ingin menghapus kolom jurusan dari tabel mahasiswa, pernyataan SQL-nya
dituliskan sebagai berikut:
Keterangan:
ALTER TABLE mahasiswa → Mengubah struktur tabel yang bernama mahasiswa. Tabel
mahasiswa adalah tabel yang akan dimodifikasi.
DROP COLUMN jurusan → Menghapus kolom jurusan dari tabel. Setelah perintah ini
dijalankan, kolom jurusan beserta semua data di dalamnya
akan dihapus secara permanen.
Misalnya ingin menghapus tabel mahasiswa, pernyataan SQL-nya dituliskan sebagai berikut:
Keterangan:
DROP mahasiswa → Menghapus tabel mahasiswa beserta semua datanya dari
database
Keterangan:
[2025] 4
Modul Database - Departemen Teknik Elektro dan Informatika
3. DML
DML menyediakan perintah-perintah untuk menambah, memodifikasi, menghapus, dan
mengambil data di dalam basis data.
Contoh perintah DML adalah SELECT, INSERT, UPDATE, dan DELETE
SELECT : Mengambil data dari tabel dan menampilkan hasilnya
INSERT : Menambahkan data baru ke tabel
UPDATE : Memodifikasi data yang sudah ada dalam tabel
DELETE : Menghapus data dari tabel berdasarkan kondisi tertentu
Keterangan:
SELECT → Perintah untuk memilih kolom tertentu dari tabel.
A1, A2, … An → Daftar kolom yang ingin Anda tampilkan
FROM r1, r2, … rn → Menentukan tabel yang akan diambil datanya
WHERE → Menentukan kondisi untuk menyaring data
P → Syarat atau kondisi
Misalkan ingin menampilkan data nama dan jurusan dari tabel mahasiswa, pernyataan SQL-
nya dituliskan sebagai berikut:
Keterangan:
SELECT nama, jurusan → Memilih kolom yang ingin ditampilkan, yaitu kolom nama dan jurusan
FROM mahasiswa → Menentukan tabel yang akan diambil datanya, yaitu tabel mahasiswa.
Misalkan hanya ingin menampilkan data nama dan jurusan mahasiswa dari angkatan 2022,
pernyataan SQL-nya dituliskan sebagai berikut:
[2025] 5
Modul Database - Departemen Teknik Elektro dan Informatika
Keterangan:
SELECT nama, jurusan → Memilih kolom yang ingin ditampilkan, yaitu kolom nama dan jurusan
FROM mahasiswa → Menentukan tabel yang akan diambil datanya, yaitu tabel
mahasiswa.
WHERE → Menambahkan kondisi untuk menyaring data.
Angkatan=2022 → Hanya baris-baris di mana nilai kolom angkatan sama dengan
2022 yang akan ditampilkan.
Sebagai alternative, tersedia karakter asterik (*) untuk menyeleksi seluruh field. Pernyataan
SQL-nya dituliskan sebagai berikut:
Keterangan:
SELECT * → Perintah ini digunakan untuk memilih semua kolom dari tabel.
Tanda bintang (*) menunjukkan bahwa semua kolom yang ada
dalam tabel akan ditampilkan dalam hasil query.
FROM mahasiswa → Menentukan tabel sumber data, yaitu tabel mahasiswa. Semua
data dari tabel mahasiswa akan ditampilkan.
Keterangan:
INSERT INTO → Menambahkan baris data baru ke tabel
r (relasi atau tabel) → Nama tabel tempat data akan dimasukkan. Ganti r
dengan nama tabel sebenarnya di database, seperti
mahasiswa, departemen, dll.
A (atribut atau field atau kolom) → Daftar kolom di tabel yang akan diisi dengan data.
Ganti dengan nama kolom yang sesuai di tabel
[2025] 6
Modul Database - Departemen Teknik Elektro dan Informatika
Misalkan tabel mahasiswa memiliki field id, nama, dan jurusan maka pernyataan SQL untuk
penambahan data dituliskan sebagai berikut:
Keterangan:
INSERT INTO mahasiswa (id, → Menambahkan baris data baru ke tabel. Mahasiswa
nama, jurusan) adalah nama tabel yang akan diisi datanya, dengan
kolom yaitu id, nama, dan jurusan.
VALUES (1, Budi Santoso, Teknik → Menentukan nilai yang akan dimasukkan ke kolom
Informatika) yang disebutkan sebelumnya, 1 untuk id, Budi Santoso
untuk nama, dan Teknik Informatika untuk jurusan.
Keterangan:
r → Nama tabel yang akan dimodifikasi. Ganti r dengan nama tabel sebenarnya
SET → Untuk menentukan kolom mana yang ingin dimodifikasi dan nilainya
A1=V1 → Artinya kolom A1 akan diubah menjadi nilai V1
WHERE → Kondisi untuk menentukan baris mana yang akan diperbarui
P → Syarat (condition)
Misalkan tabel mahasiswa dengan id=1 ingin diubah pada nama dan jurusan, maka berikut
pernyataan SQL-nya:
Keterangan:
Tabel mahasiswa → Tabel yang akan dimodifikasi
SET nama='Budi Santoso' → Mengubah kolom nama menjadi Budi Santoso
SET jurusan='Teknik Informatika' → Mengubah kolom jurusan menjadi Teknik Informatika
[2025] 7
Modul Database - Departemen Teknik Elektro dan Informatika
Keterangan:
DELETE FROM → Digunakan untuk menghapus data dari tabel.
r → Nama tabel tempat data akan dihapus. Ganti r dengan nama tabel
sebenarnya.
WHERE → Kondisi (clause) untuk menentukan baris mana yang akan dihapus.
P → Syarat atau kondisi, misalnya id=1
Misalkan nilai data dengan id = 1 ingin dihapus dari tabel mahasiswa, maka penyataan SQL-
nya dituliskan sebagai berikut:
Keterangan:
DELETE FROM mahasiswa → Menghapus data dari tabel mahasiswa. Perintah ini akan
mencari baris-baris dalam tabel mahasiswa yang memenuhi
kondisi yang diberikan.
WHERE id=1 → Kondisi untuk memilih baris yang akan dihapus.
Baris yang memiliki id=1 akan dihapus dari tabel.
[2025] 8
Modul Database - Departemen Teknik Elektro dan Informatika
LATIHAN
1. Membuat Objek Query
a. Pada halaman awal phpMyAdmin, pilih menu SQL
b. Maka akan muncul halaman editor SQL. Di Editor SQL inilah kita menuliskan pernyataan
SQL. Contoh membuat database dengan pernyataan SQL berikut:
[2025] 9
Modul Database - Departemen Teknik Elektro dan Informatika
d. Periksa hasil pembuatan tabel pada sidebar, dan hasilnya akan seperti berikut:
e. Dalam contoh di atas sengaja digunakan tipe data INT dan VARCHAR karena lebih
general. Sebenarnya penggunaan tipe data NUMBER dan TEXT juga diterima, namun
kurang standar
3. Menghapus Tabel
Untuk menghapus tabel, ikuti langkah-langkah berikut:
a. Klik Database “Praktikum_SQL” yang telah dibuat
b. Buat pernyataan SQL seperti berikut:
[2025] 10
Modul Database - Departemen Teknik Elektro dan Informatika
5. Modifikasi Data
a. Klik Database “Praktikum_SQL” yang telah dibuat
b. Buat pernyataan SQL seperti berikut:
[2025] 11
Modul Database - Departemen Teknik Elektro dan Informatika
6. Seleksi Data
a. Klik Database “Praktikum_SQL” yang telah dibuat pada latihan 1.
b. Buat pernyataan SQL seperti berikut:
[2025] 12
Modul Database - Departemen Teknik Elektro dan Informatika
d. Dalam contoh di atas digunakan tipe data TINYINT untuk SKS dan Semester, karena hanya
menyimpan angka kecil (0 hingga 255)
e. Setelah itu isikan tabel matakuliah dengan data sebagai berikut:
Kode_mk Nama-mk SKS Semester
IF101 Pengantar Teknologi Informasi 3 1
IF102 Matematika Diskrit 3 1
IF103 Algoritma dan Pemrograman 4 1
IF201 Struktur Data 3 2
IF202 Basis Data 3 2
IF203 Sistem Operasi 3 2
IF301 Jaringan Komputer 3 3
IF302 Pemrograman Berorientasi Objek 3 3
IF303 Manajemen Proyek TI 2 3
IF401 Kecerdasan Buatan 3 4
IF402 Pemrograman Web 3 4
IF403 Rekayasa Perangkat Lunak 3 4
IF501 Machine Learning 3 5
IF502 Keamanan Jaringan 3 5
IF503 Komputasi Awan 3 5
f. Buat pernyataan SQL seperti berikut:
[2025] 13
Modul Database - Departemen Teknik Elektro dan Informatika
[2025] 14
Modul Database - Departemen Teknik Elektro dan Informatika
b. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, dengan SKS 3
dan Semester 4
c. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, dan SKS yang
Semester nya kurang dari sama dengan 2
[2025] 15
Modul Database - Departemen Teknik Elektro dan Informatika
b. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, SKS dan
Semester yang matakuliahnya berakhiran “Data”
c. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, SKS dan
Semester yang matakuliahnya mengandung kata “Berorientasi”
[2025] 16
Modul Database - Departemen Teknik Elektro dan Informatika
9. Mengurutkan Data
Untuk mengurutkan data, kita memanfaatkan klausa ORDER BY
a. Tuliskan pernyataan SQL berikut untuk mengurutkan nama mahasiswa pada tabel
mahasiswa dengan urutan ascending
b. Tuliskan pernyataan SQL berikut untuk mengurutkan nama matakuliah pada tabel
matakuliah dengan urutan descending
[2025] 17
Modul Database - Departemen Teknik Elektro dan Informatika
[2025] 18
Database Module - Department of Electrical Engineering and Informatics
Modul 3 : Agregat
1. Agreggat Function
Aggregate functions are functions that accept a collection of values and return a single
value as the result. The ISO standard defines five types of aggregate functions.
function Description
COUNT Returns the number (number or occurrence) of values in a
column.
SUM Returns the sum (total or sum) of values in a column
AVG Returns the average of the values in a column
MIN Returns the smallest (minimum) value in a column
MAX Returns the largest (maximal) value in a column
2. Keyword DISTINCT
The DISTINCT keyword can be utilized to eliminate duplicate occurrences of the same
data. The syntax of the DISTINCT keyword is shown as follows :
3. Clustering
Another non-trivial operation in data retrieval is grouping. This operation is represented
through the GROUP BY clause and followed by the field name. The syntax of the GROUP
Database Module - Department of Electrical Engineering and Informatics
4. Having
When working with aggregate functions, we sometimes need a WHERE clause to specify
the result. Unfortunately, the WHERE clause cannot contain aggregate functions. As a
solution, we can utilize the HAVING clause. The usage of this clause is similar to WHERE.
The syntax of the HAVING clause is shown as follows:
LATIHAN
In this exercise, create a database “Module3_GroupName”. Then create a course table with
records as below.
d. Notice the data with the same name in the query result. To eliminate them, add
the DISTINCT keyword :
7. Categorizing Data
a. Write down the following SQL statement :
Inner join juga dapat direpresentasikan dalam bentuk implisit sebagai berikut:
Misalkan terdapat table A dan B, maka hasil inner join dapat diperlihatkan sebagai bidang
terarsir dalam diagram Venn seperti Gambar 1.
b. Outer Join
Outer join dibagi ke dalam tiga jenis, yaitu left outer join, right outer join dan full outer
join.
● Left Outer Join
Left outer join atau left join mengembalikan semua nilai dari table kiri ditambah
dengan nilai dari tabel kanan yang sesuai atau NULL jika tidak ada nilai yang sesuai.
Sintaks left outer join diperlihatkan sebagai berikut:
Left outer join antar tabel A dan B dapat diilustrasikan dalam diagram Venn seperti
Gambar 2.
Bentuk visual dari full outer join dapat diperlihatkan menggunakan diagram Venn
seperti Gambar 4.
Gambar 5. Union
2. Inner Join
Sebagaimana dijelaskan, inner join akan mengembalikan data di tabel A dan B yang sesuai.
Sebagai contoh, untuk mendapatkan data karyawan yang memiliki departemen, eksekusi
pernyataan atau perintah SQL berikut:
Selain itu, dapat pula menggunakan bentuk implisit dari inner join di atas, yaitu sebagai berikut:
Bandingkan hasil eksekusi perintah SQL yang menggunakan INNER JOIN dengan yang
menggunakan bentuk implisitnya!
Dalam pengambilan data ini, kita juga bisa menspesifikasikan field terkait. Sebagai contoh,
untuk mengambil nama karyawan dan nama departemen yang ditempatinya saja, eksekusi
perintah SQL berikut:
Perhatikan bahwa untuk menampilkan field tertentu saja, maka nama field tersebut harus
disebutkan secara eksplisit beserta nama tabel tempat field.
Agar penulisan SQL lebih efisien, kita dapat memanfaatkan fitur “derived table” (atau alias).
Contohnya adalah sebagai berikut:
Pada pernyataan SQL di atas, tabel karyawan dinotasikan dengan huruf k dan tabel departemen
menggunakan huruf d. perhatikan hasil eksekusi perintah SQL tersebut, apakah sama dengan
hasil eksekusi perintah SQL sebelumnya (yang tidak menggunakan fitur (derived table)?
3. Outer Join
● Left Outer Join
Contoh penggunaan LEFT OUTER JOIN adalah sebagai berikut:
Perhatikan baris kedua dan keempat pada hasil eksekusi di atas, apa yang menyebabkan
timbulnya NULL value ?
Apabila diperlukan, kita juga dapat menggunakan klausa WHERE di dalam join. Sebagai
contoh, untuk mendapatkan data karyawan yang tidak memiliki departemen, eksekusi
perintah SQL berikut:
Dari hasil eksekusi di atas, dapat kita ketahui bahwa karyawan yang bernama Budi dan Dani
tidak memiliki departemen (nama departemennya tidak tercatat di dalam tabel
departemen).
● Right Outer Join
Contoh penggunaan RIGHT OUTER JOIN adalah sebagai berikut:
Perhatikan kembali baris kedua dan keempat pada hasil eksekusi di atas, apa yang
menyebabkan timbulnya NULL value ?
● Full Outer Join
Beberapa DBMS tidak mendukung fungsionalitas full outer join. Meski demikian, join ini
dapat disimulasikan dengan memanfaatkan UNION. Tekniknya ialah dengan menggabung
left join dan right join seperti perintah SQL berikut:
● Cross Join
Cross join pada hakikatnya merupakan inner join dimana kondisi join selalu dievaluasi true.
Secara matematis, jika A dan B merupakan dua himpunan, maka cross join-nya sama
dengan X. Contoh penggunaan CROSS JOIN adalah sebagai berikut:
Lakukan perintah yang sama namun menggunakan UNION ALL. Jelaskan apa perbedaan fungsi
UNION dan UNION ALL.
Modul Database - Departemen Teknik Elektro dan Informatika
Subquery dapat diklasifikasikan ke dalam tiga jenis yaitu scalar, multiple row, dan multiple
column.
1. Scalar Subquery
Subquery baris tunggal (scalar) hanya mengembalikan hasil satu baris data. Bentuk subquery
ini diperlihatkan seperti Gambar 1.
Modul Database - Departemen Teknik Elektro dan Informatika
LATIHAN
1. Himpunan Entitas
Dalam latihan ini digunakan kembali tiga buah tabel 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 buat beberapa tabel dengan struktur sebagai
berikut.
Modul Database - Departemen Teknik Elektro dan Informatika
2. Scalar Subquery
Contoh subquery baris tunggal adalah mendapatkan data mahasiswa yang jenis kelaminnya
sama dengan mahasiswa dengan nama “Wati”.
Sebagai hasilnya, didapatkan jenis kelamin mahasiswa dengan nama “Wati”, yakni “P” yang
selanjutnya digunakan oleh main query sehingga menghasilkan sebagai berikut.
b. 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 besar dari sembarang sks matakuliah di semester 3.
c. Operator ALL
Operator ALL memiliki arti: membandingkan suatu nilai dengan semua nilai yang
dikembalikan oleh subquery.Misal, kita ingin mendapatkan data matakuliah yang memiliki
sks lebih besar dari semua sks matakuliah di semester 3.
b. NOT EXISTS
Pernyataan berikut akan mendapatkan data matakuliah yang tidak diambil oleh mahasiswa
Modul Database - Departemen Teknik Elektro dan Informatika
PETUNJUK
1. Awali setiap aktivitas dengan do'a, semoga berkah dan mendapat kemudahan
2. Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik dan benar
3. Kerjakan tugas-tugas praktikum dengan baik, sabar, dan jujur
4. Tanyakan kepada asisten/dosen apabila ada hal-hal yang kurang jelas.
MATERI POKOK
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 tersebut, stored procedure juga memiliki kekurangan. Di antaranya adalah
berpotensi meningkatkan beban server dan penulisnya tidak mudah (memerlukan pengetahuan
yang spesifik). Contoh sintaks stored procedure :
Untuk memanggil stored procedure, digunakan perintah CALL (beberapa DBMS ada yang
menggunakan EXECUTE).
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.
a. Ketikkan pernyataan pembuatan stored procedure berikut:
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.
b. Eksekusi Query tersebut dengan memanggil procedure getMahasiswa()
2. Parameter IN
Stored procedure di contoh sebelumnya memperlihatkan bentuk default (tanpa parameter).
Di sini kita juga bisa mendefinisikan parameter yang nantinya dapat digunakan olehh pernyataan
di body stored procedure.
Sebagai contoh, kita bisa mendapatkan semua data matakuliah di semester tertentu.
Modul Database - Departemen Teknik Elektro dan Informatika
Untuk memanggil stored procedure yang memiliki parameter, maka kita harus
menspesifikasikan argumenya. Misalkan kita ingin mendapatkan data matakuliah di semester 3.
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:
Pemanggilan stored procedure di atas tentunya akan memerlukan dua buah argumen.
a. 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. Dan untuk
memeriksa nilai variabel, gunakan perintah select.
Modul Database - Departemen Teknik Elektro dan Informatika
Langkah selanjutnya, kita bisa memanfaatkan variabel yang telah dideklarasikan untuk
operasi – operasi lain, misalnya sebagai argumen stored procedure.
b. Penambahan Data
Pada operasi penambahan, data – data terkait diisikan melaui argumen. Selanjutnya, isi
stored procedure akan memasukkan data ke dalam tabel.
Berikut adalah contoh stored procedure untuk menambahkan data pada tabel dosen
Operasi – operasi manipulasi data lainnya bisa anda coba sendiri, dan tidak jauh berbeda
dengan pernyataan SQL reguler
3. Parameter OUT
Dalam konteks bahasa pemrograman, parameter OUT analog dengan passing-by- reference.
Dengan demikian, parameter ini nilainya bisa diubah oleh stored procedure.
Untuk mengeksekusi stored procedure dengan parameter OUT, dibutuhkan argumen yang
spesifik.
Lakukan eksekusi pada procedure tersebut untuk mencari jumlah matakuliah yang memiliki sks
= 2. Dengan mendeklarasikan variabel @sks dengan nilai 2 terlebih dahulu.
Lakukan pengecekan pada variabel sks setelah dilakukan eksekusi pada stored procedure
tersebut.
Pendekatan INOUT juga dapat direpresentasikan dengan memisah parameter IN dan OUT
Contoh penggunaanya, misal untuk mendapatkan jumlah mahasiswa yang jenis kelaminya adalah
L.
Maka akan didapat jumlah dari mahasiswa yang berjenis kelamin L adalah:
Di dalam procedure tersebut membutuhkan beberapa variabel tambahan seperti str, sehingga di
dekalrasikan variabel str dengan tipe varchar. Variabel ini digunakan sebagai keluaran dari
procedure tersebut.
Kemudian eksekusi stored procedure tersebut dengan memberikan parameter bilangan
berapapun.
Contoh tersebut merupakan contoh untuk pernyataan kondisi di dalam stored procedure. Dan
berikut merupakan contoh penggunaan perulangan atau LOOPING pada stored procedure.
Modul Database - Departemen Teknik Elektro dan Informatika
MODUL VII
TRIGGER
A. 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
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.
B. 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;
Tabel pembelian
id_pem id_brg jml_beli
1 A10 5
1. Menggunakan Trigger
END //
DELIMITER ;
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 |
+ + + +
4 rows in set (0.00 sec)
END
Timing: BEFORE
Created: NULL
sql_mode:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: didik@localhost
1 row in set (0.02 sec)
END //
DELIMITER ;
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 ;
END //
DELIMITER ;
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 bisa mengandung pernyataan-
pernyataan yang kompleks—termasuk pencabangan, pengulangan,
fungsi-fungsi agregat, bahkan kode pemanggilan prosedur.
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 ;
1. 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.
LATIHAN
1. Menggunakan View
Secara umum, pembuatan view tidak berbeda dengan objek-objek
database lainnya.
a. Ketikkan pernyataan pembuatan view vGetMhs berikut di editor teks.
2. View Kompleks
View dapat mendefinisikan suatu pernyataan yang kompleks, 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
Pada pendekatan subquery, view di atas dapat kita tuliskan sebagai berikut:
CREATE VIEW vSubQuery AS
SELECT *
FROM matakuliah WHERE kode_mk
NOT IN
(
SELECT kode_mk
FROM ambil_mk a, mahasiswa m
WHERE a.nim = m.nim
)
1. 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).
a. Ketikkan pernyataan pembuatan view berikut di editor teks.
CREATE VIEW vMK
AS SELECT *
FROM matakuliah
1. Updatable View
Sebagaimana disinggung di awal, view dapat bersifat updatable. Untuk mengetahui lebih
jelasnya, perhatikan dan ikuti langkah-langkah berikut:
a. Ketikkan pernyataan view sederhana sebagai berikut.
CREATE VIEW vUpdate AS
SELECT *
FROM mahasiswa
TANTANGAN
Coba update data di view vSubQuery yang telah Anda definisikan sebelumnya. Jelaskan
hasilnya!
1. 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:
a. Definisikan updatable view sebagai berikut:
CREATE VIEW vMkOption AS
SELECT * FROM matakuliah WHERE sks < 2
WITH CHECK OPTION
b. Definisikan nested view vMkLocal dengan opsi LOCAL.
CREATE VIEW vMkLocal AS
SELECT * FROM vMkOption WHERE sks > 0
WITH LOCAL CHECK OPTION
c. Definisikan nested view vMkCascade dengan opsi CASCADED.
CREATE VIEW vMkCascade AS
SELECT * FROM vMkOption WHERE sks > 0
WITH CASCADED CHECK OPTION
d. 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)
e. 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'
Pastikan Engine default adalah InnoDB, karena InnoDB dapat melakukan transaksi basis data.
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=InnoDB;
Perlu sekali diperhatikan, Langkah ini hanya dilakukan Ketika InnoDB bukan
default Engine dari basis data
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:
a. Aktifkan transaksi basis data
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
b. 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
e. Login lagi ke basis data yang sama, kemudian periksa isi tabel trans_demo.
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.
a. Ketikkan pernyataan view sederhana sebagai berikut.
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.
a. Aktifkan transaksi basis data.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
f. Sampai langkah ini, seharusnya tidak ada penambahan data baru yang tersimpan.
g. Terapkan transaksi
mysql> COMMIT;
Query OK, 0 rows affected (0.05 sec)
h. Lihat Hasilnya
Sampai di sini seharusnya Anda bisa memahami fungsi checkpointing. Jika belum, sebaiknya ulangi lagi hingga benar-
benar paham
Kumpulan
Praktikum
Departemen Teknik Elektro dan Informatika
Fakultas Teknik - Universitas Negeri Malang
[2025]
Modul 3 : Agregat
Based on Table 1, find the average gross income earned from selling books with stock above 10!
Based on Table 1, get the price of the largest book that is not a comic with a price below 2000 and a stock above 16!
Based on Table 2, get the number of courses that contain the word “System” only if the number is more than 3! (if the
number is less than 3 it will produce an “empty set”)
Modul 4 : Relation n Join
Dapatkan banyak mahasiswa yang mengambil matakuliah. Selesaikan dengan pendekatan join
eksplisit dan implisit.
Kelompokan data mahasiswa yang tidak mengambil matakuliah berdasarkan jenis kelaminnya,
kemudian hitung banyaknya.
Dapatkan nim dan nama mahasiswa yang mengambil matakuliah beserta kode_mk dan nama_mk
yang diambilnya. Selesaikan dengan pendekatan join eksplisit dan implisit.
Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa, Dimana total sks nya lebih dari 4 dan kurang dari 10.
Dapatkan data matakuliah yang tidak diambil oleh mahasiswa terdaftar (mahasiswa yang terdaftar adalah mahasiswa
yang tercatat di tabel mahasiswa).
Tampilkan kd_mk dan mata kuliah yang jumlah mahasiswanya 40.
1. Dapatkan kode dan nama matakuliah dosen yang menjadi Ketua Jurusan Teknik Elektro.
4. Dapatkan data matakuliah dosen yang bukan merupakan Ketua Jurusan Teknik Elektro.
5. Dapatkan data dosen pengajar matakuliah yang tidak diambil oleh mahasiswa.
1. Dapatkan data dosen yang mengajar matakuliah dengan sks lebih besar dari sembarang sks.
2. Dapatkan data mahasiswa yang tinggal satu wilayah dengan dosen yang bukan merupakan Ketua Jurusan Teknik
Elektro.
3. Dapatkan data mahasiswa yang diajar oleh Ketua Jurusan Teknik Elektro.
2. Definisikan stored procedure untuk mengetahui apakah nim sembarang mahasiswa sedang
mengambil matakuliah atau tidak. Jika sedang mengambil, set status “ADA’, dan jika tidak
mengambil, set status “TIDAK ADA”.
3.
3. Definisikan procedure untuk mengetahui apakah sebuah nilai dari parameter procedure bernilai
genap ataukah ganjil.
1. Definisikan Store prosedure untuk mengetahui apakah suatu buku tersedia atau tidak. Jika tersedia, set status
"BUKU TERSEDIA", jika tidak tersedia, set status "BUKU SEDANG KOSONG".
2. Definisikan suatu Stored procedure yang berfungsi untuk menambahkan data pada tabel penulis .
3. Definisikan Stored Procedure untuk mengetahui jumlah buku yang bergenre romance.
Modul 7 : Trigger
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)
2. Buat tabel pembayaran dengan field id_pem dan jumlah, kemudian tambahkan field harga di
tabel barang. Modifikasi trigger INSERT pembelian 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
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)
Modul 8 : View
1 Definisikan updatable view dengan check option untuk mendapatkan data matakuliah yang sksnya di antara 1
dan 4, dan semesternya lebih dari semester terkecil.
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.
3 Definisikan updatable view untuk mendapatkan nim dan nama mahasiswa yang mengambil matakuliah di
semester 3.
4 Definisikan view untuk mendapatkan nama dosen yang mengajar matakuliah dengan jumlah siswa terbanyak.
Modul 9 : Transaction
3. Definisikan stored procedure untuk menangani penarikan berulang. Artinya, penarikan tabungan
dengan nominal tertentu yang dispesifikasikan 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.
Tarik Berulang
Call Test Example :