Praktikum Database/Sistem Basis Data 2 Labsheet 6

Labsheet 6 Sistem Basis Data II membahas JOIN di MySQL serta tugas membuat database roaster_karyawan lengkap dengan query dan analisis.

1. Tujuan

  • Mahasiswa memahami konsep dan penggunaan berbagai jenis JOIN dalam SQL.
  • Mahasiswa mampu menggabungkan data dari beberapa tabel menggunakan INNER JOIN, OUTER JOIN, CROSS JOIN, dan NATURAL JOIN.
  • Mahasiswa dapat mengimplementasikan relasi antar tabel melalui studi kasus Database Roaster Karyawan.

2. Langkah Kerja

1) Gunakan Database yang Telah Dibuat pada Labsheet 5

Gunakan database kampus dan tabel-tabel berikut:

Tabel fakultas

  • kode_fakultas : CHAR(10) PRIMARY KEY
  • nama_fakultas : VARCHAR(30) NOT NULL
  • jml_mhs : INTEGER

Tabel jurusan

  • kode_jur : CHAR(5) PRIMARY KEY
  • kode_fakultas : CHAR(10)
  • nama_jur : CHAR(30)

Tabel mahasiswa

  • nim : CHAR(7) PRIMARY KEY
  • nama_mhs : VARCHAR(30)
  • kode_fakultas : sesuai tabel fakultas
  • kode_jur : sesuai tabel jurusan

2) Penggunaan JOIN

1. CROSS JOIN

SELECT * FROM jurusan CROSS JOIN fakultas;

2. INNER JOIN

SELECT * FROM jurusan 
INNER JOIN fakultas 
ON jurusan.kode_fakultas = fakultas.kode_fakultas;

3. OUTER JOIN

a. LEFT OUTER JOIN

SELECT * FROM jurusan 
LEFT JOIN mahasiswa 
ON jurusan.kode_jur = mahasiswa.kode_jur;

b. RIGHT OUTER JOIN

SELECT * FROM jurusan 
RIGHT JOIN mahasiswa 
ON jurusan.kode_jur = mahasiswa.kode_jur;

4. NATURAL JOIN

SELECT * FROM jurusan NATURAL JOIN mahasiswa;

3. Latihan

1. Rincian Kegunaan JOIN

Jenis JOIN Kegunaan
CROSS JOIN Menghasilkan semua kombinasi baris dari dua tabel (Cartesian Product).
INNER JOIN Menampilkan baris yang memiliki kecocokan nilai pada kolom relasi kedua tabel.
LEFT OUTER JOIN Menampilkan semua data tabel kiri dan data cocok dari tabel kanan, sisanya NULL.
RIGHT OUTER JOIN Menampilkan semua data tabel kanan dan data cocok dari tabel kiri, sisanya NULL.
NATURAL JOIN Menggabungkan tabel otomatis berdasarkan kolom dengan nama yang sama tanpa menulis kondisi ON.

2. Perbedaan LEFT OUTER JOIN dan RIGHT OUTER JOIN

  • LEFT OUTER JOIN: Menampilkan semua data dari tabel kiri meskipun tidak punya pasangan di tabel kanan.
  • RIGHT OUTER JOIN: Menampilkan semua data dari tabel kanan meskipun tidak punya pasangan di tabel kiri.

3. Kelebihan NATURAL JOIN

  • Otomatis mencocokkan kolom dengan nama yang sama.
  • Query lebih singkat dan mudah dibaca.
  • Cocok untuk tabel dengan struktur kolom seragam.

4. Query JOIN Database Kampus

a. Data mahasiswa dari Fakultas Teknik

SELECT m.nim, m.nama_mhs, f.nama_fakultas, j.nama_jur
FROM mahasiswa m
JOIN jurusan j ON m.kode_jur = j.kode_jur
JOIN fakultas f ON m.kode_fakultas = f.kode_fakultas
WHERE f.nama_fakultas = 'Fakultas Teknik';

b. Data mahasiswa dengan kode_jur = 'matik'

SELECT m.nim, m.nama_mhs, f.nama_fakultas, j.nama_jur
FROM mahasiswa m
JOIN jurusan j ON m.kode_jur = j.kode_jur
JOIN fakultas f ON m.kode_fakultas = f.kode_fakultas
WHERE m.kode_jur = 'matik';

c. Jumlah mahasiswa dengan kode_jur = 'matik'

SELECT COUNT(*) AS jumlah_mahasiswa
FROM mahasiswa
WHERE kode_jur = 'matik';

d. Fakultas yang aktif (punya mahasiswa)

SELECT f.nama_fakultas, COUNT(m.nim) AS jumlah_mahasiswa
FROM fakultas f
JOIN mahasiswa m ON f.kode_fakultas = m.kode_fakultas
GROUP BY f.nama_fakultas;

Ubah yah soalnya jangan mirip woyy, Generate di gpt aja minta buat jangan mirip!

4. Tugas – Database roaster_karyawan

1. Membuat Database dan Tabel

CREATE DATABASE roaster_karyawan;
USE roaster_karyawan;

Tabel departemen

CREATE TABLE departemen (
  kode_dept CHAR(5) PRIMARY KEY,
  nm_dept VARCHAR(50)
);

Tabel karyawan

CREATE TABLE karyawan (
  kode_karyawan CHAR(7) PRIMARY KEY,
  nm_karyawan VARCHAR(50),
  kode_dept CHAR(5),
  jk CHAR(1),
  alamat VARCHAR(75),
  telp VARCHAR(15),
  FOREIGN KEY (kode_dept) REFERENCES departemen(kode_dept)
);

