Query lanjutan: subquery, join, agregasi, nested query
Jump to navigation
Jump to search
Tujuan Pembelajaran
Setelah mempelajari bagian ini, mahasiswa mampu:
- Menggunakan JOIN untuk menggabungkan beberapa tabel.
- Membuat subquery dan nested query.
- Menggunakan fungsi agregasi seperti `SUM`, `COUNT`, `AVG`, `MAX`, dan `MIN`.
- Menggunakan query bersarang untuk filtering data secara dinamis.
Struktur Tabel Contoh
-- Tabel mahasiswa
CREATE TABLE mahasiswa (
nim VARCHAR(10) PRIMARY KEY,
nama VARCHAR(100),
prodi VARCHAR(50)
);
-- Tabel mata kuliah
CREATE TABLE mata_kuliah (
kode_mk VARCHAR(10) PRIMARY KEY,
nama_mk VARCHAR(100),
sks INT
);
-- Tabel dosen
CREATE TABLE dosen (
id_dosen INT PRIMARY KEY,
nama_dosen VARCHAR(100)
);
-- Tabel pengampu
CREATE TABLE pengampu (
kode_mk VARCHAR(10),
id_dosen INT,
FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk),
FOREIGN KEY (id_dosen) REFERENCES dosen(id_dosen)
);
-- Tabel pengambilan (mahasiswa mengambil mata kuliah)
CREATE TABLE pengambilan (
nim VARCHAR(10),
kode_mk VARCHAR(10),
semester VARCHAR(10),
nilai INT,
FOREIGN KEY (nim) REFERENCES mahasiswa(nim),
FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk)
);
JOIN (INNER JOIN, LEFT JOIN, dll)
INNER JOIN – Menggabungkan baris yang cocok di kedua tabel
SELECT m.nama, mk.nama_mk, p.nilai FROM mahasiswa m JOIN pengambilan p ON m.nim = p.nim JOIN mata_kuliah mk ON p.kode_mk = mk.kode_mk;
LEFT JOIN – Menampilkan semua data dari kiri meski tak ada pasangan di kanan
SELECT m.nama, mk.nama_mk, p.nilai FROM mahasiswa m LEFT JOIN pengambilan p ON m.nim = p.nim LEFT JOIN mata_kuliah mk ON p.kode_mk = mk.kode_mk;
Fungsi Agregasi
COUNT – Menghitung jumlah baris
SELECT COUNT(*) AS jumlah_mahasiswa FROM mahasiswa;
AVG – Rata-rata nilai
SELECT AVG(nilai) AS rata_rata_nilai FROM pengambilan;
MAX & MIN – Nilai tertinggi/terendah
SELECT MAX(nilai) AS nilai_tertinggi, MIN(nilai) AS nilai_terendah FROM pengambilan;
GROUP BY – Digunakan dengan agregasi untuk perkelompok
SELECT kode_mk, AVG(nilai) AS rata_rata FROM pengambilan GROUP BY kode_mk;
Subquery (Query di dalam SELECT/WHERE)
Subquery di `WHERE`
SELECT nama
FROM mahasiswa
WHERE nim IN (
SELECT nim FROM pengambilan WHERE nilai > 80
);
Subquery di `FROM`
SELECT avg_nilai FROM (
SELECT AVG(nilai) AS avg_nilai FROM pengambilan
) AS sub;
Nested Query (Multi-level Query)
Contoh: Mahasiswa dengan nilai tertinggi
SELECT m.nama, p.nilai
FROM pengambilan p
JOIN mahasiswa m ON p.nim = m.nim
WHERE p.nilai = (
SELECT MAX(nilai) FROM pengambilan
);
Ringkasan Query Lanjutan
| Jenis Query | Tujuan | Contoh Utama |
|---|---|---|
| JOIN | Menggabungkan dua atau lebih tabel | `JOIN`, `LEFT JOIN`, `RIGHT JOIN` |
| Agregasi | Mengolah data dengan rumus | `COUNT`, `AVG`, `SUM`, `MAX`, `MIN` |
| Subquery | Menyaring/mengelompokkan dari query lain | Dalam `WHERE`, `FROM`, `SELECT` |
| Nested Query | Subquery bersarang yang kompleks | Subquery dalam subquery |