Menginport library yang dibutuhkan paling awal agar dapat membaca package yang digunakan
library(RMySQL)
## Warning: package 'RMySQL' was built under R version 4.5.2
## Loading required package: DBI
## Warning: package 'DBI' was built under R version 4.5.2
library(DBI)
server <- dbConnect(
RMySQL::MySQL(),
host = "localhost",
user = "root",
password = "")
Sebelum membuat tabel diperlukan membuat database pada server yang telah dimasukkan, di mana pada program ini servernya bernama “server”
dbExecute(server, "CREATE DATABASE IF NOT EXISTS `StudioSeni`")
## [1] 1
dbExecute(server, "USE `StudioSeni`")
## [1] 0
Menggunakan database yang telah dibuat sebelumnya, dibuatkan tabel didalam database tersebut
dbExecute(server, "
CREATE TABLE Studio (
ID_Studio VARCHAR(10) PRIMARY KEY,
Nama_Studio VARCHAR(100) NOT NULL,
Lokasi VARCHAR(150),
Pemilik VARCHAR(100) NOT NULL,
Tahun_Berdiri INT
);
")
## [1] 0
dbExecute(server, "
CREATE TABLE Karya (
ID_Karya VARCHAR(10) PRIMARY KEY,
ID_Studio VARCHAR(10),
Judul VARCHAR(120),
Kategori VARCHAR(50),
Tahun_Pembuatan INT,
Harga DECIMAL(15,2),
FOREIGN KEY (ID_Studio) REFERENCES Studio(ID_Studio)
);
")
## [1] 0
dbExecute(server, "
CREATE TABLE Workshop (
ID_Workshop VARCHAR(10) PRIMARY KEY,
ID_Studio VARCHAR(10),
Nama_Workshop VARCHAR(120),
Tanggal DATE,
Harga DECIMAL(15,2),
Kapasitas INT,
FOREIGN KEY (ID_Studio) REFERENCES Studio(ID_Studio)
);
")
## [1] 0
dbExecute(server, "
CREATE TABLE Pameran (
ID_Pameran VARCHAR(10) PRIMARY KEY,
ID_Studio VARCHAR(10),
Tema VARCHAR(120),
Lokasi VARCHAR(120),
Tanggal DATE,
Pengunjung INT,
FOREIGN KEY (ID_Studio) REFERENCES Studio(ID_Studio)
);
")
## [1] 0
dbExecute(server, "
CREATE TABLE IF NOT EXISTS Transaksi (
ID_Transaksi VARCHAR(10) PRIMARY KEY,
Jenis ENUM('Lukisan','Workshop','Pameran'),
ID_Item VARCHAR(10),
Tanggal DATE,
Jumlah INT,
Total DECIMAL(15,2)
);
")
## [1] 0
dbSendQuery(server, "
INSERT INTO Studio (ID_Studio, Nama_Studio, Lokasi, Pemilik, Tahun_Berdiri) VALUES
('S001','Studio Warna Kita','Bandung','Rina Aulia',2015),
('S002','Galeri ArtNusa','Jakarta','Samuel Hartono',2018),
('S003','Rumah Seni Pelangi','Yogyakarta','Dian Lestari',2012);
")
## <MySQLResult:1656445856,0,7>
dbSendQuery(server, "
INSERT INTO Karya (ID_Karya, ID_Studio, Judul, Kategori, Tahun_Pembuatan, Harga) VALUES
('L001','S001','Senandung Senja','Abstrak',2020,2500000),
('L002','S002','Harmoni Laut','Realism',2019,3500000),
('L003','S003','Bunga Kehidupan','Floral',2021,1800000);
")
## <MySQLResult:1656445856,0,8>
dbSendQuery(server, "INSERT INTO Workshop (ID_Workshop, ID_Studio, Nama_Workshop, Tanggal, Harga, Kapasitas) VALUES
('W001','S001','Basic Acrylic Painting','2025-02-10',250000,20),
('W002','S002','Watercolor Technique','2025-03-01',300000,25),
('W003','S003','Sketching Fundamentals','2025-01-15',200000,30);
")
## <MySQLResult:12,0,9>
dbSendQuery(server, "INSERT INTO Pameran (ID_Pameran, ID_Studio, Tema, Lokasi, Tanggal, Pengunjung) VALUES
('P001','S001','Ekspresi Alam','Bandung','2025-01-25',180),
('P002','S002','Warna Nusantara','Jakarta','2025-02-14',220),
('P003','S003','Seni Masa Kini','Yogyakarta','2025-03-02',150);
")
## <MySQLResult:1770484784,0,10>
dbSendQuery(server, "
INSERT INTO Transaksi
(ID_Transaksi, Jenis, ID_Item, Tanggal, Jumlah, Total) VALUES
('T001','Lukisan','L003','2025-01-15',1,3500000),
('T002','Workshop','W002','2025-02-10',3,750000),
('T003','Pameran','P001','2025-01-25',180,0),
('T004','Lukisan','L003','2025-02-20',1,2500000),
('T005','Workshop','W002','2025-03-01',10,3000000);
")
## <MySQLResult:12,0,11>
tampilkan.studio <- dbGetQuery(server, "
SELECT * FROM Studio;
")
print(tampilkan.studio)
## ID_Studio Nama_Studio Lokasi Pemilik Tahun_Berdiri
## 1 S001 Studio Warna Kita Bandung Rina Aulia 2015
## 2 S002 Galeri ArtNusa Jakarta Samuel Hartono 2018
## 3 S003 Rumah Seni Pelangi Yogyakarta Dian Lestari 2012
tampilkan.karya <- dbGetQuery(server, "
SELECT * FROM Karya;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
print(tampilkan.karya)
## ID_Karya ID_Studio Judul Kategori Tahun_Pembuatan Harga
## 1 L001 S001 Senandung Senja Abstrak 2020 2500000
## 2 L002 S002 Harmoni Laut Realism 2019 3500000
## 3 L003 S003 Bunga Kehidupan Floral 2021 1800000
tampilkan.workshop <- dbGetQuery(server, "
SELECT * FROM Workshop;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 4 imported
## as numeric
print(tampilkan.workshop)
## ID_Workshop ID_Studio Nama_Workshop Tanggal Harga Kapasitas
## 1 W001 S001 Basic Acrylic Painting 2025-02-10 250000 20
## 2 W002 S002 Watercolor Technique 2025-03-01 300000 25
## 3 W003 S003 Sketching Fundamentals 2025-01-15 200000 30
tampilkan.pameran <- dbGetQuery(server, "
SELECT * FROM Pameran;
")
print(tampilkan.pameran)
## ID_Pameran ID_Studio Tema Lokasi Tanggal Pengunjung
## 1 P001 S001 Ekspresi Alam Bandung 2025-01-25 180
## 2 P002 S002 Warna Nusantara Jakarta 2025-02-14 220
## 3 P003 S003 Seni Masa Kini Yogyakarta 2025-03-02 150
tampilkan.transaksi <- dbGetQuery(server, "
SELECT * FROM Transaksi;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
print(tampilkan.transaksi)
## ID_Transaksi Jenis ID_Item Tanggal Jumlah Total
## 1 T001 Lukisan L003 2025-01-15 1 3500000
## 2 T002 Workshop W002 2025-02-10 3 750000
## 3 T003 Pameran P001 2025-01-25 180 0
## 4 T004 Lukisan L003 2025-02-20 1 2500000
## 5 T005 Workshop W002 2025-03-01 10 3000000
## ID_Studio Nama_Studio Jumlah_Karya Jumlah_Workshop Jumlah_Pameran
## 1 S001 Studio Warna Kita 1 1 1
## 2 S002 Galeri ArtNusa 1 1 1
## 3 S003 Rumah Seni Pelangi 1 1 1
pendapatan.studio <- dbGetQuery(server, "
SELECT
s.ID_Studio,
s.Nama_Studio,
COALESCE(SUM(t.Total), 0) AS Total_Pendapatan
FROM Studio s
LEFT JOIN Transaksi t
ON (
(t.Jenis = 'Lukisan' AND t.ID_Item IN (SELECT ID_Karya FROM Karya WHERE Karya.ID_Studio = s.ID_Studio))
OR
(t.Jenis = 'Workshop' AND t.ID_Item IN (SELECT ID_Workshop FROM Workshop WHERE Workshop.ID_Studio = s.ID_Studio))
)
GROUP BY s.ID_Studio, s.Nama_Studio;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
pendapatan.studio
## ID_Studio Nama_Studio Total_Pendapatan
## 1 S001 Studio Warna Kita 0
## 2 S002 Galeri ArtNusa 3750000
## 3 S003 Rumah Seni Pelangi 6000000
pengunjung.studio <- dbGetQuery(server, "
SELECT
s.ID_Studio,
s.Nama_Studio,
COALESCE(SUM(p.Pengunjung),0) AS Total_Pengunjung
FROM Studio s
LEFT JOIN Pameran p ON s.ID_Studio = p.ID_Studio
GROUP BY s.ID_Studio, s.Nama_Studio;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
pengunjung.studio
## ID_Studio Nama_Studio Total_Pengunjung
## 1 S001 Studio Warna Kita 180
## 2 S002 Galeri ArtNusa 220
## 3 S003 Rumah Seni Pelangi 150