Import Library yang akan digunakan

library(DBI)
## Warning: package 'DBI' was built under R version 4.5.2
library(RMariaDB)
## Warning: package 'RMariaDB' was built under R version 4.5.2

Koneksikan ke MySQL Server

server <- dbConnect(
  RMariaDB::MariaDB(),
  host = "localhost",
  user = "root",
  password = ""
)

Membuat Database dan Tabel Baru

# Membuat database baru
dbExecute(server, "CREATE DATABASE IF NOT EXISTS Manajemen_Muusik;")
## [1] 1
dbExecute(server, "USE Manajemen_Muusik;")
## [1] 0
#Tabel User
dbExecute(server, "
          CREATE TABLE USER (
    ID_User VARCHAR(10) PRIMARY KEY,
    Nama VARCHAR(100) NOT NULL,
    Email VARCHAR(100) UNIQUE NOT NULL,
    Tanggal_Registrasi DATE NOT NULL,
    Preferensi_Genre ENUM('Pop', 'Rock', 'Jazz', 'Classical', 'Hip-Hop', 'Electronic') NOT NULL
); 
          ")
## [1] 0
## Membuat Tabel Baru Pada Sebuah Database

#Tabel Artist
dbExecute(server, "
          CREATE TABLE ARTIST (
    ID_Artist VARCHAR(10) PRIMARY KEY,
    Nama_Artist VARCHAR(100) NOT NULL,
    Email VARCHAR(100) UNIQUE NOT NULL,
    Tanggal_Daftar DATE NOT NULL,
    Genre ENUM('Pop', 'Rock', 'Jazz', 'Classical', 'Hip-Hop', 'Electronic') NOT NULL
); 
          ")
## [1] 0
#Tabel Album
dbExecute(server, "
          CREATE TABLE ALBUM (
    ID_Album VARCHAR(10) PRIMARY KEY,
    ID_Artist VARCHAR(10) NOT NULL,
    Nama_Album VARCHAR(100) NOT NULL,
    Tanggal_Rilis DATE NOT NULL,
    Jenis_Album ENUM('Studio', 'Live', 'Compilation', 'EP') NOT NULL,
    FOREIGN KEY (ID_Artist) REFERENCES ARTIST(ID_Artist)
);
          ")
## [1] 0
#Tabel Track
dbExecute(server, "
          CREATE TABLE TRACK (
    ID_Track VARCHAR(10) PRIMARY KEY,
    ID_Album VARCHAR(10) NOT NULL,
    Nama_Track VARCHAR(100) NOT NULL,
    Durasi TIME NOT NULL,
    Genre ENUM('Pop', 'Rock', 'Jazz', 'Classical', 'Hip-Hop', 'Electronic') NOT NULL,
    FOREIGN KEY (ID_Album) REFERENCES ALBUM(ID_Album)
);
          ")
## [1] 0
#Tabel Playlist
dbExecute(server, "
          CREATE TABLE PLAYLIST (
    ID_Playlist VARCHAR (10) PRIMARY KEY,
    ID_User VARCHAR (10) NOT NULL,
    Nama_Playlist VARCHAR(100) NOT NULL,
    Tanggal_Dibuat DATE NOT NULL,
    FOREIGN KEY (ID_User) REFERENCES USER(ID_User)
);
          ")
## [1] 0
#Tabel Streaming
dbExecute(server, "
          CREATE TABLE STREAMING(
    ID_Streaming VARCHAR(10) PRIMARY KEY,
    ID_User VARCHAR(10) NOT NULL,
    ID_Track VARCHAR(10) NOT NULL,
    Tanggal_Streaming DATE NOT NULL,
    Waktu_Mulai TIME NOT NULL,
    Durasi_Diputar TIME,
    FOREIGN KEY (ID_User) REFERENCES USER(ID_User),
    FOREIGN KEY (ID_Track) REFERENCES TRACK(ID_Track)
);
          ")
## [1] 0

Memasukkan Data Ke Dalam Masing-masing Tabel

# Pastikan menggunakan database Manajemen_Musik
dbExecute(server, "USE Manajemen_Muusik;")
## [1] 0
# memasukkan data pada tabel User
dbExecute(server, "
          INSERT INTO USER (ID_User, Nama, Email, Tanggal_Registrasi, Preferensi_Genre) VALUES
          ('USR001', 'Budi Santoso', 'budi@email.com', '2025-01-15', 'Pop'),
          ('USR002', 'Sari Wijaya', 'sari@email.com', '2025-02-20', 'Rock'),
          ('USR003', 'Andi Rahman', 'andi@email.com', '2025-03-10', 'Jazz');
          ")
## [1] 3
# Memasukkan data pada tabel Artist
dbExecute(server, "
          INSERT INTO ARTIST (ID_Artist, Nama_Artist, Email, Tanggal_Daftar, Genre) VALUES
          ('ART001', 'Coldplay', 'coldplay@official.com', '2000-01-01', 'Pop'),
          ('ART002', 'Metallica', 'metallica@official.com', '1981-10-28', 'Rock'),
          ('ART003', 'Miles Davis', 'miles@official.com', '1945-11-12', 'Jazz'),
          ('ART004', 'tenxi', 'tenx@official.com', '1945-11-21', 'Rock'),
          ('ART005', 'Deabdil', 'deabdls@official.com', '1945-12-10', 'Pop');
          ")
## [1] 5
# Memasukkan data Pada Tabel Album
dbExecute(server, "
          INSERT INTO ALBUM (ID_Album, ID_Artist, Nama_Album, Tanggal_Rilis, Jenis_Album) VALUES
          ('ALB001', 'ART001', 'Music of the Spheres', '2021-10-15', 'Studio'),
          ('ALB002', 'ART002', 'Master of Puppets', '1986-03-03', 'Studio'),
          ('ALB003', 'ART003', 'Kind of Blue', '1959-08-17', 'Studio'),
          ('ALB004', 'ART004', 'Mejikuhibiniu', '1990-01-17', 'Studio'),
          ('ALB005', 'ART005', 'Kapsul Waktu', '1959-08-17', 'Studio');
          ")
## [1] 5
# Memasukkan data pada tabel Track
dbExecute(server, "
          INSERT INTO TRACK (ID_Track, ID_Album, Nama_Track, Durasi, Genre) VALUES
          ('TRK001', 'ALB001', 'Higher Power', '00:04:14', 'Pop'),
          ('TRK002', 'ALB001', 'My Universe', '00:02:47', 'Pop'),
          ('TRK003', 'ALB002', 'Battery', '00:05:12', 'Rock'),
          ('TRK004', 'ALB003', 'So What', '00:09:22', 'Jazz');
          ")
## [1] 4
# memasukkan data pada Playlist
dbExecute(server, "
          INSERT INTO PLAYLIST (ID_Playlist, ID_User, Nama_Playlist, Tanggal_Dibuat) VALUES
          ('PLY001', 'USR001', 'Pop Favorites', '2025-01-20'),
          ('PLY002', 'USR002', 'Rock Classics', '2025-02-25'),
          ('PLY003', 'USR003', 'Jazz Nights', '2025-03-15');
          ")
## [1] 3
# memasukkan data pada tabel Streaming
dbExecute(server, "
          INSERT INTO STREAMING (ID_Streaming, ID_User, ID_Track, Tanggal_Streaming, Waktu_Mulai, Durasi_Diputar) VALUES
          ('STR001', 'USR001', 'TRK001', '2025-12-01', '20:30:00', '00:03:45'),
          ('STR002', 'USR002', 'TRK003', '2025-12-02', '22:15:00', '00:04:20'),
          ('STR003', 'USR003', 'TRK004', '2025-12-03', '19:45:00', '00:08:30');
          ")
## [1] 3

Menampilkan yang Ada Data pada Tabel

#menampilkan kolom-kolom yang dibuat
print(dbListTables(server))
## [1] "album"     "artist"    "playlist"  "streaming" "track"     "user"
#Memilih tabel 
User_dataa      <- dbGetQuery(server, "SELECT * FROM USER;")
print(User_dataa)
##   ID_User         Nama          Email Tanggal_Registrasi Preferensi_Genre
## 1  USR001 Budi Santoso budi@email.com         2025-01-15              Pop
## 2  USR002  Sari Wijaya sari@email.com         2025-02-20             Rock
## 3  USR003  Andi Rahman andi@email.com         2025-03-10             Jazz
Artist_dataa    <- dbGetQuery(server, "SELECT * FROM ARTIST;")
print(Artist_dataa)
##   ID_Artist Nama_Artist                  Email Tanggal_Daftar Genre
## 1    ART001    Coldplay  coldplay@official.com     2000-01-01   Pop
## 2    ART002   Metallica metallica@official.com     1981-10-28  Rock
## 3    ART003 Miles Davis     miles@official.com     1945-11-12  Jazz
## 4    ART004       tenxi      tenx@official.com     1945-11-21  Rock
## 5    ART005     Deabdil   deabdls@official.com     1945-12-10   Pop
Album_dataa     <- dbGetQuery(server, "SELECT * FROM ALBUM;")
print(Album_dataa)
##   ID_Album ID_Artist           Nama_Album Tanggal_Rilis Jenis_Album
## 1   ALB001    ART001 Music of the Spheres    2021-10-15      Studio
## 2   ALB002    ART002    Master of Puppets    1986-03-03      Studio
## 3   ALB003    ART003         Kind of Blue    1959-08-17      Studio
## 4   ALB004    ART004        Mejikuhibiniu    1990-01-17      Studio
## 5   ALB005    ART005         Kapsul Waktu    1959-08-17      Studio
Track_dataa     <- dbGetQuery(server, "SELECT * FROM TRACK;")
print(Track_dataa)
##   ID_Track ID_Album   Nama_Track   Durasi Genre
## 1   TRK001   ALB001 Higher Power 00:04:14   Pop
## 2   TRK002   ALB001  My Universe 00:02:47   Pop
## 3   TRK003   ALB002      Battery 00:05:12  Rock
## 4   TRK004   ALB003      So What 00:09:22  Jazz
Playlist_dataa  <- dbGetQuery(server, "SELECT * FROM PLAYLIST;")
print(Playlist_dataa)
##   ID_Playlist ID_User Nama_Playlist Tanggal_Dibuat
## 1      PLY001  USR001 Pop Favorites     2025-01-20
## 2      PLY002  USR002 Rock Classics     2025-02-25
## 3      PLY003  USR003   Jazz Nights     2025-03-15
Streaming_dataa <- dbGetQuery(server, "SELECT * FROM STREAMING;")
print(Streaming_dataa)
##   ID_Streaming ID_User ID_Track Tanggal_Streaming Waktu_Mulai Durasi_Diputar
## 1       STR001  USR001   TRK001        2025-12-01    20:30:00       00:03:45
## 2       STR002  USR002   TRK003        2025-12-02    22:15:00       00:04:20
## 3       STR003  USR003   TRK004        2025-12-03    19:45:00       00:08:30
#Memperbarui / mengubah data di tabel
Update_Userr <- dbExecute(server, "UPDATE USER SET Preferensi_Genre = 'pop' WHERE ID_User = 'USR001';")
print(Update_Userr)
## [1] 0
Update_Artistt <- dbExecute(server, "UPDATE ARTIST SET Genre = 'Rock' WHERE Nama_Artist = 'Miles Davis';")
print(Update_Artistt)
## [1] 1
#menghapus data dari tabel
Delete_Streamingg <- dbExecute(server, "DELETE FROM STREAMING WHERE ID_Streaming = 'STR001';")
print(Delete_Streamingg)
## [1] 1
Delete_Playlistt <- dbExecute(server, "DELETE FROM PLAYLIST WHERE Nama_Playlist = 'Jazz Nights';")
print(Delete_Playlistt)
## [1] 1
#Mengurutkan data
Track_Sorted_Ascc <- dbGetQuery(server, "SELECT Nama_Track, Durasi FROM TRACK ORDER BY Durasi ASC;")
print(Track_Sorted_Ascc)
##     Nama_Track   Durasi
## 1  My Universe 00:02:47
## 2 Higher Power 00:04:14
## 3      Battery 00:05:12
## 4      So What 00:09:22
Track_Sorted_Descc <- dbGetQuery(server,"SELECT Durasi, Nama_Track FROM TRACK ORDER BY Nama_Track DESC;")
print(Track_Sorted_Descc)
##     Durasi   Nama_Track
## 1 00:09:22      So What
## 2 00:02:47  My Universe
## 3 00:04:14 Higher Power
## 4 00:05:12      Battery

Menggabungkan Tabel

  1. Inner Join : jenis join yang hanya menampilkan data yang memiliki kecocokan pada kedua tabel.Jika tidak ada pasangan yang cocok antara tabel A dan tabel B, maka baris tersebut tidak dimasukkan ke hasil.

  2. Left Join : join yang mengambil seluruh data dari tabel sebelah kiri, dan data dari tabel sebelah kanan yang cocok saja.Jika tidak ada kecocokan, kolom dari tabel kanan akan berisi NULL.

  3. Rigth Join : kebalikan dari LEFT JOIN. Join ini mengambil seluruh data dari tabel sebelah kanan, sementara data dari tabel kiri hanya ditampilkan jika ada kecocokan.Jika tidak cocok, kolom dari tabel kiri menjadi NULL.

  4. Full Join : join yang mengambil semua data dari tabel kiri dan tabel kanan, baik yang cocok maupun yang tidak cocok.Jika ada baris yang tidak memiliki pasangan, maka kolom dari tabel yang tidak memiliki pasangan akan berisi NULL.

# Menggabungkan tabel User dan Playlist dengan INNER JOIN
data_user_playlist_inner <- dbGetQuery(server, "
  SELECT USER.Nama, PLAYLIST.Nama_Playlist 
  FROM USER
  INNER JOIN PLAYLIST ON USER.ID_User = PLAYLIST.ID_User
")
print(data_user_playlist_inner)
##           Nama Nama_Playlist
## 1 Budi Santoso Pop Favorites
## 2  Sari Wijaya Rock Classics
# Menggabungkan tabel Artist dan Album dengan LEFT JOIN
data_artist_album_left <- dbGetQuery(server, "
  SELECT ARTIST.Nama_Artist, ALBUM.Nama_Album
  FROM ARTIST
  LEFT JOIN ALBUM ON ARTIST.ID_Artist = ALBUM.ID_Artist
")
print(data_artist_album_left)
##   Nama_Artist           Nama_Album
## 1    Coldplay Music of the Spheres
## 2   Metallica    Master of Puppets
## 3 Miles Davis         Kind of Blue
## 4       tenxi        Mejikuhibiniu
## 5     Deabdil         Kapsul Waktu
# Menggabungkan tabel Album dan Track dengan RIGHT JOIN
data_album_track_right <- dbGetQuery(server, "
  SELECT ALBUM.Nama_Album, TRACK.Nama_Track
  FROM ALBUM
  RIGHT JOIN TRACK ON ALBUM.ID_Album = TRACK.ID_Album
")
print(data_album_track_right)
##             Nama_Album   Nama_Track
## 1 Music of the Spheres Higher Power
## 2 Music of the Spheres  My Universe
## 3    Master of Puppets      Battery
## 4         Kind of Blue      So What
# FULL OUTER JOIN User dan Playlist menggunakan UNION
data_user_playlist_full <- dbGetQuery(server, "
  SELECT USER.Nama, PLAYLIST.Nama_Playlist
  FROM USER
  LEFT JOIN PLAYLIST ON USER.ID_User = PLAYLIST.ID_User

  UNION

  SELECT USER.Nama, PLAYLIST.Nama_Playlist
  FROM USER
  RIGHT JOIN PLAYLIST ON User.ID_User = PLAYLIST.ID_User
  WHERE USER.ID_User IS NULL
")
print(data_user_playlist_full)
##           Nama Nama_Playlist
## 1 Budi Santoso Pop Favorites
## 2  Sari Wijaya Rock Classics
## 3  Andi Rahman          <NA>