0% menganggap dokumen ini bermanfaat (0 suara)
11 tayangan81 halaman

Kitab Suci SQL Fixed

Dokumen ini adalah modul tentang SQL yang digunakan dalam pengelolaan database relasional, mencakup perintah DDL untuk mendefinisikan dan memodifikasi skema database serta perintah DML untuk manipulasi data. Contoh perintah SQL seperti CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, dan DELETE dijelaskan dengan sintaks dan contoh penggunaannya. Modul ini juga memberikan latihan praktis untuk membuat dan mengelola tabel dalam database.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
11 tayangan81 halaman

Kitab Suci SQL Fixed

Dokumen ini adalah modul tentang SQL yang digunakan dalam pengelolaan database relasional, mencakup perintah DDL untuk mendefinisikan dan memodifikasi skema database serta perintah DML untuk manipulasi data. Contoh perintah SQL seperti CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, dan DELETE dijelaskan dengan sintaks dan contoh penggunaannya. Modul ini juga memberikan latihan praktis untuk membuat dan mengelola tabel dalam database.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 81

Kitab Suci SQL

Departemen Teknik Elektro dan Informatika


Fakultas Teknik - Universitas Negeri Malang
[2025]
Modul Database - Departemen Teknik Elektro dan Informatika

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).

2. 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, DROP, dan TRUNCATE
CREATE : Membuat database, tabel, indeks, atau objek lainnya
ALTER : Mengubah struktur tabel yang sudah ada
DROP : Menghapus database atau tabel
TRUNCATE : Menghapus semua data dalam tabel tanpa menghapus atau mengubah
strukturnya

a. Membuat Tabel – CREATE


Sintaks dan Query operasi untuk membuat database dapat dituliskan sebagai berikut:

Contoh membuat database bernama akademik, pernyataan SQL-nya dituliskan sebagai


berikut:

