Aktivitas Praktikum
Pada bagian ini, mahasiswa akan mempraktikkan secara langsung penggunaan sub query pada MySQL. Aktivitas disusun secara bertahap, mulai dari sub query di klausa SELECT, sub query di klausa FROM, sub query di klausa WHERE, hingga penggunaan operator ALL, ANY, SOME, EXISTS, NOT EXISTS, dan IN. Kerjakan setiap aktivitas secara berurutan agar hubungan antara query utama dan sub query dapat dipahami dengan baik.
Sebelum mulai praktik, pastikan database PRAK2 sudah tersedia dan tabel employee masih ada dari pertemuan sebelumnya. Pada bagian akhir, Anda juga akan membuat tabel job untuk mencoba sub query dengan IN.
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 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 — Sub Query di Klausa SELECT
Percobaan 2.1 — Mencoba sub query yang menghasilkan lebih dari satu baris
SELECT (
SELECT salary
FROM employee
);Percobaan ini digunakan untuk menunjukkan bahwa sub query di klausa SELECT tidak boleh menghasilkan lebih dari satu baris.
Percobaan 2.2 — Menggunakan sub query dengan satu nilai tunggal
SELECT (
SELECT MAX(salary)
FROM employee
) AS maxSalary;Perintah ini digunakan untuk menampilkan hasil sub query berupa satu nilai tunggal, yaitu salary tertinggi.
Percobaan 2.3 — Menggunakan hasil sub query SELECT sebagai alias
SELECT e.first_name, e.last_name,
(SELECT MAX(salary) FROM employee) AS MaxSalary
FROM employee e
WHERE e.salary = MaxSalary;Percobaan ini digunakan untuk menunjukkan bahwa alias dari sub query di klausa SELECT tidak dapat langsung digunakan pada klausa WHERE karena urutan eksekusi query.
Aktivitas 3 — Sub Query di Klausa FROM
Percobaan 3.1 — Membuat inline view sederhana
SELECT *
FROM (
SELECT first_name, last_name
FROM employee
WHERE city LIKE 'Vancouver'
) AS VancouverEmp;Perintah ini digunakan untuk membuat relasi sementara yang berisi employee dari kota Vancouver.
Percobaan 3.2 — Join dengan hasil sub query di klausa FROM
SELECT e.first_name, e.last_name, VancouverEmp.city
FROM employee e
JOIN (
SELECT id, city
FROM employee
WHERE city LIKE 'Vancouver'
) AS VancouverEmp
ON e.id = VancouverEmp.id;Perintah ini menunjukkan bahwa hasil sub query di klausa FROM dapat diperlakukan seperti tabel sementara dan di-join kembali dengan tabel asli.
Percobaan 3.3 — Menggunakan sub query untuk mencari salary tertinggi
SELECT *
FROM employee e,
(SELECT MAX(salary) AS maxSalary FROM employee) AS MaxSalary
WHERE e.salary = MaxSalary.maxSalary;Perintah ini digunakan untuk mengambil employee yang memiliki salary tertinggi dengan memanfaatkan hasil sub query di klausa FROM.
Aktivitas 4 — Sub Query di Klausa WHERE
Percobaan 4.1 — Menampilkan employee dengan salary tertinggi
SELECT first_name, last_name, salary
FROM employee
WHERE salary = (SELECT MAX(salary) FROM employee);Perintah ini digunakan untuk menampilkan employee yang memiliki salary tertinggi.
Percobaan 4.2 — Mencoba operator = pada sub query yang menghasilkan banyak baris
SELECT first_name, last_name, city
FROM employee
WHERE city = (
SELECT city
FROM employee
WHERE city LIKE 'Vancouver'
);Percobaan ini digunakan untuk menunjukkan bahwa operator = tidak dapat digunakan jika sub query menghasilkan lebih dari satu baris.
Aktivitas 5 — Sub Query dengan ALL
Percobaan 5.1 — Menggunakan operator ALL
SELECT first_name, last_name, salary
FROM employee
WHERE salary > ALL(
SELECT salary
FROM employee
WHERE salary < 2000
);Perintah ini digunakan untuk menampilkan employee yang salary-nya lebih besar daripada semua salary employee yang kurang dari 2000.
Aktivitas 6 — Sub Query dengan ANY dan SOME
Percobaan 6.1 — Menggunakan operator ANY
SELECT first_name, last_name, salary
FROM employee
WHERE salary > ANY(
SELECT salary
FROM employee
WHERE salary < 2000
);Perintah ini digunakan untuk menampilkan employee yang salary-nya lebih besar dari setidaknya satu nilai salary yang kurang dari 2000.
Percobaan 6.2 — Menggunakan operator SOME
SELECT first_name, last_name, salary
FROM employee
WHERE salary > SOME(
SELECT salary
FROM employee
WHERE salary < 2000
);Perintah ini digunakan untuk menunjukkan bahwa SOME adalah alias dari ANY dan menghasilkan perilaku yang sama.
Aktivitas 7 — Sub Query dengan EXISTS dan NOT EXISTS
Percobaan 7.1 — Menggunakan EXISTS
SELECT first_name, last_name, city
FROM employee
WHERE EXISTS (
SELECT *
FROM employee
WHERE city = 'Toronto'
);Perintah ini digunakan untuk menunjukkan bahwa query utama akan dijalankan jika sub query menghasilkan data.
Percobaan 7.2 — Menggunakan NOT EXISTS
SELECT first_name, last_name, city
FROM employee
WHERE NOT EXISTS (
SELECT *
FROM employee
WHERE city = 'Toronto'
);Perintah ini digunakan untuk menunjukkan bahwa query utama hanya dijalankan jika sub query tidak memiliki hasil.
Aktivitas 8 — Sub Query dengan IN
Percobaan 8.1 — Membuat tabel job
CREATE TABLE job (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(20)
);Tabel ini digunakan untuk menyimpan daftar pekerjaan yang akan dibandingkan dengan kolom description pada tabel employee.
Percobaan 8.2 — Mengisi data pada tabel job
INSERT INTO job VALUES
(1, 'Tester'),
(2, 'Accountant'),
(3, 'Programmer'),
(4, 'Professor');Percobaan 8.3 — Menampilkan isi tabel job
SELECT * FROM job;Percobaan 8.4 — Menggunakan IN dengan sub query
SELECT first_name, last_name, description
FROM employee
WHERE description IN (
SELECT title
FROM job
);Perintah ini digunakan untuk menampilkan employee yang deskripsi pekerjaannya termasuk di dalam daftar title pada tabel job.
Catatan Akhir Aktivitas
Seluruh percobaan pada halaman ini disusun mengikuti alur modul pertemuan 4, mulai dari sub query di klausa SELECT, FROM, dan WHERE, hingga penggunaan operator ALL, ANY, SOME, EXISTS, NOT EXISTS, dan IN. Dengan menyelesaikan seluruh aktivitas ini, mahasiswa diharapkan tidak hanya mampu menuliskan sub query, tetapi juga memahami bagaimana sub query digunakan untuk membangun query yang lebih bertingkat, logis, dan sesuai kebutuhan informasi.