IMPORT LIBRARY

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

Membuat Tabel Pengunjung

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