[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

NOT NULL → Menandakan bahwa kolom email tidak boleh kosong


(wajib diisi)
PRIMARY KEY (id) → Menjadikan kolom id sebagai kunci utama

b. Mengubah Struktur Tabel – ALTER


• Menambah Kolom
Sintaks dan Query operasi untuk menambah kolom dapat dituliskan sebagai berikut:

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.

c. Menghapus Tabel – DROP


Sintaks dan Query operasi untuk menghapus tabel dapat dituliskan sebagai berikut:

Misalnya ingin menghapus tabel mahasiswa, pernyataan SQL-nya dituliskan sebagai berikut:

Keterangan:
DROP mahasiswa → Menghapus tabel mahasiswa beserta semua datanya dari
database

d. Menghapus Data dalam Tabel tanpa Mengubah Strukturnya – TRUNCATE


Sintaks dan Query operasi untuk menghapus data dalam tabel tanpa mengubah
strukturnya dapat dituliskan sebagai berikut:

Keterangan:

[2025] 4
Modul Database - Departemen Teknik Elektro dan Informatika

TRUNCATE mahasiswa → Menghapus semua data di tabel mahasiswa, tetapi struktur


tabel tetap ada. Berbeda dengan DROP, TRUNCATE hanya
menghapus data, tidak menghapus tabel.

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

a. Mengambil/Menampilkan Data - SELECT


Sintaks dan Query operasi mengambil data dapat dituliskan sebagai berikut:

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.

Untuk efisiensi, karakter asterik sebaiknya


digunakan jika ingin me-retrieve seluruh
nilai field

b. Menambah Data - INSERT


Sintaks dan Query operasi menambah data dapat dituliskan sebagai berikut:

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

V (value yang diisikan) → Nilai-nilai yang akan dimasukkan ke kolom yang


disebutkan. Nilai harus sesuai urutan dengan kolom di
bagian (A1, A2, ..., An).

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.

c. Modifikasi Data - UPDATE


Sintaks dan Query operasi modifikasi data dapat dituliskan sebagai berikut:

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

WHERE id=1 → Hanya baris dengan id=1 yang akan dimodifikasi

Perhatikan, operasi modifikasi tanpa menyertakan klausa WHERE akan


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

d. Menghapus Data - DELETE


Sintaks dan Query operasi menghapus data dapat dituliskan sebagai berikut:

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.

Perhatikan juga, operasi penghapusan tanpa menyertakan klausa WHERE akan


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

[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:

c. Eksekusi pernyataan SQL dengan klik tombol “GO”


2. Membuat Tabel
Membuat tabel mahasiswa_(nama mahasiswa) dengan struktur sebagai berikut:
No Nama Field/Kolom Tipe Data Keterangan
1 Id_mahasiswa INT Primary Key, ID unik mahasiswa, auto-increment
VARCHAR Nama Mahasiswa maksimal 100 karakter, wajib
2 Nama
(100) diisi
Pilihan tetap, hanya dapat diisi Laki-Laki atau
3 Jenis Kelamin ENUM
Perempuan
VARCHAR Program studi mahasiswa, maksimal 50
4 Prodi
(50) karakter, wajib diisi
VARCHAR Alamat lengkap mahasiswa. maksimal 50
5 Alamat
(50) karakter, wajib diisi
6 Angkatan YEAR Tahun angkatan mahasiswa, wajib diisi
Langkah-langkah:
a. Klik Database “Praktikum_SQL” yang telah dibuat
b. Tuliskan pernyataan SQL berikut:

c. Eksekusi pernyataan SQL

[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:

c. Eksekusi pernyataan SQL.


4. Menambahkan Data
a. Setelah itu isikan tabel mahasiswa dengan data sebagai berikut:
Nama Jenis_Kelamin Prodi Alamat Angkatan
Budi Santoso Laki-Laki Teknik Informatika Jl. Merdeka No. 1 2020
Siti Aminah Perempuan Sistem Informasi Jl. Mawar No. 2 2021
Andi Pratama Laki-Laki Teknik Elektro Jl. Melati No. 3 2022
Rina Lestari Perempuan Manajemen Jl. Anggrek No. 4 2020
Dewi Sartika Perempuan Akuntansi Jl. Dahlia No. 5 2021
Yudi Kurniawan Laki-laki Teknik Mesin Jl. Kenanga No. 6 2019
Lina Marlina Perempuan Teknik Sipil Jl. Flamboyan No. 7 2022
Agus Saputra Laki-Laki Teknik Informatika Jl. Cemara No. 8 2020
Fajar Setiawan Laki-Laki Sistem Informasi Jl. Jambu No. 9 2021
Nina Susanti Perempuan Manajemen Jl. Duirian No. 10 2023
Slamet Riyadi Laki-Laki Teknik Elektro Jl. Rambutan No. 11 2022
Tina Ardiani Perempuan Akuntansi Jl. Mangga No. 12 2021
Hendra Gunawan Laki-Laki Teknik Sipil Jl. Pisang No. 13 2020
Maya Indah Perempuan Manajemen Jl. Apel No. 14 2023
Ridho Pratama Laki-Laki Teknik Mesin Jl. Jeruk No.15 2019
b. Klik Database “Praktikum_SQL” yang telah dibuat
c. Buat pernyataan SQL seperti berikut:

[2025] 10
Modul Database - Departemen Teknik Elektro dan Informatika

d. Eksekusi pernyataan SQL


e. Hasilnya akan seperti berikut:

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

c. Eksekusi pernyataan SQL


d. Hasilnya untuk record dengan id_mahasiswa=1 akan terupdate seperti berikut:

6. Seleksi Data
a. Klik Database “Praktikum_SQL” yang telah dibuat pada latihan 1.
b. Buat pernyataan SQL seperti berikut:

c. Eksekusi pernyataan SQL


d. Hasilnya akan seperti berikut:

Buatlah tabel kedua yaitu tabel matakuliah_(nama mahasiswa) dalam Database


“Praktikum_SQL” dengan struktur sebagai berikut:
No Nama Field/Kolom Tipe Data Keterangan
1 Kode_mk Primary Key, kode unik mata kuliah, maksimal
VARCHAR(10)
10 karakter, wajib diisi
VARCHAR Nama matakuliah maksimal 50 karakter, wajib
2 Nama_mk
(50) diisi
Jumlah SKS mata kuliah, menggunakan angka
3 SKS TINYINT
kecil, wajib diisi
Semester mata kuliah, menggunakan angka
4 Semester TINYINT
kecil, wajib diisi
a. Tuliskan pernyataan SQL berikut:

[2025] 12
Modul Database - Departemen Teknik Elektro dan Informatika

b. Eksekusi pernyataan SQL


c. Periksa hasil pembuatan tabel pada sidebar, dan hasilnya akan seperti berikut:

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

g. Eksekusi pernyataan SQL


h. Hasilnya akan seperti berikut:

[2025] 14
Modul Database - Departemen Teknik Elektro dan Informatika

7. Seleksi dengan Kriteria


a. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, dan Semester
yang SKSnya 3:

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

b. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, dengan SKS 3
dan Semester 4

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

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

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

8. Seleksi dengan Operator LIKE


Operator LIKE memungkinkan pengambilan data yang mirip atau mendekati kata kunci.
a. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, SKS dan
Semester yang matakuliahnya berawalan “Pemrograman”

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

b. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, SKS dan
Semester yang matakuliahnya berakhiran “Data”

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

c. Tuliskan pernyataan SQL berikut untuk mengambil Kode_mk, Nama_mk, SKS dan
Semester yang matakuliahnya mengandung kata “Berorientasi”

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

[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

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

b. Tuliskan pernyataan SQL berikut untuk mengurutkan nama matakuliah pada tabel
matakuliah dengan urutan descending

Eksekusi pernyataan SQL dan hasilnya akan seperti berikut:

[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

BY clause is shown as follows:

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.

1. Eliminate Data Duplication


a. After the database and tables have been created, enter the SQL Editor menu on
PhpMyAdmin.
b. Write down the following SQL statement:

c. Execute the SQL statement by clicking the “GO” button.


Database Module - Department of Electrical Engineering and Informatics

d. Notice the data with the same name in the query result. To eliminate them, add
the DISTINCT keyword :

2. Getting the Amount of Data


a. Write down the following SQL statement:

b. Execute the SQL statement by clicking the “GO” button.


3. Getting the Total Amount
a. Write down the following SQL statement:

b. Execute the SQL statement by clicking the “GO” button.


4. Getting the Average Value
a. Write down the following SQL statement :

b. Excute the SQL statement by clicking the “GO” button.


5. Mendapatkan Nilai Minimum
a. Write down the following SQL statement :

b. Excute the SQL statement by clicking the “GO” button.


6. Mendapatkan Nilai Maximum
a. Write down the following SQL statement:

b. Excute the SQL statement bt clicking the “GO” button.

7. Categorizing Data
a. Write down the following SQL statement :

b. Excute the SQL statement bt clicking the “GO” button

8. Screening Aggregate Function Results


Database Module - Department of Electrical Engineering and Informatics

a. Write down the following SQL statement :

b. Excute the SQL statement bt clicking the “GO” button


Modul 4 : Relasi n Join
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 table di dalam basis data relasional dan
menghasilkan sebuah tabel (temporary) baru yang disebut sebagai joined tabel.
Join dapat diklasifikasikan ke dalam dua jenis, yaitu inner join dan outer join
a. Inner Join
Inner join pada dasarnya adalah menemukan persimpangan (intersection) antara dua buah
tabel. Sintaks inner join diperlihatkan sebagai berikut:

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.

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:
Right outer join antara table A dan B dapat diilustrasikan dalam diagram Venn seperti
Gambar 3.

Gambar 3. Right Outer Join

● Full Outer Join


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

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.
3. Union
MySQL Union adalah statemen yang mengkombinasikan dua buah atau lebih resultset dari
beberapa tabel dengan statemen SELECT sehingga menjadi satu buah resultset. Union
Statement memiliki beberapa ketentuan sebagai berikut:
a. Jumlah kolom/field dari setiap statement SELECT harus sama.
b. Tipe data kolom/field dari setiap statement SELECT harus kompatibel.
Secara default statement UNION akan menghapus semua record duplikat dari resultset.
Apabila Anda ingin record duplikat tetap ditampilkan maka pada resultset tuliskan secara
eksplisit UNION ALL. Perbedaan Union dan Union All dapat dijelaskan pada gambar diagram
Venn 5 dan 6.

Gambar 5. Union

Gambar 6. Union All


Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai berikut:
L6TIH6И
1. Relationship
Dalam latihan ini digunakan dua buah table bernama karyawan dan departemen dengan
relationship bekerja pada. Struktur tabelnya diperlihatkan sebagai berikut:

Data yang digunakan adalah sebagai berikut:

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:

Atau dalam bentuk implisitnya:


4. Union
Buatlah tabel baru bernama karyawan2 pada database yang sama. Data tabelnya adalah
sebagai berikut:

Setelah itu coba lakukan penggabungan dengan perintah:

Lakukan perintah yang sama namun menggunakan UNION ALL. Jelaskan apa perbedaan fungsi
UNION dan UNION ALL.
Modul Database - Departemen Teknik Elektro dan Informatika

Modul 5 : Sub Query


SUBQUERY
Subquery (disebut juga subselect atau nestedselect / 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 querydata. Sebagai contoh, misal 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.
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 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

Gambar 1. Scalar Subquery


Subquery baris tunggal dapat menggunakan operator baris tunggal =, >, >=, <, <=, atau <>
2. 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 subquery


Subquery baris ganda dapat menggunakan operator komparasi IN, ANY, SOME, atau ALL
3. Multiple – Column Subquery
Subquery kolom ganda (multiple-column) mengembalikan lebih dari satu baris dan satu
kolom data. Bentuk subquery ini diperlihatkan seperti Gambar 3.

Gambar 2 Multiple – column subquery

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

Himpunan entitas di atas dapat direpresentasikan kedalam diagram skema (schema


diagram) seperti 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.

3. Multiple – Row Subquery


Pada subquery ini, kita menggunakan operator komparasi IN, ANY / SOME, atau ALL.
a. Operator IN
Operator IN memiliki arti : sama dengan member di dalam list. Sebagai contoh, kita bisa
menggunakan operator ini untuk mendapatkan data dosen yang mengajar matakuliah.
Modul Database - Departemen Teknik Elektro dan Informatika

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.

Operator = ANY ekuivalen dengan IN


Operator < ANY ekuivalen dengan MAX (kurang dari maks)
Operator > ANY ekuivalen dengan MIN (lebih dari min)

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.

Operator < ALL ekuivalen dengan MIN (kurang dari min)


Operator > ALL ekuivalen dengan MAX (lebih dari maks)
Modul Database - Departemen Teknik Elektro dan Informatika

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 main query.
Sebagai contoh, misalkan kita ingin menampilkan data matakuliah yang semester dan sksnya
sesuai dengan semester dan sks matakuliah dengan kode “PTI447”.

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, EXIST
akan mengembalikan nilai true. Begitu pula sebaliknya, jika tidak mengembalikan hasil.
a. EXISTS
Pernyataan berikut akan mendapatkan data matakuliah yang diambil oleh mahasiswa.

b. NOT EXISTS
Pernyataan berikut akan mendapatkan data matakuliah yang tidak diambil oleh mahasiswa
Modul Database - Departemen Teknik Elektro dan Informatika

Modul 6 : Stored Procedure


1. Mahasiswa mampu memahami konsep dasar stored procedure, kelebihan dan
kekurangannya.
2. Mahasiswa mampu memahami implementasi stored procedure di dalam basis data.
3. Mahasiswa mampu menyelesaikan operasi – operasi data spesifik dengan memanfaatkan
stored procedure

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).

Dalam Implementasinya, penggunaan stored procedure sering melibatkan parameter. Di


MySQL, parameter stored procedure dibedakan menjadi tiga mode: IN, OUT, dan INOUT.
a. IN  Parameter yang merupakan mode default ini mengindikasikan bahwa sebuah parameter
dapat di-pass ke dalam stored procedure tetapi nilainya tidak dapat diubah dari dalam stored
procedure
b. OUT  Mode ini mengindikasikan bahwa stored procedure dapat mengubah parameter dan
mengirimkan kembali ke program pemanggil
c. INOUT  Mode ini pada dasarnya merupakan kombinasi dari mode IN dan OUT.
Sintaks pendefinisian parameter diperlihatkan sebagai berikut:
Modul Database - Departemen Teknik Elektro dan Informatika

Stored procedure dapat mencerminkan beragam operasi data, misalnya seleksi,


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

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

Lakukan eksekusi terhadap procedure tersebut

Selanjutnya lakukan pengecekan data pada tabel dosen.


Modul Database - Departemen Teknik Elektro dan Informatika

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.

Perhatikan, argumen harus menggunakan notasi @, yang mengindikasikan sebagai suatu


parameter OUT.
Langkah selanjutnya, untuk mendapatkan nilai variabel, gunakan pernyataan SELECT

Parameter mode OUT juga bisa dikombinasikan dengan mode IN.


4. Parameter INOUT
Pada parameter dengan mode INOUT ini, kita bisa mengirimkan parameter kedalam stored
procedure dan mendapatkan nilai kembalian yang baru dari stored procedure yang didefinisikan.
Sebagai contoh, definisikan stored procedure seperti berikut:
Modul Database - Departemen Teknik Elektro dan Informatika

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.

Kemudian lakukan eksekusi pada procedure tersebut.


Modul Database - Departemen Teknik Elektro dan Informatika

Maka akan didapat jumlah dari mahasiswa yang berjenis kelamin L adalah:

5. Pencabangan dan Pengulangan


Penggunaan pernyataan – pernyataan percabangan ataupun pengulangan dapat dilakukan
di dalam stored procedure.Sehingga dapat digunakan untuk menghasilkan suatu procedure yang
lebih kompleks. Contoh berikut merupakan penggunaan dari pernyataan IF di dalam stored
procedure.

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

Lakukan eksekusi pada procedure tersebut.


Modul Praktikum Basis Data

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.

Departemen Teknik Elektro 45


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

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;

CREATE TABLE pembelian (


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

Data yang digunakan adalah sebagai berikut:


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

Tabel pembelian
id_pem id_brg jml_beli
1 A10 5

1. Menggunakan Trigger

Departemen Teknik Elektro 46


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

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.
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)

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)

Terlihat bahwa trigger sudah bekerja seperti yang diharapkan, di mana


setiap penambahan baru akan menginkremen nilai stok.
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

Departemen Teknik Elektro 47


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

sql_mode:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: didik@localhost
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)

Untuk memastikan bahwa operasi penghapusan sudah berhasil, periksa


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

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.
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 //

DELIMITER ;

Pada contoh di atas, penambahan data pembelian akan mengakibatkan


nilai stok barang berubah menyesuaikan banyaknya nilai jumlah
pembelian.

Departemen Teknik Elektro 48


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

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 ;

Contoh penggunaan trigger deleteChild diperlihatkan sebagai berikut:

Departemen Teknik Elektro 49


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

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 ;

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 //

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)

Departemen Teknik Elektro 50


Fakultas Teknik Universitas Negeri Malang (UM)
Modul Praktikum Basis Data

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 ;

Departemen Teknik Elektro 51


Fakultas Teknik Universitas Negeri Malang (UM)
Modul 8 : View
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:
CREATE
[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]

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.

CREATE VIEW vGetMhs


AS
SELECT * FROM mahasiswa

b. Eksekusi file trigger (sesuaikan path lokasi penyimpanan file).


c. Pemanggilan view tak ubahnya suatu tabel.

d. Apabila diperlukan, kita juga diperkenankan melakukan penyaringan pada view.

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, 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

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

b. Eksekusi file view.


c. 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;

Eksekusi file view vMK5.


Hasil pemanggilan masing-masing view diperlihatkan sebagai berikut:

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

b. Periksa terlebih dahulu hasil pengambilan data.


1. 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

2. Periksa hasil modifikasi di view.

3. Langkah selanjutnya, periksa data di tabel mahasiswa.


Terlihat bahwa modifikasi di view vUpdate akan memengaruhi data di tabel 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'

Penambahan pada view vMkCascade gagal dilaksanakan karena terhambat oleh


rule opsi CASCADE; di mana view induk (vMkOption) bahwa sks harus kurang dari 2.
Modul 9 : Transaction
MATERI POKOK
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:
a. Saldo Tono dikurangi sebesar 9.000.000.

b. 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 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 dalam 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).
a. 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.
b. Consistency: Jika basis data pada awalnya dalam keadaan konsisten, maka pelaksanaan
transaksi dengan sendirinya juga harus meninggalkan basis data tetap dalam status
konsisten.
c. Isolation: Isolasi memastikan bahwa secara bersamaan (konkuren) eksekusi transaksi
terisolasi dari yang lain.
d. Durability: Begitu transaksi telah dilaksanakan (di-commit) maka perubahan yang
diakibatkan tidak akan hilang atau tahan lama (durable), sekalipun ada kegagalan
sistem.
Properti ACID memastikan perilaku yang dapat diprediksi dan menguatkan peran transaksi
sebagai konsep all or nothing yang didesain untuk mengurangi manajemen load ketika ada
banyak variabel.
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:

Pastikan Engine default adalah InnoDB, karena InnoDB dapat melakukan transaksi basis data.

Perlu sekali diperhatikan : engine non-transactional (seperti MyISAM)


tidak dapat digunakan untuk mengimplementasikan 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;

Perhatikan, tipe atau storage engine-nya harus InnoDB.


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

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

c. Periksa hasil penambahan data.

d. Keluar dari terminal.


mysql> exit
Bye

e. Login lagi ke basis data yang sama, kemudian periksa isi tabel trans_demo.

Mengapa tabel trans_demo kosong? Karena kita tidak menerapkan transaksi


dengan memanggil COMMIT. Adapun penutupan prompt mysql mengakibatkan
transaksi di-rollback secara implisit.
f. 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)
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.
a. Ketikkan pernyataan view sederhana sebagai berikut.

