#3.1 Membuat Koneksi Database Program: Instalasi dan import package install.packages(c(“DBI”, “RMySQL”, “RMariaDB”)) # jika belum ada library(DBI) library(RMySQL) library(RMariaDB)

Koneksi ke server MySQL dbb <- dbConnect( RMySQL::MySQL(), host = “127.0.0.1”, user = “root”, password = “” )

Output: [1] 0

Pada tahap ini dilakukan persiapan awal sebelum membangun sistem basis data. Paket DBI, RMySQL, dan RMariaDB diimpor untuk memungkinkan R terhubung dengan server MySQL dan menjalankan perintah SQL. Selanjutnya dibuat koneksi ke MySQL menggunakan dbConnect() dengan host lokal dan user root. Output [1] 0 menunjukkan bahwa perintah SQL yang dijalankan berhasil tanpa error, meskipun tidak menghasilkan baris data karena bukan perintah SELECT, melainkan operasi seperti CREATE atau INSERT.

#3.2 Membuat dan Mengakses Database Program: dbExecute(dbb, “DROP DATABASE IF EXISTS BengkelMotor;”) dbExecute(dbb, “CREATE DATABASE BengkelMotor”) dbExecute(dbb, “USE BengkelMotor”)

Output: [1] 4 [1] 1 [1] 0

Pada tahap ini dilakukan proses pembuatan dan pengaksesan database yang akan digunakan dalam sistem. Perintah DROP DATABASE IF EXISTS berfungsi menghapus database lama apabila sebelumnya sudah pernah dibuat, sedangkan CREATE DATABASE digunakan untuk membuat database baru bernama BengkelMotor. Selanjutnya, perintah USE BengkelMotor digunakan untuk mengaktifkan database tersebut agar seluruh operasi SQL berikutnya dijalankan di dalamnya.Output [1] 4, [1] 1, dan [1] 0 menunjukkan bahwa setiap perintah berhasil dieksekusi tanpa error. Angka tersebut bukan jumlah baris data, melainkan kode keberhasilan yang umum muncul pada perintah non-SELECT seperti DROP, CREATE, dan USE.

#3.3 Membuat Tabel Program: dbExecute(dbb, ” CREATE TABLE Pelanggan ( ID_Pelanggan VARCHAR(15) PRIMARY KEY NOT NULL, Nama_Pelanggan VARCHAR(50) NOT NULL, Nomor_HP VARCHAR(20) NOT NULL, Alamat VARCHAR(100) ); “)

dbExecute(dbb, ” CREATE TABLE Mekanik ( ID_Mekanik VARCHAR(10) PRIMARY KEY NOT NULL, Nama_Mekanik VARCHAR(50) NOT NULL, Keahlian VARCHAR(50) NOT NULL ); “)

dbExecute(dbb, ” CREATE TABLE Layanan ( ID_Layanan VARCHAR(10) PRIMARY KEY, Nama_Layanan VARCHAR(100) NOT NULL, Harga INT NOT NULL ); “) dbExecute(dbb,” CREATE TABLE Transaksi ( ID_Transaksi VARCHAR(10) PRIMARY KEY, ID_Pelanggan VARCHAR(15) NOT NULL, ID_Mekanik VARCHAR(10) NOT NULL, ID_Layanan VARCHAR(10) NOT NULL, Tanggal DATE NOT NULL, Total INT, Metode_Bayar VARCHAR(20) NOT NULL, FOREIGN KEY (ID_Pelanggan) REFERENCES Pelanggan(ID_Pelanggan), FOREIGN KEY (ID_Mekanik) REFERENCES Mekanik(ID_Mekanik), FOREIGN KEY (ID_Layanan) REFERENCES Layanan(ID_Layanan) ); “)

Output: [1] 0 [1] 0 [1] 0 [1] 0

Pada tahap ini dilakukan proses pembuatan seluruh tabel yang dibutuhkan dalam sistem layanan bengkel motor. Tabel Pelanggan, Mekanik, dan Layanan dibuat untuk menyimpan data dasar yang menjadi acuan dalam transaksi, sedangkan tabel Transaksi dibangun sebagai tabel utama yang menghubungkan ketiga tabel tersebut melalui foreign key. Masing-masing perintah CREATE TABLE berhasil dijalankan, ditunjukkan oleh output [1] 0 yang menandakan bahwa perintah eksekusi SQL selesai tanpa error. Angka 0 tersebut normal karena perintah CREATE tidak menghasilkan baris data, melainkan hanya mendefinisikan struktur tabel.

#3.4 Mengisi Data Program: Pelanggan dbExecute(dbb, ” INSERT INTO Pelanggan VALUES (‘PL001’,‘Emi’,‘081222’,‘Kambara’), (‘PL002’,‘Askar’,‘081333’,‘Katela’), (‘PL003’,‘Nila’,‘081444’,‘Waumere’), (‘PL004’,‘Yusran’,‘081555’,‘Waturempe’); “)

