Pertemuan 5 - Function, Trigger, dan Optimasi Query

Tujuan Pembelajaran

Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:

  1. Memahami dan menggunakan berbagai Function dalam SQL Server (String, Date, dan Aggregate).
  2. Membuat Trigger untuk otomatisasi tindakan dalam database.
  3. Melakukan troubleshooting terhadap error dan performa query.
  4. Melakukan optimasi query agar database berjalan lebih efisien.

1. Pengenalan Function di SQL Server

Function adalah perintah bawaan SQL Server untuk melakukan operasi tertentu, seperti manipulasi teks, tanggal, dan perhitungan.

Jenis-jenis Function

Jenis FunctionKegunaan
String FunctionMengolah dan memanipulasi teks
Date FunctionMengelola dan menghitung waktu/tanggal
Aggregate FunctionMelakukan perhitungan statistik (SUM, AVG, dll)

2. String Function

Contoh Query

1
2
3
4
5
6
7
8
-- Mengubah teks menjadi huruf besar
SELECT UPPER(Judul) AS JudulBesar FROM Buku;

-- Mengambil sebagian teks
SELECT LEFT(Judul, 10) AS PotonganJudul FROM Buku;

-- Menggabungkan dua kolom teks
SELECT CONCAT(Judul, ' - ', Penulis) AS InfoBuku FROM Buku;

3. Date Function

Contoh Query

1
2
3
4
5
6
7
8
-- Menampilkan tanggal hari ini
SELECT GETDATE() AS TanggalSekarang;

-- Mengambil tahun dari tanggal pinjam
SELECT YEAR(TanggalPinjam) AS TahunPinjam FROM Transaksi;

-- Menambah 7 hari dari tanggal pinjam
SELECT DATEADD(DAY, 7, TanggalPinjam) AS TanggalKembali FROM Transaksi;

4. Aggregate Function

Contoh Query

1
2
3
4
5
6
7
8
9
10
-- Menghitung jumlah buku
SELECT COUNT(*) AS JumlahBuku FROM Buku;

-- Menghitung rata-rata tahun terbit
SELECT AVG(TahunTerbit) AS RataRataTahun FROM Buku;

-- Menampilkan jumlah transaksi tiap anggota
SELECT IDAnggota, COUNT(*) AS TotalTransaksi
FROM Transaksi
GROUP BY IDAnggota;

5. Trigger Overview

Trigger adalah prosedur otomatis yang dijalankan ketika terjadi perubahan data (INSERT, UPDATE, DELETE).

Contoh 1 - Trigger Setelah Menambah Buku

1
2
3
4
5
6
7
CREATE TRIGGER trg_AfterInsertBuku
ON Buku
AFTER INSERT
AS
BEGIN
PRINT 'Data buku baru telah ditambahkan!';
END;

Contoh 2 - Trigger untuk Update Stok Buku Setelah Transaksi

1
2
3
4
5
6
7
8
9
CREATE TRIGGER trg_UpdateStokBuku
ON Transaksi
AFTER INSERT
AS
BEGIN
UPDATE Buku
SET Stok = Stok - 1
WHERE IDBuku IN (SELECT IDBuku FROM inserted);
END;

6. Troubleshooting Query

Contoh Penggunaan TRY…CATCH

1
2
3
4
5
6
BEGIN TRY
INSERT INTO Anggota (Nama, Alamat) VALUES (NULL, 'Bandung');
END TRY
BEGIN CATCH
PRINT 'Terjadi kesalahan saat menambah data anggota!';
END CATCH;

Menampilkan Waktu Eksekusi Query

1
2
3
SET STATISTICS TIME ON;
SELECT * FROM Transaksi;
SET STATISTICS TIME OFF;

7. Optimasi Query

Teknik Umum

  1. Gunakan index pada kolom WHERE atau JOIN.
  2. Hindari SELECT *, ambil hanya kolom yang diperlukan.
  3. Gunakan JOIN dengan kondisi efisien.
  4. Gunakan Stored Procedure untuk query kompleks.

Contoh Optimasi

1
2
3
4
5
6
-- Kurang efisien
SELECT * FROM Buku WHERE YEAR(TahunTerbit) = 2020;

-- Lebih efisien
SELECT Judul, Penulis FROM Buku
WHERE TahunTerbit BETWEEN 2020 AND 2021;

8. Latihan (Durasi ±2 jam)

Latihan 1 - Function Dasar

  1. Tampilkan nama anggota dalam huruf besar.
  2. Tampilkan 5 huruf pertama dari nama buku.
  3. Hitung jumlah buku yang diterbitkan setelah tahun 2015.

Latihan 2 - Date Function

  1. Tampilkan tanggal pinjam dan tanggal kembali (7 hari setelah pinjam).
  2. Hitung jumlah transaksi pada tahun 2024.

Latihan 3 - Trigger

  1. Buat trigger trg_LogTransaksi untuk mencatat setiap transaksi baru ke tabel LogTransaksi.
  2. Buat trigger trg_CekStok yang menolak transaksi jika stok buku = 0.

Latihan 4 - Troubleshooting & Optimasi

  1. Buat query yang error, lalu tangani menggunakan blok TRY...CATCH.
  2. Bandingkan waktu eksekusi antara SELECT * dan query dengan kolom tertentu.

9. Tugas Mandiri

Buat laporan analisis performa query berisi:

  • Contoh query lambat dan versi optimasinya.
  • Penjelasan teknik optimasi yang digunakan.
  • Minimal 3 contoh function dan 1 trigger buatanmu berdasarkan database perpustakaan.