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
library(RMariaDB)
## Warning: package 'RMariaDB' was built under R version 4.5.2
server <- dbConnect(
  MariaDB(),
  user = "root",
  password = "",
  host = "localhost"
)

dbExecute(server, "CREATE DATABASE IF NOT EXISTS AyamGeprekDB")
## [1] 1
dbExecute(server, "USE AyamGeprekDB")
## [1] 0
# Tabel Menu
dbExecute(server, "
CREATE TABLE Menu (
    id_menu INT AUTO_INCREMENT PRIMARY KEY,
    nama_menu VARCHAR(100),
    kategori VARCHAR(50),
    harga DECIMAL(10,2)
)")
## [1] 0
# Tabel Pelanggan
dbExecute(server, "
CREATE TABLE Pelanggan (
    id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
    nama_pelanggan VARCHAR(100),
    umur INT,
    jenis_kelamin VARCHAR(20),
    frekuensi_kunjungan INT
)")
## [1] 0
# Tabel Transaksi
dbExecute(server, "
CREATE TABLE Transaksi (
  id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
  id_pelanggan INT,
  id_menu INT,
  tanggal DATE,
  jumlah INT,
  total_harga DECIMAL(12,2),
  FOREIGN KEY (id_pelanggan) REFERENCES Pelanggan(id_pelanggan),
  FOREIGN KEY (id_menu) REFERENCES Menu(id_menu)
)")
## [1] 0
# Data Menu
dbExecute(server, "
INSERT INTO Menu (id_menu, nama_menu, kategori, harga) VALUES
(1, 'Ayam Geprek Original', 'Makanan', 15000),
(2, 'Ayam Geprek Keju', 'Makanan', 20000),
(3, 'Ayam Geprek Sambal Hijau', 'Makanan', 18000),
(4, 'Ayam Geprek Level 5', 'Makanan', 17000),
(5, 'Es Teh Manis', 'Minuman', 5000),
(6, 'Es Jeruk', 'Minuman', 7000),
(7, 'Jus Alpukat', 'Minuman', 12000),
(8, 'Nasi Tambah', 'Tambahan', 5000)
")
## [1] 8
# Data Pelanggan
dbExecute(server, "
INSERT INTO Pelanggan (id_pelanggan, nama_pelanggan, umur, jenis_kelamin, frekuensi_kunjungan) VALUES
(1, 'Rizky', 20, 'Laki-laki', 6),
(2, 'Aulia', 21, 'Perempuan', 8),
(3, 'Dewi', 22, 'Perempuan', 4),
(4, 'Bagas', 23, 'Laki-laki', 5),
(5, 'Sinta', 19, 'Perempuan', 3),
(6, 'Fajar', 20, 'Laki-laki', 7)
")
## [1] 6
# Data Transaksi
dbExecute(server, "
INSERT INTO Transaksi 
(id_transaksi, id_pelanggan, id_menu, tanggal, jumlah, total_harga) VALUES
(1, 1, 1, '2025-01-10', 2, 30000),
(2, 2, 2, '2025-01-11', 1, 20000),
(3, 3, 3, '2025-01-12', 3, 54000),
(4, 4, 4, '2025-01-13', 1, 17000),
(5, 5, 1, '2025-01-14', 2, 30000),
(6, 6, 7, '2025-01-15', 1, 12000)
")
## [1] 6
menu <- dbGetQuery(server, "SELECT * FROM Menu;")
pelanggan <- dbGetQuery(server, "SELECT * FROM Pelanggan;")
transaksi <- dbGetQuery(server, "SELECT * FROM Transaksi;")

print(menu)
##   id_menu                nama_menu kategori harga
## 1       1     Ayam Geprek Original  Makanan 15000
## 2       2         Ayam Geprek Keju  Makanan 20000
## 3       3 Ayam Geprek Sambal Hijau  Makanan 18000
## 4       4      Ayam Geprek Level 5  Makanan 17000
## 5       5             Es Teh Manis  Minuman  5000
## 6       6                 Es Jeruk  Minuman  7000
## 7       7              Jus Alpukat  Minuman 12000
## 8       8              Nasi Tambah Tambahan  5000
print(pelanggan)
##   id_pelanggan nama_pelanggan umur jenis_kelamin frekuensi_kunjungan
## 1            1          Rizky   20     Laki-laki                   6
## 2            2          Aulia   21     Perempuan                   8
## 3            3           Dewi   22     Perempuan                   4
## 4            4          Bagas   23     Laki-laki                   5
## 5            5          Sinta   19     Perempuan                   3
## 6            6          Fajar   20     Laki-laki                   7
print(transaksi)
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            1            1       1 2025-01-10      2       30000
## 2            2            2       2 2025-01-11      1       20000
## 3            3            3       3 2025-01-12      3       54000
## 4            4            4       4 2025-01-13      1       17000
## 5            5            5       1 2025-01-14      2       30000
## 6            6            6       7 2025-01-15      1       12000
# Urut jumlah ASC
urutan_kecil_besar <- dbGetQuery(server, "
  SELECT * FROM Transaksi
  ORDER BY jumlah ASC;
")
print(urutan_kecil_besar)
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            2            2       2 2025-01-11      1       20000
## 2            4            4       4 2025-01-13      1       17000
## 3            6            6       7 2025-01-15      1       12000
## 4            1            1       1 2025-01-10      2       30000
## 5            5            5       1 2025-01-14      2       30000
## 6            3            3       3 2025-01-12      3       54000
# Urut jumlah DESC
urutan_besar_kecil <- dbGetQuery(server, "
  SELECT * FROM Transaksi
  ORDER BY jumlah DESC;
")
print(urutan_besar_kecil)
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            3            3       3 2025-01-12      3       54000
## 2            1            1       1 2025-01-10      2       30000
## 3            5            5       1 2025-01-14      2       30000
## 4            2            2       2 2025-01-11      1       20000
## 5            4            4       4 2025-01-13      1       17000
## 6            6            6       7 2025-01-15      1       12000
# Update jumlah transaksi id=2
dbExecute(server, "
  UPDATE Transaksi
  SET jumlah = 5
  WHERE id_transaksi = 2;
")
## [1] 1
dbGetQuery(server, "
  SELECT *
  FROM Transaksi
  WHERE id_transaksi = 2;
")
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            2            2       2 2025-01-11      5       20000
# Delete transaksi id=3
dbExecute(server, "
  DELETE FROM Transaksi
  WHERE id_transaksi = 3;
")
## [1] 1
dbGetQuery(server, "
  SELECT *
  FROM Transaksi;
")
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            1            1       1 2025-01-10      2       30000
## 2            2            2       2 2025-01-11      5       20000
## 3            4            4       4 2025-01-13      1       17000
## 4            5            5       1 2025-01-14      2       30000
## 5            6            6       7 2025-01-15      1       12000
# WHERE total_harga > 20000
tampilan_tertentu <- dbGetQuery(server, "
  SELECT * FROM Transaksi
  WHERE total_harga > 20000;
")
print(tampilan_tertentu)
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            1            1       1 2025-01-10      2       30000
## 2            5            5       1 2025-01-14      2       30000
dbGetQuery(server, "
  SELECT
    t.id_transaksi,
    p.nama_pelanggan AS pelanggan,
    m.nama_menu AS menu,
    t.tanggal,
    t.jumlah,
    m.kategori,
    t.total_harga
  FROM Transaksi t
  INNER JOIN Pelanggan p 
    ON t.id_pelanggan = p.id_pelanggan
  INNER JOIN Menu m 
    ON t.id_menu = m.id_menu;
")
##   id_transaksi pelanggan                 menu    tanggal jumlah kategori
## 1            1     Rizky Ayam Geprek Original 2025-01-10      2  Makanan
## 2            2     Aulia     Ayam Geprek Keju 2025-01-11      5  Makanan
## 3            4     Bagas  Ayam Geprek Level 5 2025-01-13      1  Makanan
## 4            5     Sinta Ayam Geprek Original 2025-01-14      2  Makanan
## 5            6     Fajar          Jus Alpukat 2025-01-15      1  Minuman
##   total_harga
## 1       30000
## 2       20000
## 3       17000
## 4       30000
## 5       12000
and_operator <- dbGetQuery(server, "
  SELECT *
  FROM Transaksi
  WHERE total_harga > 20000
    AND jumlah >= 2;
")
print(and_operator)
##   id_transaksi id_pelanggan id_menu    tanggal jumlah total_harga
## 1            1            1       1 2025-01-10      2       30000
## 2            5            5       1 2025-01-14      2       30000
dbListTables(server)  # daftar tabel
## [1] "menu"      "pelanggan" "transaksi"
dbGetQuery(server, "SELECT * FROM pelanggan")  
##   id_pelanggan nama_pelanggan umur jenis_kelamin frekuensi_kunjungan
## 1            1          Rizky   20     Laki-laki                   6
## 2            2          Aulia   21     Perempuan                   8
## 3            3           Dewi   22     Perempuan                   4
## 4            4          Bagas   23     Laki-laki                   5
## 5            5          Sinta   19     Perempuan                   3
## 6            6          Fajar   20     Laki-laki                   7
rata_pembelian <- dbGetQuery(server, "
  SELECT AVG(total_harga) AS rata_rata_pembelian
  FROM Transaksi;
")
print(rata_pembelian)
##   rata_rata_pembelian
## 1               21800
rata_rata_transaksi <- dbGetQuery(server, "
  SELECT 
      SUM(total_harga) AS total_pendapatan,
      AVG(total_harga) AS rata_rata_pembelian
  FROM Transaksi;
")

print(rata_rata_transaksi)
##   total_pendapatan rata_rata_pembelian
## 1           109000               21800
#Query laporan akhir
query_laporan <- "
  SELECT 
      t.id_transaksi,
      p.nama_pelanggan AS pelanggan,
      m.nama_menu AS menu,
      m.kategori,
      t.tanggal,
      t.jumlah,
      t.total_harga
  FROM Transaksi t
  JOIN Pelanggan p 
      ON t.id_pelanggan = p.id_pelanggan
  JOIN Menu m 
      ON t.id_menu = m.id_menu
  ORDER BY t.tanggal;
"
laporan <- dbGetQuery(server, query_laporan)
print(laporan)
##   id_transaksi pelanggan                 menu kategori    tanggal jumlah
## 1            1     Rizky Ayam Geprek Original  Makanan 2025-01-10      2
## 2            2     Aulia     Ayam Geprek Keju  Makanan 2025-01-11      5
## 3            4     Bagas  Ayam Geprek Level 5  Makanan 2025-01-13      1
## 4            5     Sinta Ayam Geprek Original  Makanan 2025-01-14      2
## 5            6     Fajar          Jus Alpukat  Minuman 2025-01-15      1
##   total_harga
## 1       30000
## 2       20000
## 3       17000
## 4       30000
## 5       12000