Di seri-seri sebelumnya, kita sudah belajar SQL database dasar, mulai dari cara menampilkan data hingga mengelola data dari beberapa tabel. Nah, dalam praktiknya, kadang kita perlu query yang lebih komplek, seperti query yang hasilnya tergantung pada hasil query lain.
Untuk kebutuhan ini, SQL punya fitur bernama Subquery (atau sering disebut query bersarang). Bayangkan subquery seperti query di dalam query, seperti kotak di dalam kotak.
Dalam lanjutan series belajar SQL Database bagian 8 ini, kita akan membahas apa itu subquery, kapan harus menggunakannya, dan bagaimana cara kerjanya melalui contoh kasus data siswa dan mata pelajaran yang mudah dipahami.
Apa Itu Subquery?
Sederhananya, subquery adalah query SQL yang ditulis di dalam query SQL lain. Biasanya subquery diletakkan di dalam tanda kurung () dan hasilnya akan dipakai oleh query utama sebagai acuan.
Subquery biasanya digunakan saat kita perlu:
- Membandingkan data dengan hasil perhitungan lain
- Mengambil data berdasarkan hasil query lain
- Membuat query bertingkat yang lebih dinamis
Contoh kasus sederhana:
Apabila kita ingin menampilkan data siswa dengan nilai di atas rata-rata, maka nilai rata-rata tersebut perlu dihitung dahulu. Nah, perhitungan itulah yang dilakukan oleh subquery.
Contoh Struktur Tabel
Sebelum masuk ke pembahasan, berikut permisalan skema database yang akan digunakan. Struktur ini akan digunakan untuk semua contoh di bawah.
Tabel siswa

Tabel nilai

Di Mana Subquery Bisa Digunakan?
Subquery bisa digunakan di beberapa posisi dalam query SQL:
1. Subquery pada WHERE
Penggunaan subquery yang paling sering ditemui adalah pada bagian WHERE, yaitu untuk memfilter data berdasarkan hasil query lain.
Contoh: Menampilkan Siswa dengan Nilai di Atas Rata-rata
SELECT s.nama, n.nilai
FROM siswa s
JOIN nilai n ON s.id = n.siswa_id
WHERE n.nilai > (
SELECT AVG(nilai)
FROM nilai
);Hasilnya:

Penjelasan:
Query di dalam tanda kurung akan menghitung nilai rata-rata terlebih dahulu. Setelah itu, query utama akan menampilkan siswa yang nilainya lebih tinggi dari rata-rata tersebut.
2. Subquery dengan Operator IN
Subquery juga sering dipadukan dengan operator IN, terutama jika subquery menghasilkan lebih dari satu data.
Contoh: Menampilkan Siswa yang Mengambil Mata Pelajaran Matematika
SELECT nama
FROM siswa
WHERE id IN (
SELECT siswa_id
FROM nilai
WHERE mata_pelajaran = 'Matematika'
);Hasilnya:

Penjelasan:
Subquery akan mengambil daftar siswa_id yang memiliki mata pelajaran Matematika.
Kemudian query utama menampilkan nama siswa yang termasuk dalam daftar tersebut.
3. Subquery pada SELECT
Selain di WHERE, subquery juga bisa digunakan di bagian SELECT. Biasanya ini dipakai untuk menampilkan nilai tambahan dari hasil perhitungan.
Contoh: Menampilkan Nilai Rata-rata sebagai Kolom Tambahan
SELECT
mata_pelajaran,
(SELECT AVG(nilai) FROM nilai) AS rata_rata_nilai
FROM nilai
GROUP BY mata_pelajaran;Hasilnya:

Penjelasan:
Subquery digunakan untuk menghitung nilai rata-rata, kemudian hasilnya ditampilkan sebagai kolom tambahan di hasil query.
4. Subquery pada FROM
Jika subquery ditempatkan di bagian FROM, maka subquery tersebut akan berfungsi sebagai tabel sementara yang kemudian diproses oleh query utama.
Contoh: Menghitung Jumlah Siswa per Mata Pelajaran
SELECT sub.mata_pelajaran, sub.total_siswa
FROM (
SELECT mata_pelajaran, COUNT(DISTINCT siswa_id) AS total_siswa
FROM nilai
GROUP BY mata_pelajaran
) AS sub;Hasilnya:

Penjelasan:
Query di dalam FROM akan membuat data sementara berisi jumlah siswa untuk setiap mata pelajaran. Setelah itu, query utama tinggal menampilkan hasilnya.
Contoh Studi Kasus Lain
Berikut adalah contoh studi kasus lain untuk menampilkan siswa dengan nilai tertinggi.
SELECT s.nama, n.nilai
FROM siswa s
JOIN nilai n ON s.id = n.siswa_id
WHERE n.nilai = (
SELECT MAX(nilai)
FROM nilai
);Hasilnya:

Penjelasan:
Subquery digunakan untuk mencari nilai tertinggi, kemudian query utama akan menampilkan siswa yang memiliki nilai tersebut.
Tips Menggunakan Subquery
Beberapa hal yang perlu diperhatikan saat menggunakan subquery:
- Subquery bisa digunakan di bagian WHERE, SELECT, dan FROM
- Operator seperti IN, NOT IN, dan EXISTS sering dipakai bersama subquery
- Subquery yang terlalu kompleks bisa memengaruhi performa query
- Dalam kondisi tertentu, subquery bisa digantikan dengan JOIN untuk hasil yang lebih optimal
Kesimpulan
Subquery adalah fitur penting dalam SQL yang memungkinkan kita membuat query yang lebih fleksibel dan dinamis. Dengan subquery, kita bisa memanfaatkan hasil query lain untuk memfilter data, melakukan perhitungan, hingga membentuk tabel sementara. Dengan memahami konsep subquery, proses pengolahan dan analisis data dalam database akan terasa lebih rapi dan efisien.
Demikian tutorial belajar SQL Database bagian 8 tentang Subquery SQL dan Contoh Penggunaannya. Terus ikuti seri belajar SQL Database dari Rumahweb untuk meningkatkan kemampuan Anda dalam mengelola database. Semoga bermanfaat!


