1.Membuat Koneksi Database

library(DBI)
library(RSQLite)
library(dplyr)

# Buat koneksi database
con <- dbConnect(SQLite(), "seminar3.db")

2.Membuat Tabel Database

#1.Tabel tamu
dbExecute(con, "
CREATE TABLE tamu (
id_tamu INTEGER PRIMARY KEY,
nama_tamu TEXT,
instansi TEXT,
no_hp TEXT,
email TEXT
);
")
## [1] 0
#2.Tabel seminar
dbExecute(con, "
CREATE TABLE seminar (
id_seminar INTEGER PRIMARY KEY,
judul_seminar TEXT,
tanggal DATE,
lokasi TEXT
);
")
## [1] 0
#3.Tabel kehadiran
dbExecute(con, "
CREATE TABLE kehadiran (
id_hadir INTEGER PRIMARY KEY,
id_tamu INTEGER,
id_seminar INTEGER,
status TEXT,
waktu_absen TEXT,
FOREIGN KEY (id_tamu) REFERENCES tamu(id_tamu),
FOREIGN KEY (id_seminar) REFERENCES seminar(id_seminar)
);
")
## [1] 0

3.Mengisi Data Tabel

#1.Data tamu
dbExecute(con, "
INSERT INTO tamu VALUES
(1, 'Andi Saputra', 'UNTAD', '082134561111', 'andi@gmail.com'),
(2, 'Budi Santoso', 'STMIK', '082134562222', 'budi@gmail.com'),
(3, 'Citra Lestari', 'UIN', '082134563333', 'citra@gmail.com'),
(4, 'Dewi Rahma', 'UNISA', '082134564444', 'dewi@gmail.com');
")
## [1] 4
#2.Data seminar
dbExecute(con, "
INSERT INTO seminar VALUES
(1, 'Seminar Data Science', '2025-01-10', 'Aula Kampus'),
(2, 'Seminar Kewirausahaan', '2025-01-15', 'Gedung Serbaguna'),
(3, 'Seminar Teknologi AI', '2025-01-20', 'Ruang Multimedia'),
(4, 'Seminar Keamanan Data', '2025-01-25', 'Aula Fakultas');
")
## [1] 4
#3.Data kehadiran
dbExecute(con, "
INSERT INTO kehadiran VALUES
(1, 1, 1, 'Hadir', '08:05'),
(2, 2, 2, 'Hadir', '09:10'),
(3, 3, 3, 'Hadir', '10:00'),
(4, 4, 4, 'Tidak Hadir', '-');
")
## [1] 4

4.Menampilkan Tabel

# Tampilkan daftar tabel dalam database
dbListTables(con)
## [1] "kehadiran" "seminar"   "tamu"
# Tampilkan seluruh isi tabel kehadiran
dbGetQuery(con, "SELECT * FROM kehadiran")
##   id_hadir id_tamu id_seminar      status waktu_absen
## 1        1       1          1       Hadir       08:05
## 2        2       2          2       Hadir       09:10
## 3        3       3          3       Hadir       10:00
## 4        4       4          4 Tidak Hadir           -

5.Mengurutkan Tabel

#Urutkan kehadiran dari paling awal ke paling akhir
dbGetQuery(con, "
SELECT * FROM kehadiran
ORDER BY waktu_absen ASC;
")
##   id_hadir id_tamu id_seminar      status waktu_absen
## 1        4       4          4 Tidak Hadir           -
## 2        1       1          1       Hadir       08:05
## 3        2       2          2       Hadir       09:10
## 4        3       3          3       Hadir       10:00
#Urutkan kehadiran dari paling akhir ke paling awal
dbGetQuery(con, "
SELECT * FROM kehadiran
ORDER BY waktu_absen DESC;
")
##   id_hadir id_tamu id_seminar      status waktu_absen
## 1        3       3          3       Hadir       10:00
## 2        2       2          2       Hadir       09:10
## 3        1       1          1       Hadir       08:05
## 4        4       4          4 Tidak Hadir           -

6.Menampilkan Data Aktivitas Tertentu

#Menampilkan tamu yang tidak hadir saja
dbGetQuery(con, "
SELECT * FROM kehadiran
WHERE status = 'Tidak Hadir'
ORDER BY waktu_absen ASC;
")
##   id_hadir id_tamu id_seminar      status waktu_absen
## 1        4       4          4 Tidak Hadir           -

7.Memperbarui Data (UPDATE)

#Memperbarui status kehadiran tamu
dbExecute(con, "
UPDATE kehadiran
SET status = 'Hadir', waktu_absen = '10:30'
WHERE id_hadir = 4;
")
## [1] 1
dbGetQuery(con, "SELECT * FROM kehadiran WHERE id_hadir = 4;")
##   id_hadir id_tamu id_seminar status waktu_absen
## 1        4       4          4  Hadir       10:30

8.Menghapus Data (DELETE)

#Menghapus data ke 4 pada tabel kehadiran
dbExecute(con, "
DELETE FROM kehadiran
WHERE id_hadir = 4;
")
## [1] 1
dbGetQuery(con, "SELECT * FROM kehadiran")
##   id_hadir id_tamu id_seminar status waktu_absen
## 1        1       1          1  Hadir       08:05
## 2        2       2          2  Hadir       09:10
## 3        3       3          3  Hadir       10:00

9.Menampilkan Gabungan Data (INNER JOIN

#Menampilkan data kehadiran yang lebih sepsifik
dbGetQuery(con, "
SELECT
t.id_tamu AS id,
t.nama_tamu AS nama,
s.judul_seminar AS judul_seminar,
s.tanggal AS tanggal,
k.status AS status,
k.waktu_absen AS waktu
FROM kehadiran AS k
INNER JOIN tamu AS t ON k.id_tamu = t.id_tamu
INNER JOIN seminar AS s ON k.id_seminar = s.id_seminar;
")
##   id          nama         judul_seminar    tanggal status waktu
## 1  1  Andi Saputra  Seminar Data Science 2025-01-10  Hadir 08:05
## 2  2  Budi Santoso Seminar Kewirausahaan 2025-01-15  Hadir 09:10
## 3  3 Citra Lestari  Seminar Teknologi AI 2025-01-20  Hadir 10:00

10.Laporan akhir

query_laporan <- "
SELECT
t.id_tamu,
t.nama_tamu,
s.judul_seminar,
s.tanggal,
k.status,
k.waktu_absen
FROM kehadiran k
JOIN tamu t ON k.id_tamu = t.id_tamu
JOIN seminar s ON k.id_seminar = s.id_seminar;
"

laporan <- dbGetQuery(con, query_laporan)
laporan
##   id_tamu     nama_tamu         judul_seminar    tanggal status waktu_absen
## 1       1  Andi Saputra  Seminar Data Science 2025-01-10  Hadir       08:05
## 2       2  Budi Santoso Seminar Kewirausahaan 2025-01-15  Hadir       09:10
## 3       3 Citra Lestari  Seminar Teknologi AI 2025-01-20  Hadir       10:00