3.1 Membuat Koneksi Database Program: #Instalasi dan import package install.packages(c(“DBI”, “RSQLite”, “dplyr”)) # jika belum ada library(DBI) library(RSQLite) library(dplyr)
con <- dbConnect(SQLite(), “:memory:”)
Output: [1] 0
Pada langkah ini dilakukan proses persiapan awal sebelum membangun sistem basis data. Dimulai dengan mengimpor dan/atau menginstal paket yang dibutuhkan (DBI, RSQLite, dan dplyr) yang berfungsi untuk menghubungkan R dengan sistem basis data SQLite serta membantu dalam manipulasi data. Setelah itu, dibuat koneksi ke database SQLite, baik yang disimpan di memori (sementara) maupun dalam file .sqlite. Output [1] 0 menunjukkan bahwa perintah SQL yang dijalankan berhasil tanpa error, meskipun tidak menghasilkan baris data karena perintah tersebut bukan SELECT, melainkan CREATE, INSERT, atau UPDATE.
3.2 Membuat tabel Program: #Buat struktur tabel dbExecute(con, ” CREATE TABLE pegawai ( id_pegawai INTEGER PRIMARY KEY, nama_pegawai TEXT, jabatan TEXT ); “) dbExecute(con,” CREATE TABLE nasabah ( id_nasabah INTEGER PRIMARY KEY, nama TEXT, alamat TEXT ); “) dbExecute(con,” CREATE TABLE rekening ( no_rekening INTEGER PRIMARY KEY, id_nasabah INTEGER, saldo REAL, FOREIGN KEY (id_nasabah) REFERENCES nasabah(id_nasabah) ); “) dbExecute(con,” CREATE TABLE jenis_transaksi ( id_jenis INTEGER PRIMARY KEY, nama_jenis TEXT ); “) dbExecute(con,” CREATE TABLE transaksi ( id_transaksi INTEGER PRIMARY KEY, no_rekening INTEGER, id_jenis INTEGER, id_pegawai INTEGER, tanggal TEXT, jumlah REAL, FOREIGN KEY (no_rekening) REFERENCES rekening(no_rekening), FOREIGN KEY (id_jenis) REFERENCES jenis_transaksi(id_jenis), FOREIGN KEY (id_pegawai) REFERENCES pegawai(id_pegawai) ); “)
Output: [1] 0
Membuat lima tabel yang merepresentasikan sistem transaksi perbankan, yaitu: pegawai, nasabah, rekening, jenis_transaksi, dan transaksi. Tabel memiliki primary key sebagai penanda unik dan beberapa di antaranya memiliki foreign key untuk membentuk relasi antar tabel. Output [1] 0 menandakan bahwa setiap perintah CREATE TABLE berhasil dijalankan tanpa error.
3.3 Mengisi Data Program: #Masukkan data awal dbExecute(con, ” INSERT INTO pegawai VALUES (1, ‘Dina Aulia’, ‘Teller’), (2, ‘Rizal Maulana’, ‘Customer Service’); “) dbExecute(con,” INSERT INTO nasabah VALUES (1, ‘Andi Setiawan’, ‘Jakarta’), (2, ‘Budi Santoso’, ‘Surabaya’), (3, ‘Clara Widya’, ‘Bandung’); “) dbExecute(con,” INSERT INTO rekening VALUES (1001, 1, 5000000), (1002, 2, 3000000), (1003, 3, 7000000); “) dbExecute(con,” INSERT INTO jenis_transaksi VALUES (1, ‘Setoran’), (2, ‘Penarikan’), (3, ‘Transfer’); “) dbExecute(con,” INSERT INTO transaksi VALUES (1, 1001, 1, 1, ‘2025-06-01’, 1000000), (2, 1002, 2, 2, ‘2025-06-03’, 500000), (3, 1003, 3, 1, ‘2025-06-05’, 2000000); “)
Output: [1] 2 [1] 3 [1] 3 [1] 3 [1] 2
Pada langkah ini, setiap tabel yang telah dibuat diisi dengan data awal sebagai simulasi transaksi perbankan. Tabel pegawai memuat dua petugas, nasabah berisi tiga orang nasabah, dan rekening mencatat tiga rekening dengan saldo awal. Tabel jenis_transaksi diisi tiga jenis transaksi umum, yaitu setoran, penarikan, dan transfer. Sementara itu, tabel transaksi mencatat tiga aktivitas transaksi nasabah lengkap dengan jenis, tanggal, jumlah, dan petugas yang melayani.
3.4 Menampilkan tabel Program: # Tampilkan tabel dbListTables(con) # daftar tabel dbGetQuery(con, “SELECT * FROM transaksi”)
Output: > dbListTables(con)
[1] “jenis_transaksi” “nasabah” “pegawai” “rekening” “transaksi”
dbGetQuery(con, “SELECT * FROM transaksi”)
id_transaksi no_rekening id_jenis id_pegawai tanggal jumlah 1 1 1001 1 1 2025-06-01 1000000 2 2 1002 2 2 2025-06-03 500000 3 3 1003 3 1 2025-06-05 2000000 Perintah dbListTables(con) digunakan untuk menampilkan daftar seluruh tabel yang telah dibuat di dalam database, yaitu jenis_transaksi, nasabah, pegawai, rekening, dan transaksi. Kedua, dbGetQuery(con, “SELECT * FROM transaksi”) digunakan untuk menampilkan seluruh isi dari tabel transaksi, yang mencakup informasi seperti ID transaksi, nomor rekening, jenis transaksi, ID pegawai, tanggal, dan jumlah transaksi yang telah tercatat. Hasil output menunjukkan bahwa ketiga transaksi berhasil direkam dengan format angka ilmiah (notasi eksponensial) pada kolom jumlah.
3.5 Mengurutkan Tabel Mengurutkan tabel dapat digunakan untuk mengurutkan transaksi perbankan mulai dari yang terkecil ke terbesar atau sebaliknya. Program: dbGetQuery(con, ” SELECT * FROM transaksi ORDER BY jumlah ASC; “)
dbGetQuery(con, ” SELECT * FROM transaksi ORDER BY jumlah DESC; “) Output: + ORDER BY jumlah ASC; +”) id_transaksi no_rekening id_jenis id_pegawai tanggal jumlah 1 2 1002 2 2 2025-06-03 500000 2 1 1001 1 1 2025-06-01 1000000 3 3 1003 3 1 2025-06-05 2000000 > # Urutkan transaksi dari jumlah terbesar ke terkecil (DESC) > dbGetQuery(con, ” + SELECT * FROM transaksi + ORDER BY jumlah DESC; + “) id_transaksi no_rekening id_jenis id_pegawai tanggal jumlah 1 3 1003 3 1 2025-06-05 2000000 2 1 1001 1 1 2025-06-01 1000000 3 2 1002 2 2 2025-06-03 500000
3.6 Menampilkan Data Transaksi Tertentu Menampilkan transaksi dengan jumlah lebih dari satu juta, digunakan perintah SELECT dengan klausa WHERE, kemudian hasilnya diurutkan berdasarkan tanggal menggunakan ORDER BY. Program: dbGetQuery(con, ” SELECT * FROM transaksi WHERE jumlah > 1000000 ORDER BY tanggal ASC; “)
Output: id_transaksi no_rekening id_jenis id_pegawai tanggal jumlah 1 3 1003 3 1 2025-06-05 2000000
3.7 Memperbarui Data (UPDATE) Saldo rekening dapat diperbarui setelah terjadi transaksi, misalnya pengurangan saldo karena penarikan. Program: dbExecute(con, ” UPDATE rekening SET saldo = saldo - 500000 WHERE no_rekening = 1002; “) dbGetQuery(con,”SELECT * FROM rekening WHERE no_rekening = 1002”)
Output: no_rekening id_nasabah saldo 1 1002 2 2500000
3.8 DELETE Perintah DELETE digunakan untuk menghapus data, misalnya jika ada transaksi yang dibatalkan. Program: dbExecute(con, ” DELETE FROM transaksi WHERE id_transaksi = 3; “)
Output: id_transaksi no_rekening id_jenis id_pegawai tanggal jumlah 1 1 1001 1 1 2025-06-01 1000000 2 2 1002 2 2 2025-06-03 500000
3.9 Menampilkan Data Gabungan (INNER JOIN) Data transaksi yang lengkap dapat ditampilkan dengan menggabungkan beberapa tabel menggunakan INNER JOIN. Program: dbGetQuery(con, ” SELECT t.id_transaksi, n.nama AS nasabah, j.nama_jenis AS jenis, t.tanggal, t.jumlah, p.nama_pegawai AS pegawai FROM transaksi t INNER JOIN rekening r ON t.no_rekening = r.no_rekening INNER JOIN nasabah n ON r.id_nasabah = n.id_nasabah INNER JOIN jenis_transaksi j ON t.id_jenis = j.id_jenis INNER JOIN pegawai p ON t.id_pegawai = p.id_pegawai; “)
Output: id_transaksi nasabah jenis tanggal jumlah pegawai 1 1 Andi Setiawan Setoran 2025-06-01 1000000 Dina Aulia 2 2 Budi Santoso Penarikan 2025-06-03 500000 Rizal Maulana 3 3 Clara Widya Transfer 2025-06-05 2000000 Dina Aulia
3.10 Menggunakan Alias dan Fungsi Agregat (SUM, AVG) Untuk menampilkan total dan rata-rata transaksi, digunakan fungsi agregat SUM dan AVG, dengan penggunaan alias agar hasilnya lebih terbaca. Program: dbGetQuery(con, ” SELECT SUM(jumlah) AS total_transaksi, AVG(jumlah) AS rata_rata_transaksi FROM transaksi; “)
Output: total_transaksi rata_rata_transaksi 1 1500000 750000
3.11 Laporan Akhir Data transaksi yang sudah digabung dapat ditampilkan sebagai laporan akhir menggunakan fungsi print() atau View(). Program: query_laporan <- ” SELECT t.id_transaksi, n.nama AS nasabah, j.nama_jenis AS jenis, t.tanggal, t.jumlah, p.nama_pegawai AS pegawai FROM transaksi t JOIN rekening r ON t.no_rekening = r.no_rekening JOIN nasabah n ON r.id_nasabah = n.id_nasabah JOIN jenis_transaksi j ON t.id_jenis = j.id_jenis JOIN pegawai p ON t.id_pegawai = p.id_pegawai; ” laporan <- dbGetQuery(con, query_laporan) print(laporan)
Output: > print(laporan) id_transaksi nasabah jenis tanggal jumlah pegawai 1 1 Andi Setiawan Setoran 2025-06-01 1000000 Dina Aulia 2 2 Budi Santoso Penarikan 2025-06-03 500000 Rizal Maulana 3 3 Clara Widya Transfer 2025-06-05 2000000 Dina Aulia >
Setelah dilakukan proses penghapusan transaksi dengan id_transaksi = 3, tabel transaksi kini hanya memuat dua data transaksi aktif. Transaksi pertama dilakukan oleh Andi Setiawan pada tanggal 1 Juni 2025 dengan jenis transaksi Setoran sebesar Rp1.000.000 dan dilayani oleh pegawai Dina Aulia. Sementara itu, transaksi kedua berasal dari nasabah Budi Santoso pada tanggal 3 Juni 2025 berupa Penarikan sebesar Rp500.000 yang dilayani oleh pegawai Rizal Maulana.