🧩 Tugas Tambahan – Praktikum Sistem Basis Data II
Nama Database:
inventori_toko
🎯 Tujuan
Mahasiswa mampu membuat dan mengimplementasikan database baru menggunakan konsep relasi antar tabel dan operasi JOIN untuk menampilkan data yang saling berhubungan.
📘 Deskripsi Tugas
Buatlah sebuah database dengan nama inventori_toko yang digunakan untuk mencatat data toko, produk, dan transaksi penjualan. Database ini memiliki tiga tabel utama sebagai berikut:
🏪 1. Tabel toko
| Nama Kolom | Tipe Data | Keterangan |
|---|---|---|
| kode_toko | CHAR(5) | PRIMARY KEY |
| nama_toko | VARCHAR(50) | - |
| alamat | VARCHAR(100) | - |
| kota | VARCHAR(30) | - |
CREATE TABLE toko (
kode_toko CHAR(5) PRIMARY KEY,
nama_toko VARCHAR(50),
alamat VARCHAR(100),
kota VARCHAR(30)
);
Data contoh:
INSERT INTO toko (kode_toko, nama_toko, alamat, kota) VALUES
('T001', 'Toko Sinar Jaya', 'Jl. Merdeka No. 45', 'Samarinda'),
('T002', 'Toko Maju Bersama', 'Jl. Pahlawan No. 12', 'Balikpapan'),
('T003', 'Toko Berkah Abadi', 'Jl. Ahmad Yani No. 87', 'Bontang');
📦 2. Tabel produk
| Nama Kolom | Tipe Data | Keterangan |
|---|---|---|
| kode_produk | CHAR(7) | PRIMARY KEY |
| nama_produk | VARCHAR(50) | - |
| harga | DECIMAL(10,2) | - |
| stok | INT | - |
CREATE TABLE produk (
kode_produk CHAR(7) PRIMARY KEY,
nama_produk VARCHAR(50),
harga DECIMAL(10,2),
stok INT
);
Data contoh:
INSERT INTO produk (kode_produk, nama_produk, harga, stok) VALUES
('P001', 'Sabun Mandi', 5000, 100),
('P002', 'Shampoo 250ml', 12000, 50),
('P003', 'Pasta Gigi', 8000, 70),
('P004', 'Detergen', 15000, 40);
🧾 3. Tabel penjualan
| Nama Kolom | Tipe Data | Keterangan |
|---|---|---|
| kode_transaksi | CHAR(8) | PRIMARY KEY |
| kode_toko | CHAR(5) | FOREIGN KEY |
| kode_produk | CHAR(7) | FOREIGN KEY |
| jumlah | INT | - |
| tanggal_transaksi | DATE | - |
CREATE TABLE penjualan (
kode_transaksi CHAR(8) PRIMARY KEY,
kode_toko CHAR(5),
kode_produk CHAR(7),
jumlah INT,
tanggal_transaksi DATE,
FOREIGN KEY (kode_toko) REFERENCES toko(kode_toko),
FOREIGN KEY (kode_produk) REFERENCES produk(kode_produk)
);
Data contoh:
INSERT INTO penjualan (kode_transaksi, kode_toko, kode_produk, jumlah, tanggal_transaksi) VALUES
('TRX0001', 'T001', 'P001', 20, '2024-10-01'),
('TRX0002', 'T001', 'P002', 15, '2024-10-02'),
('TRX0003', 'T002', 'P003', 30, '2024-10-03'),
('TRX0004', 'T002', 'P004', 10, '2024-10-03'),
('TRX0005', 'T003', 'P001', 25, '2024-10-04');
🧮 Tugas Query SQL
1️⃣ Tampilkan data lengkap penjualan
Menampilkan nama_toko, kota, nama_produk, jumlah, dan tanggal_transaksi.
SELECT t.nama_toko, t.kota, p.nama_produk, j.jumlah, j.tanggal_transaksi
FROM penjualan j
JOIN toko t ON j.kode_toko = t.kode_toko
JOIN produk p ON j.kode_produk = p.kode_produk;
2️⃣ Tampilkan total penjualan (jumlah) per toko
SELECT t.nama_toko, SUM(j.jumlah) AS total_penjualan
FROM penjualan j
JOIN toko t ON j.kode_toko = t.kode_toko
GROUP BY t.nama_toko;
3️⃣ Tampilkan daftar produk yang belum pernah terjual
(Gunakan LEFT JOIN dan kondisi IS NULL)
SELECT p.nama_produk
FROM produk p
LEFT JOIN penjualan j ON p.kode_produk = j.kode_produk
WHERE j.kode_produk IS NULL;
4️⃣ Tampilkan daftar toko beserta jumlah produk yang dijual di masing-masing toko
SELECT t.nama_toko, COUNT(DISTINCT j.kode_produk) AS jumlah_produk
FROM toko t
LEFT JOIN penjualan j ON t.kode_toko = j.kode_toko
GROUP BY t.nama_toko;
5️⃣ Tampilkan produk dengan harga di atas rata-rata semua produk
(Gunakan subquery)
SELECT nama_produk, harga
FROM produk
WHERE harga > (SELECT AVG(harga) FROM produk);
6️⃣ Buat VIEW bernama v_penjualan_detail
Menampilkan nama_toko, nama_produk, jumlah, dan tanggal_transaksi.
CREATE VIEW v_penjualan_detail AS
SELECT t.nama_toko, p.nama_produk, j.jumlah, j.tanggal_transaksi
FROM penjualan j
JOIN toko t ON j.kode_toko = t.kode_toko
JOIN produk p ON j.kode_produk = p.kode_produk;
7️⃣ Tampilkan toko yang melakukan transaksi paling banyak
SELECT t.nama_toko, COUNT(j.kode_transaksi) AS jumlah_transaksi
FROM toko t
JOIN penjualan j ON t.kode_toko = j.kode_toko
GROUP BY t.nama_toko
ORDER BY jumlah_transaksi DESC
LIMIT 1;
8️⃣ Hapus semua data transaksi dengan tanggal di bawah tahun 2024
DELETE FROM penjualan
WHERE YEAR(tanggal_transaksi) < 2024;
📌 Catatan
Gunakan perintah SQL berikut dalam penyelesaian tugas ini:
- CREATE
- INSERT
- SELECT
- JOIN
- GROUP BY
- VIEW
✅ Selesai
File ini dapat langsung digunakan sebagai panduan atau laporan praktikum.
Pastikan seluruh query diuji di MySQL/MariaDB agar hasil sesuai dengan tabel contoh.
Kode berhasil disalin!