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';

Gabung dalam percakapan