Mekanik dbExecute(dbb, ” INSERT INTO Mekanik VALUES (‘MK001’,‘Angga’,‘Servis Mesin’), (‘MK002’,‘Ikel’,‘Ganti Oli’), (‘MK003’,‘Ujang’,‘Tune Up’); “)

Layanan dbExecute(dbb, ” INSERT INTO Layanan VALUES (‘L001’, ‘Ganti Oli’, 30000), (‘L002’, ‘Servis Ringan’, 50000), (‘L003’, ‘Tune Up Lengkap’, 80000); “)

Transaksi dbExecute(dbb, ” INSERT INTO Transaksi VALUES (‘T001’,‘PL001’,‘MK002’,‘L001’,‘2025-12-01’,30000,‘Cash’), (‘T002’,‘PL002’,‘MK001’,‘L002’,‘2025-12-01’,50000,‘Qris’), (‘T003’,‘PL003’,‘MK003’,‘L003’,‘2025-12 02’,80000,‘Transfer’), (‘T004’,‘PL004’,‘MK002’,‘L001’,‘2025-12-03’,30000,‘Cash’), (‘T005’,‘PL002’,‘MK003’,‘L003’,‘2025-12-04’,80000,‘Qris’), (‘T006’,‘PL001’,‘MK001’,‘L002’,‘2025-12-05’,50000,‘Debit’), (‘T007’,‘PL003’,‘MK002’,‘L001’,‘2025-12-06’,30000,‘Cash’), (‘T008’,‘PL004’,‘MK003’,‘L003’,‘2025-12-07’,80000,‘Qris’); “)

Output: [1] 4 [1] 3 [1] 3 [1] 8

Pada tahap ini dilakukan proses pengisian data awal ke dalam seluruh tabel yang telah dibuat. Data dimasukkan ke tabel Pelanggan, Mekanik, Layanan, dan Transaksi menggunakan perintah INSERT INTO. Setiap tabel menerima sejumlah baris data sesuai kebutuhan sistem, seperti informasi pelanggan, daftar mekanik, jenis layanan, serta catatan transaksi selama satu minggu. Output [1] 4, [1] 3, [1] 3, dan [1] 8 menunjukkan jumlah baris yang berhasil ditambahkan ke masing-masing tabel. Nilai tersebut menandakan bahwa proses penyisipan data berjalan dengan baik tanpa error.

#3.5 Menampilkan Data Program: print(dbGetQuery(dbb, “SELECT * FROM Pelanggan;”)) print(dbGetQuery(dbb, “SELECT * FROM Mekanik;”)) print(dbGetQuery(dbb, “SELECT * FROM Layanan;”)) print(dbGetQuery(dbb, “SELECT * FROM Transaksi;”))

Output: Hasil Output

#3.6 INNER JOIN Program: dbGetQuery(dbb, ” SELECT tr.ID_Transaksi, pl.Nama_Pelanggan, mk.Nama_Mekanik, ly.Nama_Layanan, tr.Tanggal, tr.Total FROM Transaksi tr INNER JOIN Pelanggan pl ON tr.ID_Pelanggan = pl.ID_Pelanggan INNER JOIN Mekanik mk ON tr.ID_Mekanik = mk.ID_Mekanik INNER JOIN Layanan ly ON tr.ID_Layanan = ly.ID_Layanan; “)

Output: Hasil Output Perintah ini digunakan untuk menampilkan data transaksi secara lengkap dengan menggabungkan empat tabel sekaligus, yaitu Transaksi, Pelanggan, Mekanik, dan Layanan. Penggunaan INNER JOIN memastikan bahwa hanya transaksi yang memiliki kecocokan data pada ketiga tabel referensi yang ditampilkan. Hasil query menampilkan informasi penting seperti ID transaksi, nama pelanggan, nama mekanik, jenis layanan, tanggal transaksi, dan total biaya. Query ini berfungsi sebagai laporan utama untuk melihat aktivitas layanan bengkel secara menyeluruh.

#3.7 RIGHT JOIN (semua layanan) Program: dbGetQuery(dbb, ” SELECT ly.ID_Layanan, ly.Nama_Layanan, tr.ID_Transaksi, tr.Total FROM Transaksi tr RIGHT JOIN Layanan ly ON tr.ID_Layanan = ly.ID_Layanan ORDER BY ly.ID_Layanan; “)

Output: Hasil Output Perintah ini digunakan untuk menampilkan seluruh data layanan yang tersedia di bengkel, termasuk layanan yang belum pernah digunakan dalam transaksi. Penggunaan RIGHT JOIN memastikan bahwa semua baris dari tabel Layanan tetap ditampilkan, meskipun tidak memiliki pasangan data pada tabel Transaksi. Jika suatu layanan belum pernah dipilih pelanggan, maka kolom ID_Transaksi atau Total akan bernilai NULL. Query ini berguna untuk menganalisis layanan mana yang aktif digunakan dan mana yang belum memiliki transaksi.