Tabel roaster

CREATE TABLE roaster (
  kode_karyawan CHAR(7),
  hari VARCHAR(10),
  jam_awal TIME,
  jam_akhir TIME,
  FOREIGN KEY (kode_karyawan) REFERENCES karyawan(kode_karyawan)
);

2. Mengisi Data

Departemen

INSERT INTO departemen VALUES ('hrd','Human Resource Departemen');
INSERT INTO departemen VALUES ('adm','Administration');
INSERT INTO departemen VALUES ('srvc','Service');
INSERT INTO departemen VALUES ('it','IT');

Karyawan

INSERT INTO karyawan VALUES ('K001','Nuriana','adm','P','Jl. M.Yamin No.12','08725667575');
INSERT INTO karyawan VALUES ('K002','Sapto Mulyadi','hrd','L','Jl. Wahid Hasyim RT.8','08872657656');
INSERT INTO karyawan VALUES ('K003','Deni Rianto','hrd','L','Jl. DR. Sutomo Gg.1','08276476565');
INSERT INTO karyawan VALUES ('K004','Henry Cahyadi','srvc','L','Jl.A.Yani No.98','08117675656');
INSERT INTO karyawan VALUES ('K005','Nanan Suprapto','adm','L','Jl. Kusuma Bangsa No.7','08116756545');
INSERT INTO karyawan VALUES ('K006','Sarah Yasmina','adm','P','Jl.M.Yamin No.34','08128766544');
INSERT INTO karyawan VALUES ('K007','Erick Jaya','it','L','Jl. DR.Sutomo Gg.5','08138767665');
INSERT INTO karyawan VALUES ('K008','Wayan Bhakti','it','L','Jl.Suryanata Gg.2','08259878767');
INSERT INTO karyawan VALUES ('K009','Ahmad H','srvc','L','Jl. Kadrie Oening No76','08123665467');
INSERT INTO karyawan VALUES ('K010','Andini Anastasia','srvc','P','Jl.Wahid Hasyim No.145','08652454373');

Roaster

INSERT INTO roaster VALUES ('K001','Senin','07:00','15:00');
INSERT INTO roaster VALUES ('K002','Senin','07:00','15:00');
INSERT INTO roaster VALUES ('K003','Senin','14:00','22:00');
INSERT INTO roaster VALUES ('K004','Selasa','07:00','15:00');
INSERT INTO roaster VALUES ('K005','Selasa','14:00','22:00');
INSERT INTO roaster VALUES ('K006','Selasa','07:00','15:00');
INSERT INTO roaster VALUES ('K007','Selasa','14:00','22:00');
INSERT INTO roaster VALUES ('K008','Rabu','07:00','15:00');
INSERT INTO roaster VALUES ('K009','Rabu','14:00','22:00');
INSERT INTO roaster VALUES ('K010','Kamis','07:00','15:00');
INSERT INTO roaster VALUES ('K001','Kamis','14:00','22:00');
INSERT INTO roaster VALUES ('K004','Jumat','07:00','15:00');
INSERT INTO roaster VALUES ('K005','Jumat','14:00','22:00');
INSERT INTO roaster VALUES ('K003','Jumat','07:00','15:00');
INSERT INTO roaster VALUES ('K002','Jumat','14:00','22:00');

5. Query Tugas

1. Data karyawan (kode_karyawan, nama_karyawan, jk, dept, alamat, telp)

SELECT k.kode_karyawan, k.nm_karyawan, k.jk, d.nm_dept, k.alamat, k.telp
FROM karyawan k
JOIN departemen d ON k.kode_dept = d.kode_dept;
ORDER BY k.kode_karyawan ASC;

2. Roaster karyawan departemen Administration

SELECT k.nm_karyawan, k.jk, r.hari, r.jam_awal, r.jam_akhir
FROM karyawan k
JOIN roaster r ON k.kode_karyawan = r.kode_karyawan
JOIN departemen d ON k.kode_dept = d.kode_dept
WHERE d.nm_dept = 'Administration';

3. Roaster karyawan yang terjadwal jam 07:00

SELECT k.nm_karyawan, k.jk, d.nm_dept, k.alamat, r.hari
FROM karyawan k
JOIN roaster r ON k.kode_karyawan = r.kode_karyawan
JOIN departemen d ON k.kode_dept = d.kode_dept
WHERE r.jam_awal = '07:00';

4. Data karyawan yang terjadwal jam 14:00 dan beralamat di M.Yamin atau Sutomo

SELECT k.nm_karyawan, k.jk, d.nm_dept, k.alamat, r.hari, r.jam_awal
FROM karyawan k
JOIN roaster r ON k.kode_karyawan = r.kode_karyawan
JOIN departemen d ON k.kode_dept = d.kode_dept
WHERE r.jam_awal = '14:00'
AND (k.alamat LIKE '%M.Yamin%' OR k.alamat LIKE '%Sutomo%');

5. Jumlah roaster yang terjadwal jam 14:00

SELECT COUNT(*) AS jumlah_roaster_14
FROM roaster
WHERE jam_awal = '14:00';
Halo! Saya Aruf, suka ngulik coding dan belajar mandiri. Lewat blog ini, saya berbagi ilmu seputar C++, Java, dan Python. Semoga bermanfaat buat yang sama-sama belajar!