library(DBI)
## Warning: package 'DBI' was built under R version 4.5.2
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.5.2
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
#MEMBUAT KONEKSI DATABASE
con <- dbConnect(SQLite(), ":memory:")
#Membuat Tabel Film
dbExecute(con, "
CREATE TABLE film (
id_film INTEGER PRIMARY KEY,
judul TEXT,
genre TEXT,
tahun INTEGER
);
")
## [1] 0
dbExecute(con, "
CREATE TABLE pengunjung (
id_pengunjung INTEGER PRIMARY KEY,
nama TEXT
);
")
## [1] 0
#Membuat Tabel Transaksi (film yang ditonton)
dbExecute(con, "
CREATE TABLE transaksi (
id_transaksi INTEGER PRIMARY KEY,
id_pengunjung INTEGER,
id_film INTEGER,
tanggal TEXT,
FOREIGN KEY (id_pengunjung) REFERENCES pengunjung(id_pengunjung),
FOREIGN KEY (id_film) REFERENCES film(id_film)
);
")
## [1] 0
#Memasukkan Data
#Tabel Film
dbExecute(con, "
INSERT INTO film VALUES
(1, 'Petualangan Si Kecil', 'Petualangan', 2023),
(2, 'Langit Biru', 'Drama', 2022),
(3, 'Jalan Panjang', 'Aksi', 2024),
(4, 'Teror Malam', 'Horor', 2021);
")
## [1] 4
#Tabel Pengunjung
dbExecute(con, "
INSERT INTO pengunjung VALUES
(101, 'Bayu'),
(102, 'Citra'),
(103, 'Dian'),
(104, 'Aulia'),
(105, 'Erwin'),
(106, 'Nina');
")
## [1] 6
#Tabel Transaksi
dbExecute(con, "
INSERT INTO transaksi VALUES
(1, 101, 1, '2025-01-01'),
(2, 102, 1, '2025-01-02'),
(3, 103, 2, '2025-01-03'),
(4, 104, 3, '2025-01-03'),
(5, 105, 3, '2025-01-04');
")
## [1] 5
#menampilkan isi Tabel
dbGetQuery(con, "SELECT * FROM film")
## id_film judul genre tahun
## 1 1 Petualangan Si Kecil Petualangan 2023
## 2 2 Langit Biru Drama 2022
## 3 3 Jalan Panjang Aksi 2024
## 4 4 Teror Malam Horor 2021
dbGetQuery(con, "SELECT * FROM pengunjung")
## id_pengunjung nama
## 1 101 Bayu
## 2 102 Citra
## 3 103 Dian
## 4 104 Aulia
## 5 105 Erwin
## 6 106 Nina
dbGetQuery(con, "SELECT * FROM transaksi")
## id_transaksi id_pengunjung id_film tanggal
## 1 1 101 1 2025-01-01
## 2 2 102 1 2025-01-02
## 3 3 103 2 2025-01-03
## 4 4 104 3 2025-01-03
## 5 5 105 3 2025-01-04
#Mengurutkan Data
dbGetQuery(con, "
SELECT * FROM film
ORDER BY tahun DESC;
")
## id_film judul genre tahun
## 1 3 Jalan Panjang Aksi 2024
## 2 1 Petualangan Si Kecil Petualangan 2023
## 3 2 Langit Biru Drama 2022
## 4 4 Teror Malam Horor 2021
#Memfilter Data
# FILM YANG BELUM DITONTON
dbGetQuery(con, "
SELECT f.id_film, f.judul
FROM film f
LEFT JOIN transaksi t ON f.id_film = t.id_film
WHERE t.id_film IS NULL;
")
## id_film judul
## 1 4 Teror Malam
#PENGUNJUNG YANG BELUM MENONTON FILM
dbGetQuery(con, "
SELECT p.id_pengunjung, p.nama
FROM pengunjung p
LEFT JOIN transaksi t ON p.id_pengunjung = t.id_pengunjung
WHERE t.id_pengunjung IS NULL;
")
## id_pengunjung nama
## 1 106 Nina
#Menambahkan Data
dbExecute(con, "
UPDATE film
SET tahun = 2025
WHERE id_film = 2;
")
## [1] 1
#Menghapus Data
dbExecute(con, "
DELETE FROM transaksi
WHERE id_transaksi = 5;
")
## [1] 1
#Menggabungkan tabel
laporan <- dbGetQuery(con, "
SELECT t.id_transaksi, p.nama AS pengunjung,
f.judul AS film, f.genre, t.tanggal
FROM transaksi t
JOIN pengunjung p ON t.id_pengunjung = p.id_pengunjung
JOIN film f ON t.id_film = f.id_film;
")
#Menampilkan hasil
print("Laporan Penonton Film di Bioskop Galaxy XXI:")
## [1] "Laporan Penonton Film di Bioskop Galaxy XXI:"
print(laporan)
## id_transaksi pengunjung film genre tanggal
## 1 1 Bayu Petualangan Si Kecil Petualangan 2025-01-01
## 2 2 Citra Petualangan Si Kecil Petualangan 2025-01-02
## 3 3 Dian Langit Biru Drama 2025-01-03
## 4 4 Aulia Jalan Panjang Aksi 2025-01-03