Aktivitas Praktikum
Pada bagian ini, mahasiswa akan mempraktikkan secara langsung penggunaan SELECT statement pada MySQL. Aktivitas disusun secara bertahap, mulai dari mengambil seluruh data, memilih kolom tertentu, menggunakan kondisi WHERE, pattern matching, DISTINCT, LIMIT, GROUP BY, HAVING, ORDER BY, BETWEEN, hingga melakukan join antar tabel. Kerjakan setiap aktivitas secara berurutan agar alur berpikir query dapat dipahami dengan baik.
Sebelum mulai praktik, pastikan database PRAK2 sudah tersedia dan tabel employee sudah berisi data. Jika tabel employee belum tersedia, siapkan terlebih dahulu dengan struktur tabel pertemuan sebelumnya lalu impor file employee.txt.
Aktivitas 1 — Menyiapkan Data Praktikum
Percobaan 1.1 — Mengaktifkan database kerja
USE PRAK2;Gunakan perintah ini untuk memastikan seluruh percobaan dijalankan pada database yang benar.
Percobaan 1.2 — Menampilkan daftar tabel
SHOW TABLES;Perintah ini digunakan untuk memastikan tabel yang dibutuhkan, terutama employee, sudah tersedia.
Percobaan 1.3 — Menampilkan seluruh data pada tabel employee
SELECT * FROM employee;Perintah ini digunakan untuk melihat isi tabel employee yang akan digunakan sepanjang praktikum.
Aktivitas 2 — Mengambil Data dengan SELECT
Percobaan 2.1 — Menampilkan seluruh kolom dari tabel employee
SELECT * FROM employee;Perintah ini menampilkan semua kolom dan semua baris pada tabel employee.
Percobaan 2.2 — Menampilkan kolom tertentu saja
SELECT first_name, last_name, city FROM employee;Perintah ini digunakan untuk menampilkan hanya kolom first_name, last_name, dan city.
Aktivitas 3 — Memfilter Data dengan WHERE, AND, dan OR
Percobaan 3.1 — Menggunakan satu kondisi WHERE
SELECT first_name, last_name, city
FROM employee
WHERE city = 'New York';Perintah ini digunakan untuk memilih employee yang berada di kota New York.
Percobaan 3.2 — Menggunakan beberapa kondisi dengan AND
SELECT first_name, last_name, salary, city
FROM employee
WHERE city = 'New York' AND salary > 4000;Perintah ini digunakan untuk memilih employee dari New York dengan salary lebih dari 4000.
Percobaan 3.3 — Menggunakan beberapa kondisi dengan OR
SELECT first_name, last_name, city, description
FROM employee
WHERE city = 'Toronto' OR description = 'Tester';Perintah ini digunakan untuk memilih employee yang berasal dari Toronto atau memiliki deskripsi pekerjaan Tester.
Aktivitas 4 — Memberikan Alias dan Pattern Matching
Percobaan 4.1 — Memberikan alias pada hasil query
SELECT CONCAT(first_name, ' ', last_name) AS name, description
FROM employee
WHERE description = 'Detective';Perintah ini menggabungkan nama depan dan nama belakang, lalu menampilkan hasilnya dengan alias name.
Percobaan 4.2 — Pattern matching dengan LIKE
SELECT CONCAT(first_name, ' ', last_name)
FROM employee
WHERE first_name LIKE 'J____';Perintah ini digunakan untuk memilih employee dengan nama depan diawali huruf J dan diikuti tepat empat karakter.
Percobaan 4.3 — Pattern matching dengan NOT LIKE
SELECT CONCAT(first_name, ' ', last_name)
FROM employee
WHERE first_name NOT LIKE '%n';Perintah ini digunakan untuk memilih employee yang nama depannya tidak diakhiri huruf n.
Aktivitas 5 — Menampilkan Data Unik dan Membatasi Hasil Query
Percobaan 5.1 — Menampilkan seluruh nilai pada kolom description
SELECT description FROM employee;Percobaan 5.2 — Menampilkan nilai unik dengan DISTINCT
SELECT DISTINCT description FROM employee;Perintah ini digunakan untuk menampilkan daftar deskripsi pekerjaan tanpa duplikasi.
Percobaan 5.3 — Membatasi jumlah data dengan LIMIT
SELECT *
FROM employee
LIMIT 5;Perintah ini digunakan untuk menampilkan lima data pertama.
Percobaan 5.4 — Menggunakan LIMIT dengan offset
SELECT *
FROM employee
LIMIT 2,3;Perintah ini digunakan untuk menampilkan tiga data mulai dari urutan ke-2.
Percobaan 5.5 — Membandingkan LIMIT dari data awal
SELECT * FROM employee LIMIT 0,3;Perintah ini digunakan untuk menampilkan tiga data pertama mulai dari indeks ke-0.
Aktivitas 6 — Mengelompokkan Data dengan GROUP BY dan COUNT()
Percobaan 6.1 — Mengelompokkan data berdasarkan kota
SELECT *
FROM employee
GROUP BY city;Perintah ini digunakan untuk melihat pengelompokan data berdasarkan city.
Percobaan 6.2 — Menghitung jumlah employee per kota
SELECT city, COUNT(*)
FROM employee
GROUP BY city;Perintah ini digunakan untuk menampilkan jumlah employee pada setiap kota.
Percobaan 6.3 — Menghitung jumlah Tester per kota
SELECT city, COUNT(*)
FROM employee
WHERE description = 'Tester'
GROUP BY city;Perintah ini digunakan untuk menghitung jumlah employee yang berprofesi Tester pada setiap kota.
Aktivitas 7 — Menggunakan HAVING
Percobaan 7.1 — Menggunakan HAVING seperti penyaring lanjutan
SELECT first_name, last_name, salary
FROM employee
HAVING salary > 3000;Perintah ini digunakan untuk menampilkan employee dengan salary di atas 3000 menggunakan HAVING.
Percobaan 7.2 — Membandingkan WHERE sebelum GROUP BY
SELECT city, COUNT(*), salary
FROM employee
WHERE salary > 3000
GROUP BY city;Perintah ini digunakan untuk melihat hasil pengelompokan jika penyaringan dilakukan lebih dahulu dengan WHERE.
Percobaan 7.3 — Membandingkan HAVING setelah GROUP BY
SELECT city, COUNT(*), salary
FROM employee
GROUP BY city
HAVING salary > 3000;Perintah ini digunakan untuk melihat hasil pengelompokan jika penyaringan dilakukan sesudah GROUP BY menggunakan HAVING.
Aktivitas 8 — Mengurutkan Data dengan ORDER BY
Percobaan 8.1 — Mengurutkan nama secara naik
SELECT CONCAT(first_name, ' ', last_name) AS name
FROM employee
ORDER BY name;Perintah ini digunakan untuk mengurutkan data nama secara menaik.
Percobaan 8.2 — Mengurutkan nama secara turun
SELECT CONCAT(first_name, ' ', last_name) AS name
FROM employee
ORDER BY name DESC;Perintah ini digunakan untuk mengurutkan data nama secara menurun.
Percobaan 8.3 — Mengurutkan berdasarkan lebih dari satu kolom
SELECT first_name, last_name, city
FROM employee
ORDER BY first_name, city;Perintah ini digunakan untuk mengurutkan data berdasarkan first_name, lalu city.
Percobaan 8.4 — Mengurutkan berdasarkan lebih dari satu kolom dengan arah berbeda
SELECT first_name, last_name, city
FROM employee
ORDER BY first_name, city DESC;Perintah ini digunakan untuk mengurutkan first_name secara default dan city secara menurun.
Percobaan 8.5 — Menggabungkan ORDER BY dengan LIMIT
SELECT first_name, last_name, city
FROM employee
ORDER BY city
LIMIT 4;Perintah ini digunakan untuk melihat bahwa pengurutan dijalankan terlebih dahulu sebelum pembatasan jumlah data.
Aktivitas 9 — Menggunakan BETWEEN dan NOT BETWEEN
Percobaan 9.1 — BETWEEN pada data numerik
SELECT first_name, last_name, salary
FROM employee
WHERE salary BETWEEN 1000 AND 3000;Perintah ini digunakan untuk memilih employee dengan salary di antara 1000 dan 3000.
Percobaan 9.2 — BETWEEN dengan rentang yang lebih sempit
SELECT first_name, last_name, salary
FROM employee
WHERE salary BETWEEN 1233.78 AND 1235.56;Perintah ini digunakan untuk mengamati bagaimana batas rentang memengaruhi hasil query.
Percobaan 9.3 — BETWEEN dengan rentang pembanding lain
SELECT first_name, last_name, salary
FROM employee
WHERE salary BETWEEN 1233.78 AND 1235.57;Percobaan 9.4 — BETWEEN pada data alfanumerik
SELECT first_name, last_name
FROM employee
WHERE first_name BETWEEN 'Elvis' AND 'James';Perintah ini digunakan untuk memilih nama depan yang berada dalam rentang alfabet tertentu.
Percobaan 9.5 — NOT BETWEEN pada data alfanumerik
SELECT first_name, last_name
FROM employee
WHERE first_name NOT BETWEEN 'Elvis' AND 'James';Perintah ini digunakan untuk memilih nama depan yang berada di luar rentang alfabet tersebut.
Aktivitas 10 — Menyiapkan Tabel untuk Join
Percobaan 10.1 — Membuat tabel jobs
CREATE TABLE jobs (
job_id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(20)
);Tabel ini digunakan untuk menyimpan daftar pekerjaan.
Percobaan 10.2 — Mengisi data pada tabel jobs
INSERT INTO jobs VALUES
(1, 'Programmer'),
(2, 'Tester'),
(3, 'Manager'),
(4, 'Spy'),
(5, 'Detective'),
(6, 'Forensics');Percobaan 10.3 — Membuat duplikat tabel employee
CREATE TABLE employee_join AS (SELECT * FROM employee);Percobaan 10.4 — Menambahkan kolom job_id
ALTER TABLE employee_join ADD job_id INT;Percobaan 10.5 — Memeriksa struktur tabel employee_join
DESC employee_join;Percobaan 10.6 — Mengisi job_id berdasarkan relasi pekerjaan
UPDATE employee_join, jobs
SET employee_join.job_id = jobs.job_id
WHERE employee_join.description = jobs.title;Percobaan 10.7 — Menampilkan hasil relasi awal
SELECT * FROM employee_join;Percobaan 10.8 — Menghapus kolom description
ALTER TABLE employee_join DROP description;Percobaan 10.9 — Menampilkan isi akhir tabel employee_join
SELECT * FROM employee_join;Percobaan 10.10 — Menampilkan isi tabel jobs
SELECT * FROM jobs;Aktivitas 11 — Mencoba Cartesian Product dan Join
Percobaan 11.1 — Cartesian product
Perintah ini digunakan untuk menghasilkan Cartesian product, yaitu semua kemungkinan pasangan data dari employee_join dan jobs. Pada tahap ini, query belum menggunakan kondisi penghubung, sehingga setiap baris pada tabel pertama akan dipasangkan dengan setiap baris pada tabel kedua.
SELECT *
FROM employee_join, jobs;Setelah hasil Cartesian product dipahami, kondisi WHERE dapat ditambahkan untuk menyaring hasil tersebut agar hanya menampilkan pasangan data yang memiliki nilai job_id yang sama pada kedua tabel. Penambahan WHERE bertujuan untuk membatasi hasil query sehingga data yang ditampilkan menjadi relevan sesuai hubungan antar tabel.
SELECT *
FROM employee_join, jobs
WHERE employee_join.job_id = jobs.job_id;Percobaan 11.2 — Cross join
SELECT *
FROM employee_join CROSS JOIN jobs;Perintah ini menunjukkan bentuk eksplisit dari Cartesian product menggunakan CROSS JOIN.
Percobaan 11.3 — Inner join dengan WHERE
SELECT *
FROM employee_join, jobs
WHERE employee_join.job_id = jobs.job_id;Perintah ini digunakan untuk menampilkan hanya pasangan data yang memiliki job_id yang sama pada kedua tabel.
Percobaan 11.4 — Inner join dengan ON
SELECT *
FROM employee_join INNER JOIN jobs
ON employee_join.job_id = jobs.job_id;Perintah ini menunjukkan bentuk INNER JOIN yang lebih eksplisit dengan ON.
Percobaan 11.5 — Inner join dengan USING
SELECT *
FROM employee_join INNER JOIN jobs USING (job_id);Perintah ini digunakan ketika kedua tabel memiliki nama kolom penghubung yang sama, yaitu job_id.
Percobaan 11.6 — Natural join
SELECT *
FROM employee_join NATURAL JOIN jobs;Perintah ini digunakan untuk menggabungkan kedua tabel secara otomatis berdasarkan kolom yang namanya sama.
Aktivitas 12 — Mencoba LEFT JOIN dan RIGHT JOIN
Percobaan 12.1 — Menambahkan data pekerjaan yang belum direferensi
INSERT INTO jobs VALUES (7, 'Developer');Percobaan 12.2 — LEFT JOIN dengan jobs di sebelah kiri
SELECT *
FROM jobs t1 LEFT JOIN employee_join t2
ON t1.job_id = t2.job_id;Perintah ini digunakan untuk menampilkan seluruh data pada jobs, termasuk yang belum direferensi oleh employee_join.
Percobaan 12.3 — RIGHT JOIN dengan jobs di sebelah kanan
SELECT *
FROM employee_join t1 RIGHT JOIN jobs t2
ON t1.job_id = t2.job_id;Perintah ini digunakan untuk menunjukkan perilaku yang sama dari sisi tabel kanan.
Aktivitas 13 — UPDATE dan DELETE Menggunakan Join
Percobaan 13.1 — Menampilkan data awal sebelum update
SELECT first_name, last_name, title
FROM employee_join INNER JOIN jobs USING (job_id);Percobaan 13.2 — Update dengan join
UPDATE employee_join, jobs
SET last_name = 'Bono'
WHERE employee_join.job_id = jobs.job_id AND jobs.title = 'Spy';Perintah ini digunakan untuk mengubah nama belakang employee yang memiliki pekerjaan Spy.
Percobaan 13.3 — Menampilkan data setelah update
SELECT first_name, last_name, title
FROM employee_join INNER JOIN jobs USING (job_id);Percobaan 13.4 — Delete dengan join
DELETE employee_join
FROM employee_join, jobs
WHERE employee_join.job_id = jobs.job_id AND jobs.title = 'Spy';Perintah ini digunakan untuk menghapus employee yang memiliki pekerjaan Spy.
Percobaan 13.5 — Menampilkan data setelah delete
SELECT *
FROM employee_join INNER JOIN jobs USING (job_id);Catatan Akhir Aktivitas
Seluruh percobaan pada halaman ini disusun mengikuti alur modul pertemuan 3, mulai dari pengambilan data dasar dengan SELECT, penyaringan dengan WHERE, penggunaan alias, pattern matching, DISTINCT, LIMIT, GROUP BY, HAVING, ORDER BY, BETWEEN, hingga penggabungan tabel dengan Cartesian product dan berbagai jenis join. Dengan menyelesaikan seluruh aktivitas ini, mahasiswa diharapkan tidak hanya mampu menulis query untuk mengambil data, tetapi juga memahami bagaimana query tersebut disusun untuk menghasilkan informasi yang lebih spesifik dan bermakna.