pengguna menginport library yang diperlukan agar dapat mengakses SQL pada server MySQL yang dimiliki
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.5.2
pengguna membuat sebuah database baru pada server yang telah dimasukkan
db <- dbConnect(SQLite(), "reservasi_studio.db")
# Tabel pelanggan
dbExecute(db, "
CREATE TABLE IF NOT EXISTS pelanggan (
id_pelanggan INTEGER PRIMARY KEY,
nama TEXT,
no_hp TEXT,
email TEXT
);
")
# Tabel studio
dbExecute(db, "
CREATE TABLE IF NOT EXISTS studio (
id_studio INTEGER PRIMARY KEY,
nama_studio TEXT,
harga_per_jam INTEGER
);
")
# Tabel reservasi
dbExecute(db, "
CREATE TABLE IF NOT EXISTS reservasi (
id_reservasi INTEGER PRIMARY KEY,
id_pelanggan INTEGER,
id_studio INTEGER,
tanggal TEXT,
durasi_jam INTEGER,
total_harga INTEGER,
FOREIGN KEY(id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY(id_studio) REFERENCES studio(id_studio)
);
")
#input pelanggan
dbExecute(db, "
INSERT INTO pelanggan (nama, no_hp, email) VALUES
('Aldi Putra', '0812345678', 'aldi@mail.com'),
('Nadia Sari', '0823456789', 'nadia@mail.com'),
('Rangga Pratama', '0834567890', 'rangga@mail.com');
")
#input studio
dbExecute(db, "
INSERT INTO studio (nama_studio, harga_per_jam) VALUES
('Studio Premium', 200000),
('Studio Basic', 120000);
")
#input reservasi
dbExecute(db, "
INSERT INTO reservasi (id_pelanggan, id_studio, tanggal, durasi_jam, total_harga) VALUES
(1, 1, '2025-01-01', 2, 400000),
(1, 2, '2025-01-05', 1, 120000),
(2, 1, '2025-01-03', 3, 600000),
(2, 2, '2025-01-07', 2, 240000),
(3, 1, '2025-01-10', 1, 200000),
(3, 2, '2025-01-11', 4, 480000);
")
Sistem basis data pada sistem reservasi Studio Foto
Membuat sistem basis data untuk mengelola data investasi, termasuk data portofolio, transaksi, dan kinerja investasi.
tampilkan.pelanggan <- dbGetQuery(db, "SELECT * FROM pelanggan")
print(tampilkan.pelanggan)
## id_pelanggan nama no_hp email
## 1 1 Aldi Putra 0812345678 aldi@mail.com
## 2 2 Nadia Sari 0823456789 nadia@mail.com
## 3 3 Rangga Pratama 0834567890 rangga@mail.com
tampilkan.studio <- dbGetQuery(db, "SELECT * FROM studio")
print(tampilkan.studio)
## id_studio nama_studio harga_per_jam
## 1 1 Studio Premium 200000
## 2 2 Studio Basic 120000
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
## id_reservasi id_pelanggan id_studio tanggal durasi_jam total_harga
## 1 1 1 1 2025-01-01 2 400000
## 2 3 2 1 2025-01-03 3 600000
## 3 4 2 2 2025-01-07 2 240000
## 4 5 3 1 2025-01-10 1 200000
## 5 6 3 2 2025-01-11 5 600000
Pemilik reservasi studio mengurutkan data terbesar ke terkecil dan data terkecil ke terbesar untuk melihat perkembangan keuangan
dbGetQuery(db, "
SELECT * FROM reservasi
ORDER BY total_harga ASC
")
## id_reservasi id_pelanggan id_studio tanggal durasi_jam total_harga
## 1 5 3 1 2025-01-10 1 200000
## 2 4 2 2 2025-01-07 2 240000
## 3 1 1 1 2025-01-01 2 400000
## 4 3 2 1 2025-01-03 3 600000
## 5 6 3 2 2025-01-11 5 600000
dbGetQuery(db, "
SELECT * FROM reservasi
ORDER BY total_harga DESC
")
## id_reservasi id_pelanggan id_studio tanggal durasi_jam total_harga
## 1 3 2 1 2025-01-03 3 600000
## 2 6 3 2 2025-01-11 5 600000
## 3 1 1 1 2025-01-01 2 400000
## 4 4 2 2 2025-01-07 2 240000
## 5 5 3 1 2025-01-10 1 200000
Pemilik reservasi mengupdate/mengubah data karena terjadi permintaan perubahan durasi jam dari id reservasi yang ke -6 dari customer jadi otomatis total harga nya akan berubah.
dbExecute(db, "
UPDATE reservasi
SET durasi_jam = 5,
total_harga = 600000
WHERE id_reservasi = 6
")
## [1] 1
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
## id_reservasi id_pelanggan id_studio tanggal durasi_jam total_harga
## 1 1 1 1 2025-01-01 2 400000
## 2 3 2 1 2025-01-03 3 600000
## 3 4 2 2 2025-01-07 2 240000
## 4 5 3 1 2025-01-10 1 200000
## 5 6 3 2 2025-01-11 5 600000
Pemilik reservasi studio foto menghapus salah satu data preservasi dengan id reservasi yang ke 2 atas permintaan pelanggan itu sendiri.
dbExecute(db, "
DELETE FROM reservasi
WHERE id_reservasi = 2
")
## [1] 0
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
## id_reservasi id_pelanggan id_studio tanggal durasi_jam total_harga
## 1 1 1 1 2025-01-01 2 400000
## 2 3 2 1 2025-01-03 3 600000
## 3 4 2 2 2025-01-07 2 240000
## 4 5 3 1 2025-01-10 1 200000
## 5 6 3 2 2025-01-11 5 600000
Pemilik menggunakan program inner join untuk melihat id reservasi ,nama pelanggan, nama studio yang digunakan, durasi jam dan total harga dari masing-masing studio yang digunakan.
dbGetQuery(db, "
SELECT r.id_reservasi, p.nama, s.nama_studio, r.tanggal, r.durasi_jam, r.total_harga
FROM reservasi r
INNER JOIN pelanggan p ON r.id_pelanggan = p.id_pelanggan
INNER JOIN studio s ON r.id_studio = s.id_studio
")
## id_reservasi nama nama_studio tanggal durasi_jam total_harga
## 1 1 Aldi Putra Studio Premium 2025-01-01 2 400000
## 2 3 Nadia Sari Studio Premium 2025-01-03 3 600000
## 3 4 Nadia Sari Studio Basic 2025-01-07 2 240000
## 4 5 Rangga Pratama Studio Premium 2025-01-10 1 200000
## 5 6 Rangga Pratama Studio Basic 2025-01-11 5 600000
Pemilik reservasi studio foto melihat total pendapatan dan rata-rata durasi dari dari total keseluruhan hasil penggunaan studio dari tanggal 01 Januari 2025 sampai 11 Januari 2025.
dbGetQuery(db, "
SELECT
SUM(total_harga) AS total_pendapatan,
AVG(durasi_jam) AS rata_rata_durasi
FROM reservasi
")
## total_pendapatan rata_rata_durasi
## 1 2040000 2.6
Data transaksi yang sudah dilakukan dari tanggal 01 januari 2025 sampai 11 januari 2025 bisa dilihat di tabel di bawah ini:
query_laporan <- "
SELECT
r.id_reservasi AS id_reservasi,
p.nama AS pelanggan,
s.nama_studio AS studio,
r.tanggal AS tanggal,
r.durasi_jam AS durasi,
r.total_harga AS total
FROM reservasi r
JOIN pelanggan p ON r.id_pelanggan = p.id_pelanggan
JOIN studio s ON r.id_studio = s.id_studio
ORDER BY r.id_reservasi ASC
"
# Menjalankan query laporan
laporan <- dbGetQuery(db, query_laporan)
# Menampilkan laporan
print(laporan)
## id_reservasi pelanggan studio tanggal durasi total
## 1 1 Aldi Putra Studio Premium 2025-01-01 2 400000
## 2 3 Nadia Sari Studio Premium 2025-01-03 3 600000
## 3 4 Nadia Sari Studio Basic 2025-01-07 2 240000
## 4 5 Rangga Pratama Studio Premium 2025-01-10 1 200000
## 5 6 Rangga Pratama Studio Basic 2025-01-11 5 600000