library(DBI)
## Warning: package 'DBI' was built under R version 4.5.2
library(RMySQL)
## Warning: package 'RMySQL' was built under R version 4.5.2
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.5.2
##
## Attaching package: 'RSQLite'
## The following object is masked from 'package:RMySQL':
##
## isIdCurrent
#Membuat database
loundrydb <- dbConnect(
MySQL(),
user = "root",
password = "",
host = "localhost"
)
dbExecute(loundrydb, "CREATE DATABASE IF NOT EXISTS loundry")
## [1] 0
#Mengaktifkan database
dbExecute(loundrydb, "USE loundry")
## [1] 0
Pada tahap awal, proses implementasi dimulai dengan mempersiapkan koneksi antara R dan MySQL menggunakan paket DBI, RMySQL, serta RSQLite. Melalui perintah dbConnect(), R dihubungkan dengan MySQL sehingga memungkinkan pembuatan database baru. Dalam praktik ini dibuat database bernama loundry menggunakan perintah CREATE DATABASE, kemudian diaktifkan dengan menjalankan perintah USE loundry. Output yang dihasilkan berupa nilai [1] 0, yang menunjukkan bahwa perintah telah berhasil dieksekusi tanpa error
#Membuat struktur tabel
#tabel karyawan
dbExecute(loundrydb, "
CREATE TABLE karyawan
(id_karyawan INT PRIMARY KEY,
nama_karyawan TEXT,
no_HP TEXT);
")
## [1] 0
#tabel karyawan
dbExecute(loundrydb, "
CREATE TABLE pelanggan
(id_pelanggan INT PRIMARY KEY,
nama_pelanggan TEXT,
alamat TEXT,
no_HP TEXT);
")
## [1] 0
#tabel layanan
dbExecute(loundrydb, "
CREATE TABLE layanan
(id_layanan INT PRIMARY KEY,
jenis_layanan TEXT,
harga_per_kg DECIMAL (10,2));
")
## [1] 0
#tabel transaksi
dbExecute(loundrydb, "
CREATE TABLE transaksi
(id_transaksi INT PRIMARY KEY,
id_pelanggan INT,
id_karyawan INT,
id_layanan INT,
berat DECIMAL (10,2),
total_harga DECIMAL (10,2),
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY (id_karyawan) REFERENCES karyawan(id_karyawan),
FOREIGN KEY (id_layanan) REFERENCES layanan(id_layanan));
")
## [1] 0
Pada program dibuat tabel dan struktur tabel yang diperlukan dalam sistem basis data laundry. Empat tabel yang dibuat meliputi karyawan, pelanggan, layanan, serta transaksi. Setiap tabel memiliki atribut sesuai kebutuhan sistem, dan tabel transaksi dilengkapi dengan foreign key yang menghubungkannya dengan tabel lainnya. Seluruh perintah CREATE TABLE berhasil dijalankan dengan output [1] 0, menandakan bahwa struktur tabel berhasil dibuat.
#Menginput data kedalam tabel
#input tabel pelanggan
dbExecute(loundrydb, "
INSERT INTO karyawan VALUES
(1, 'Nabila', '085276543211'),
(2, 'Rika', '081342654928');
")
## [1] 2
#input tabel karyawan
dbExecute(loundrydb, "
INSERT INTO pelanggan VALUES
(1, 'Raisa', 'Jln. Abdul Ghani', '081142862555'),
(2, 'Wina', 'Jln. Banteng', '085233445566'),
(3, 'Fikram', 'Jln. Poros Mina-Minanga', '086378269982');
")
## [1] 3
#input tabel layanan
dbExecute(loundrydb, "
INSERT INTO layanan VALUES
(1, 'Cuci', '25000'),
(2, 'setrika', '20000');
")
## [1] 2
#input tabel transaksi
dbExecute(loundrydb, "
INSERT INTO transaksi VALUES
(1, 1, 1, 1, 2, 2 * 25000),
(2, 2, 2, 1, 2.5, 2.5 * 25000),
(3, 3, 2, 2, 3, 3 * 20000);
")
## [1] 3
Pada program ini dilakukan proses penginputan data awal ke dalam seluruh tabel menggunakan perintah INSERT INTO melalui koneksi R ke MySQL. Data yang dimasukkan mencakup dua karyawan di tabel karyawan, tiga pelanggan di tabel pelanggan, dua jenis layanan di tabel layanan, serta tiga transaksi di tabel transaksi yang berisi informasi pelanggan, karyawan yang melayani, jenis layanan, berat cucian, dan total harga yang dihitung langsung melalui operasi aritmatika pada query. Output yang muncul seperti [1] 2, [1] 3, [1] 2, dan [1] 3 menandakan jumlah baris yang berhasil ditambahkan pada setiap tabel, sehingga proses pengisian data dapat dipastikan berjalan dengan baik dan tanpa error.
#mengupdate data pada tabel
dbExecute(loundrydb, "
INSERT INTO pelanggan VALUES
(4, 'Riska', 'Jln. Pramuka', '087654311234')
")
## [1] 1
dbExecute(loundrydb, "
INSERT INTO layanan VALUES
(3, 'cuci setrika', '30000')
")
## [1] 1
Pada program ini dilakukan proses penambahan data baru ke dalam tabel pelanggan dan tabel layanan menggunakan perintah INSERT INTO melalui koneksi R ke database. Pada tabel pelanggan ditambahkan satu data pelanggan baru dengan ID 4 atas nama Riska, lengkap dengan alamat dan nomor teleponnya, sedangkan pada tabel layanan dimasukkan satu jenis layanan baru dengan ID 3 yaitu cuci setrika dengan tarif 30.000. Output berupa [1] 1 pada kedua perintah menunjukkan bahwa masing-masing proses berhasil menambahkan satu baris data ke dalam tabel, sehingga dapat dipastikan bahwa proses update data berjalan dengan baik tanpa error.
#Menampilkan struktur tabel menggunakan select
dbGetQuery(loundrydb, "SELECT * FROM pelanggan")
## id_pelanggan nama_pelanggan alamat no_HP
## 1 1 Raisa Jln. Abdul Ghani 081142862555
## 2 2 Wina Jln. Banteng 085233445566
## 3 3 Fikram Jln. Poros Mina-Minanga 086378269982
## 4 4 Riska Jln. Pramuka 087654311234
dbGetQuery(loundrydb, "SELECT * FROM karyawan")
## id_karyawan nama_karyawan no_HP
## 1 1 Nabila 085276543211
## 2 2 Rika 081342654928
dbGetQuery(loundrydb, "SELECT * FROM layanan")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_layanan jenis_layanan harga_per_kg
## 1 1 Cuci 25000
## 2 2 setrika 20000
## 3 3 cuci setrika 30000
dbGetQuery(loundrydb, "SELECT * FROM transaksi")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 4 imported
## as numeric
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
## id_transaksi id_pelanggan id_karyawan id_layanan berat total_harga
## 1 1 1 1 1 2.0 50000
## 2 2 2 2 1 2.5 62500
## 3 3 3 2 2 3.0 60000
Program ini digunakan untuk menampilkan seluruh isi dari setiap tabel dalam database laundry dengan menggunakan perintah SELECT * melalui koneksi R. Perintah dbGetQuery() mengeksekusi query dan menampilkan isi tabel pelanggan, karyawan, layanan, serta transaksi. Hasil yang ditampilkan menunjukkan bahwa masing-masing tabel telah berisi data sesuai proses input sebelumnya, seperti daftar pelanggan beserta alamat dan nomor HP, data karyawan, daftar jenis layanan berikut harga per kilogram, serta data transaksi yang mencakup ID pelanggan, ID karyawan, jenis layanan, berat cucian, dan total harga. Pesan warning yang muncul hanyalah informasi bahwa tipe data decimal pada MySQL diimpor sebagai numeric dalam R, sehingga tidak memengaruhi hasil query maupun struktur tabel. Dengan demikian, proses penampilan struktur tabel berhasil dilakukan dan seluruh isi tabel dapat ditampilkan dengan baik tanpa error.
#Menghapus satu data pada tabel pelanggan
dbExecute(loundrydb, "
DELETE FROM pelanggan
WHERE id_pelanggan = 4
")
## [1] 1
Pada program ini dilakukan proses penghapusan satu data pada tabel pelanggan menggunakan perintah DELETE FROM melalui koneksi R ke database. Kondisi WHERE id_pelanggan = 4 digunakan untuk memastikan bahwa hanya baris data dengan ID pelanggan 4 yang dihapus, sehingga tidak mempengaruhi data pelanggan lainnya. Output yang muncul berupa [1] 1 menunjukkan bahwa satu baris data berhasil dihapus dari tabel pelanggan, sehingga proses penghapusan dapat dipastikan berjalan dengan baik dan tanpa error.
#Mengurutkan data (ORDER BY)
#ASC
dbGetQuery(loundrydb, "SELECT * FROM pelanggan ORDER BY nama_pelanggan ASC;")
## id_pelanggan nama_pelanggan alamat no_HP
## 1 3 Fikram Jln. Poros Mina-Minanga 086378269982
## 2 1 Raisa Jln. Abdul Ghani 081142862555
## 3 2 Wina Jln. Banteng 085233445566
dbGetQuery(loundrydb, "SELECT * FROM karyawan ORDER BY nama_karyawan ASC;")
## id_karyawan nama_karyawan no_HP
## 1 1 Nabila 085276543211
## 2 2 Rika 081342654928
#DESC
dbGetQuery(loundrydb, "SELECT * FROM transaksi ORDER BY berat DESC;")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 4 imported
## as numeric
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 5 imported
## as numeric
## id_transaksi id_pelanggan id_karyawan id_layanan berat total_harga
## 1 3 3 2 2 3.0 60000
## 2 2 2 2 1 2.5 62500
## 3 1 1 1 1 2.0 50000
dbGetQuery(loundrydb, "SELECT * FROM layanan ORDER BY jenis_layanan DESC;")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_layanan jenis_layanan harga_per_kg
## 1 2 setrika 20000
## 2 3 cuci setrika 30000
## 3 1 Cuci 25000
Pengurutan data menggunakan perintah ASC (Ascending), sistem akan menampilkan data dari urutan terkecil ke terbesar atau dari abjad A ke Z. Dalam contoh program yang digunakan, data pada tabel pelanggan diurutkan berdasarkan nama pelanggan secara alfabet naik, tabel karyawan diurutkan berdasarkan nama karyawan dari huruf awal paling kecil. Penggunaan ASC membantu mempermudah pencarian data secara sistematis dan meningkatkan keterbacaan informasi. Pengurutan menggunakan DESC (Descending) menghasilkan susunan data dari nilai terbesar ke terkecil atau dari abjad Z ke A. Pada contoh program, tabel transaksi menampilkan data dengan berat cucian terbesar terlebih dahulu, dan tabel layanan diurutkan dari jenis layanan dengan abjad akhir menuju awal. Metode DESC biasa digunakan ketika pengguna ingin melihat data dengan nilai tertinggi atau yang terbaru berada pada urutan paling atas.
#Menggabungkan tabel
#inner join
dbGetQuery(loundrydb, "
SELECT t.id_transaksi, p.nama_pelanggan, t.total_harga
FROM transaksi t
INNER JOIN pelanggan p
ON t.id_pelanggan = p.id_pelanggan;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_transaksi nama_pelanggan total_harga
## 1 1 Raisa 50000
## 2 2 Wina 62500
## 3 3 Fikram 60000
#left join
dbGetQuery(loundrydb, "
SELECT t.id_transaksi, p.nama_pelanggan, t.total_harga
FROM transaksi t
LEFT JOIN pelanggan p
ON t.id_pelanggan = p.id_pelanggan;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_transaksi nama_pelanggan total_harga
## 1 1 Raisa 50000
## 2 2 Wina 62500
## 3 3 Fikram 60000
#right join
dbGetQuery(loundrydb, "
SELECT t.id_transaksi, p.nama_pelanggan, t.total_harga
FROM transaksi t
RIGHT JOIN pelanggan p
ON t.id_pelanggan = p.id_pelanggan;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_transaksi nama_pelanggan total_harga
## 1 1 Raisa 50000
## 2 2 Wina 62500
## 3 3 Fikram 60000
#full outer join
dbGetQuery(loundrydb, "
SELECT t.id_transaksi, p.nama_pelanggan, t.total_harga
FROM transaksi t
INNER JOIN pelanggan p
ON t.id_pelanggan = p.id_pelanggan
UNION
SELECT t.id_transaksi, p.nama_pelanggan, t.total_harga
FROM transaksi t
LEFT JOIN pelanggan p
ON t.id_pelanggan = p.id_pelanggan;
")
## Warning in dbSendQuery(conn, statement, ...): Decimal MySQL column 2 imported
## as numeric
## id_transaksi nama_pelanggan total_harga
## 1 1 Raisa 50000
## 2 2 Wina 62500
## 3 3 Fikram 60000
Pada proses penggabungan tabel (JOIN) dalam basis data, setiap jenis join memiliki fungsi yang berbeda sesuai kebutuhan analisis data. Inner join digunakan untuk menampilkan data yang memiliki kecocokan pada kedua tabel, sehingga hanya baris transaksi yang mempunyai pasangan id_pelanggan yang akan ditampilkan. Berbeda dengan itu, left join mengambil seluruh data dari tabel transaksi meskipun beberapa id_pelanggan tidak memiliki pasangan di tabel pelanggan, sehingga baris dari tabel kiri tetap ditampilkan meskipun data pelanggan bernilai NULL. Selanjutnya, right join bekerja sebaliknya, yaitu menampilkan semua data dari tabel pelanggan meskipun ada pelanggan yang belum memiliki transaksi, sementara data transaksi hanya muncul jika ada kecocokan id. Terakhir, full outer join menggabungkan hasil left join dan right join sehingga seluruh data dari kedua tabel ditampilkan, baik yang memiliki kecocokan maupun tidak.