b. Tetapkan nilai autocommit menjadi 0 (mode transaksi on).

c. Tambahkan baris data berikut ke tabel.

mysql> INSERT INTO trans_demo -> VALUES('db2');


Query OK, 1 row affected (0.00 sec)
d. Keluar dari prompt mysql, kemudian login kembali dan periksa hasil penambahan data.
Seharusnya, hasil penambahan tidak akan diterapkan secara permanen di basis data.

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.

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)

b. Terlebih dahulu periksa nilai di tabel trans_demo.

c. Tambahkan baris data berikut:


mysql> INSERT INTO trans_demo VALUES('sybase');
Query OK, 1 row affected (0.02 sec)
d. Periksa hasil.

e. Berikan pernyataan ROLLBACK guna membatalkan rangkaian perintah dalam satu


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

f. Sampai langkah ini, seharusnya tidak ada penambahan data baru yang tersimpan.

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.
a. Aktifkan transaksi basis data.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

b. Periksa terlebih dahulu nilai pada tabel trans_demo

c. Tambahkan baris data berikut


mysql> INSERT INTO trans_demo VALUES('sybase');
Query OK, 1 row affected (0.02 sec)

d. Gunakan pernyataan SAVEPOINT untuk menandai perintah pertama.


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

e. Tambahkan lagi baris baru


