Modul 2
1.
DELIMITER //
CREATE PROCEDURE Show_Top_Sparepart_Service()
BEGIN
-- Menampilkan sparepart yang paling banyak dibeli
SELECT sp.id_sparepart, sp.nama_sparepart, sp.jenis_sparepart, COUNT(*) AS total_pembelian
FROM tb_pembelian_sparepart AS ps
INNER JOIN tb_sparepart AS sp ON ps.id_sparepart = sp.id_sparepart
GROUP BY sp.id_sparepart
ORDER BY total_pembelian DESC
LIMIT 1;
-- Menampilkan service yang paling banyak dipesan
SELECT s.id_service, s.nama_service, COUNT(*) AS total_pemesanan
FROM tb_pembelian_service AS pservice
INNER JOIN tb_service AS s ON pservice.id_service = s.id_service
GROUP BY s.id_service
ORDER BY total_pemesanan DESC
LIMIT 1;
END //
DELIMITER ;
CALL Show_Top_Sparepart_Service();
2.
DELIMITER //
CREATE PROCEDURE Show_Most_Expensive_Items()
BEGIN
-- Menampilkan harga sparepart yang paling mahal
SELECT id_sparepart, nama_sparepart, jenis_sparepart, MAX(harga) AS harga_sparepart
FROM tb_sparepart;
-- Menampilkan harga service yang paling mahal
SELECT id_service, nama_service, MAX(harga) AS harga_service
FROM tb_service;
END //
DELIMITER ;
CALL Show_Most_Expensive_Items();
3.
DELIMITER //
CREATE PROCEDURE Show_Cheapest_Items()
BEGIN
-- Menampilkan harga sparepart yang paling murah
SELECT id_sparepart, nama_sparepart, jenis_sparepart, MIN(harga) AS harga_sparepart
FROM tb_sparepart;
-- Menampilkan harga service yang paling murah
SELECT id_service, nama_service, MIN(harga) AS harga_service
FROM tb_service;
END //
DELIMITER ;
CALL Show_Cheapest_Items();
4.
DELIMITER //
CREATE PROCEDURE Count_Sparepart_Transactions()
BEGIN
DECLARE total_transactions INT;
-- Menghitung jumlah transaksi pembelian sparepart
SELECT COUNT(DISTINCT id_transaksi) INTO total_transactions
FROM tb_pembelian_sparepart;
-- Menampilkan hasil
SELECT total_transactions AS total_transaksi_pembelian_sparepart;
END //
DELIMITER ;
CALL Count_Sparepart_Transactions();
5.
DELIMITER //
CREATE FUNCTION Generate_Id_Pembelian_Sparepart(
p_nama_pelanggan VARCHAR(255),
p_id_pelanggan INT,
p_nama_pegawai VARCHAR(255),
p_tanggal_pembelian DATE
RETURNS VARCHAR(255)
BEGIN
DECLARE id_pembelian_sparepart VARCHAR(255);
DECLARE nama_pelanggan_prefix VARCHAR(3);
DECLARE nama_pegawai_prefix VARCHAR(3);
DECLARE random_number VARCHAR(5);
-- Mengambil 3 huruf pertama dari nama pelanggan
SET nama_pelanggan_prefix = LEFT(LOWER(p_nama_pelanggan), 3);
-- Mengambil 3 huruf pertama dari nama pegawai
SET nama_pegawai_prefix = LEFT(LOWER(p_nama_pegawai), 3);
-- Konversi tanggal menjadi format yyyymmdd
SET p_tanggal_pembelian = REPLACE(DATE_FORMAT(p_tanggal_pembelian, '%Y%m%d'), '-', '');
-- Generate 5 angka random
SET random_number = LPAD(FLOOR(RAND() * 100000), 5, '0');
-- Gabungkan semua bagian untuk membentuk id_pembelian_sparepart
SET id_pembelian_sparepart = CONCAT(nama_pelanggan_prefix, p_id_pelanggan,
nama_pegawai_prefix, p_tanggal_pembelian, random_number);
RETURN id_pembelian_sparepart;
END //
DELIMITER ;
SELECT Generate_Id_Pembelian_Sparepart('Dodi', 123, 'Andre', '2024-03-12');
SELECT Generate_Id_Pembelian_Sparepart('Sarah', 456, 'John', '2024-03-15');
Mari kita bahas bagian-bagian dari perintah tersebut:
1. LOWER(p_nama_pelanggan): Fungsi LOWER() digunakan untuk mengonversi semua karakter
dalam string p_nama_pelanggan menjadi huruf kecil. Misalnya, jika p_nama_pelanggan adalah
"Dodi", maka hasilnya akan menjadi "dodi".
2. LEFT(string, 3): Fungsi LEFT() digunakan untuk mengambil sejumlah karakter tertentu dari awal
string. Di sini, kita mengambil tiga karakter pertama dari hasil konversi nama pelanggan menjadi
huruf kecil. Dengan demikian, jika nama pelanggan adalah "Dodi", kita akan mengambil "dod".
3. SET nama_pelanggan_prefix: Ini adalah perintah untuk mengatur nilai variabel
nama_pelanggan_prefix dengan hasil dari ekspresi sebelumnya.
Mari kita bahas bagian-bagian dari perintah tersebut:
DATE_FORMAT(p_tanggal_pembelian, '%Y%m%d'): Fungsi DATE_FORMAT() digunakan untuk
memformat tanggal yang diberikan sesuai dengan format yang diinginkan. Dalam hal ini, kita
menggunakan format %Y%m%d, di mana:
%Y: Mewakili tahun dalam format empat digit (contoh: 2024).
%m: Mewakili bulan dalam format dua digit (contoh: 03 untuk Maret).
%d: Mewakili hari dalam format dua digit (contoh: 18).
Fungsi ini akan mengembalikan tanggal dalam format string YYYYMMDD.
REPLACE(string, '-', ''): Fungsi REPLACE() digunakan untuk mengganti semua kemunculan suatu
substring dengan substring lain dalam string yang diberikan. Dalam hal ini, kita mengganti semua
kemunculan tanda penghubung ('-') dengan string kosong (''). Ini berarti kita menghapus semua
tanda penghubung dari string.
string: String yang akan diproses.
'-': Substring yang akan diganti.
'': Substring pengganti (dalam hal ini, string kosong).
6.
DELIMITER //
CREATE FUNCTION Generate_Id_Pembelian_Service(
p_nama_pelanggan VARCHAR(255),
p_id_transaksi INT,
p_nama_pegawai VARCHAR(255),
p_id_pelanggan INT
RETURNS VARCHAR(255)
BEGIN
DECLARE id_pembelian_service VARCHAR(255);
DECLARE nama_pelanggan_prefix VARCHAR(3);
DECLARE nama_pegawai_prefix VARCHAR(3);
DECLARE random_number VARCHAR(5);
-- Mengambil 3 huruf pertama dari nama pelanggan
SET nama_pelanggan_prefix = LEFT(LOWER(p_nama_pelanggan), 3);
-- Mengambil 3 huruf pertama dari nama pegawai
SET nama_pegawai_prefix = LEFT(LOWER(p_nama_pegawai), 3);
-- Generate 5 angka random
SET random_number = LPAD(FLOOR(RAND() * 100000), 5, '0');
-- Gabungkan semua bagian untuk membentuk id_pembelian_service
SET id_pembelian_service = CONCAT(nama_pelanggan_prefix, p_id_transaksi, nama_pegawai_prefix,
p_id_pelanggan, random_number);
RETURN id_pembelian_service;
END //
DELIMITER ;
SELECT Generate_Id_Pembelian_Service('Dodi', 123, 'Andre', 456);
Mari kita bahas bagian-bagian dari perintah tersebut:
1. RAND(): Fungsi RAND() digunakan untuk menghasilkan nilai acak antara 0 dan 1.
2. FLOOR(RAND() * 100000): Dalam bagian ini, kita mengambil nilai acak yang dihasilkan oleh
RAND() dan mengalikannya dengan 100000 untuk mendapatkan nilai antara 0 dan 99999.
Kemudian, FLOOR() digunakan untuk membulatkan hasil ke bawah ke bilangan bulat terdekat.
3. LPAD(value, length, 'pad_string'): Fungsi LPAD() digunakan untuk memperluas nilai value
dengan menambahkan karakter 'pad_string' ke kiri hingga mencapai panjang length. Jika
panjang nilai value sudah sama atau lebih besar dari length, fungsi ini tidak melakukan apa pun.
Dalam hal ini, 'pad_string' adalah '0'.
value: Nilai yang akan dipanjangkan.
length: Panjang maksimum hasil yang diinginkan.
'pad_string': Karakter yang akan ditambahkan jika perlu.