1.Membuat Koneksi Database

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

# 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
tabel <- dbListTables(con)
kable(as.data.frame(tabel), col.names = "Nama Tabel")
Nama Tabel
kehadiran
seminar
tamu
# Tampilkan seluruh isi tabel kehadiran
data_kehadiran <- dbGetQuery(con, "SELECT * FROM kehadiran")
kable(data_kehadiran)
id_hadir id_tamu id_seminar status waktu_absen
1 1 1 Hadir 08:05
2 2 2 Hadir 09:10
3 3 3 Hadir 10:00
4 4 4 Tidak Hadir -

5.Mengurutkan Tabel

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

6.Menampilkan Data Aktivitas Tertentu

#Menampilkan tamu yang tidak hadir saja
tidak_hadir <- dbGetQuery(con, "
SELECT * FROM kehadiran
WHERE status = 'Tidak Hadir'
ORDER BY waktu_absen ASC;
")
kable(tidak_hadir)
id_hadir id_tamu id_seminar status waktu_absen
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
update_data <- dbGetQuery(con, "SELECT * FROM kehadiran WHERE id_hadir = 4;")
kable(update_data)
id_hadir id_tamu id_seminar status waktu_absen
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
hapus <- dbGetQuery(con, "SELECT * FROM kehadiran")
kable(hapus)
id_hadir id_tamu id_seminar status waktu_absen
1 1 1 Hadir 08:05
2 2 2 Hadir 09:10
3 3 3 Hadir 10:00

9.Menampilkan Gabungan Data (INNER JOIN)

#Menampilkan data kehadiran yang lebih sepsifik
spesifik <- 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;
")
kable(spesifik)
id nama judul_seminar tanggal status waktu
1 Andi Saputra Seminar Data Science 2025-01-10 Hadir 08:05
2 Budi Santoso Seminar Kewirausahaan 2025-01-15 Hadir 09:10
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)
kable(laporan)
id_tamu nama_tamu judul_seminar tanggal status waktu_absen
1 Andi Saputra Seminar Data Science 2025-01-10 Hadir 08:05
2 Budi Santoso Seminar Kewirausahaan 2025-01-15 Hadir 09:10
3 Citra Lestari Seminar Teknologi AI 2025-01-20 Hadir 10:00