mysql> INSERT INTO trans_demo VALUES('sqlite');
Query OK, 1 row affected (0.00 sec)

f. Berikan perintah rollback ke savepoint my_point1.


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

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.

Tampilkan data Instruktur yang mengajarkan ‘Basis Data’

Tampilkan data Instruktur yang tidak mengajar.

Gabungkan kedua tabel Toko tersebut dengan JOIN dan UNION


Modul 5 : Sub Query

1. Dapatkan kode dan nama matakuliah dosen yang menjadi Ketua Jurusan Teknik Elektro.

2. Dapatkan data mahasiswa yang tidak mengambil matakuliah.

3. Dapatkan data dosen yang mengajar matakuliahdiatas semester 3.

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.

Modul 6 : Stored Procedure


1. Definisikan Procedure untuk mendapatkan jumlah matakuliah yang diampu oleh dosen terdaftar

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

1. Definisikan stored procedure untuk menangani transfer antarrekening dengan mengimplementasikan


transaksi basis data. Setelah transfer uang berhasil, tampilkan sisa saldo rekening pengirim ke layar.
Tranfer Uang

2. Definisikan stored procedure untuk menangani penarikan tabungan dengan mengimplementasikan


transaksi basis data. Skenarionya: penarikan hanya dapat dilakukan jika:
a. Saldo mencukupi
b. Menyisakan saldo minimal 50.000 dan
c. Jumlah (nominal) penarikan minimal 50.000 dan maksimal 500.000.
Tarik Uang

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 :

Full and Transitive Dependency

Anda mungkin juga menyukai