#3.8 FULL JOIN (simulasi dengan UNION) Program: dbGetQuery(dbb, ” SELECT pl.ID_Pelanggan, pl.Nama_Pelanggan, tr.ID_Transaksi, tr.Total FROM Pelanggan pl LEFT JOIN Transaksi tr ON pl.ID_Pelanggan = tr.ID_Pelanggan UNION SELECT pl.ID_Pelanggan, pl.Nama_Pelanggan, tr.ID_Transaksi, tr.Total FROM Pelanggan pl RIGHT JOIN Transaksi tr ON pl.ID_Pelanggan = tr.ID_Pelanggan; “)

Output: Hasil Output Perintah ini digunakan untuk melakukan simulasi FULL OUTER JOIN karena MySQL tidak menyediakan full join secara langsung. Teknik yang digunakan adalah menggabungkan hasil LEFT JOIN dan RIGHT JOIN melalui perintah UNION, sehingga semua data dari kedua tabel baik yang memiliki pasangan maupun yang tidak akan tetap muncul. Query ini menampilkan seluruh pelanggan beserta transaksi mereka. Jika ada pelanggan yang belum pernah melakukan transaksi atau transaksi yang tidak memiliki data pelanggan valid, maka kolom terkait akan bernilai NULL. Cara ini berguna untuk melihat data secara keseluruhan tanpa kehilangan baris dari salah satu tabel.

#3.9 UPDATE Harga Layanan Program: dbExecute(dbb, ” UPDATE Layanan SET Harga = 35000 WHERE ID_Layanan = ‘L001’; “)

Output: [1] 1

Pada tahap ini dilakukan proses pembaruan data pada tabel Layanan. Perintah UPDATE digunakan untuk mengubah harga layanan dengan ID L001, yaitu layanan Ganti Oli, menjadi 35.000. Operasi ini diperlukan ketika terjadi penyesuaian harga atau perubahan biaya layanan di bengkel. Output [1] 1 menunjukkan bahwa satu baris data berhasil diperbarui, menandakan bahwa perintah UPDATE telah dieksekusi dengan sukses.

#3.10 DELETE Layanan & Tambah Layanan Baru Program: Tambah layanan baru L004 dulu dbExecute(dbb, ” INSERT IGNORE INTO Layanan (ID_Layanan, Nama_Layanan, Harga) VALUES (‘L004’, ‘Servis Rem’, 45000); “) Update transaksi L002 ke L004 dbExecute(dbb,”UPDATE Transaksi SET ID_Layanan=‘L004’ WHERE ID_Layanan=‘L002’;“) Hapus layanan lama L002 dbExecute(dbb,”DELETE FROM Layanan WHERE ID_Layanan=‘L002’;“)

Output: [1] 1 [1] 2 [1] 1

Pada tahap ini dilakukan proses pemeliharaan data layanan di dalam sistem bengkel. Pertama, layanan baru dengan kode L004 (Servis Rem) ditambahkan ke tabel Layanan menggunakan perintah INSERT IGNORE, sehingga data hanya ditambahkan jika belum ada sebelumnya. Setelah itu, seluruh transaksi yang sebelumnya menggunakan layanan L002 (Servis Ringan) diperbarui agar mengacu pada layanan baru L004, menggunakan perintah UPDATE. Langkah ini penting untuk menjaga konsistensi data sebelum layanan lama dihapus. Terakhir, layanan L002 dihapus dari tabel Layanan karena sudah tidak digunakan lagi. Output [1] 1, [1] 2, dan [1] 1 menunjukkan bahwa masing-masing perintah berhasil dijalankan, satu layanan baru ditambahkan, dua transaksi diperbarui, dan satu layanan berhasil dihapus.

#3.11 Laporan Pendapatan Data transaksi yang sudah digabung dapat ditampilkan sebagai laporan akhir menggunakan fungsi print() atau View(). Program: dbGetQuery(dbb, ” SELECT SUM(Total) AS TotalPendapatan, AVG(Total) AS RataRataPendapatan FROM Transaksi; “)

Output: Hasil Output

Setelah dilakukan perhitungan menggunakan fungsi agregat pada tabel Transaksi, diperoleh bahwa total pendapatan bengkel mencapai Rp430.000, sedangkan rata-rata pendapatan per layanan adalah Rp53.750. Kedua nilai ini memberikan gambaran umum mengenai kondisi finansial bengkel dan dapat digunakan sebagai dasar evaluasi terhadap stabilitas pemasukan dari layanan yang diberikan.

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.