Halo teman-teman semuanya, di seri ketigabelas ini kita akan membahas tentang subquery, atau query di dalam query. Subquery sangat berguna saat kita ingin menggunakan hasil dari suatu query sebagai kondisi atau nilai dalam query lainnya. Ini bisa membuat proses pencarian data jadi lebih fleksibel dan dinamis.
Contoh Tabel
Untuk latihan, kita gunakan dua tabel berikut:
-
Tabel jurusan
id |
nama_jurusan |
1 |
IPA |
2 |
IPS |
-
Tabel siswa
id |
nama |
umur |
kelas |
jurusan_id |
1 |
Ali |
18 |
XII IPA 1 |
1 |
2 |
Budi |
17 |
XI IPS 2 |
2 |
3 |
Citra |
19 |
XII IPA 3 |
1 |
4 |
Dewi |
16 |
X IPA 2 |
1 |
5 |
Eko |
18 |
XII IPS 1 |
2 |
Apa Itu Subquery?
Subquery adalah sebuah query yang disisipkan di dalam query lain. Subquery bisa berada di:
Biasanya subquery ditulis di dalam tanda kurung ()
.
1. Subquery di Dalam WHERE
Contoh: Tampilkan semua siswa yang berasal dari jurusan “IPA”
SELECT * FROM siswa
WHERE jurusan_id = (
SELECT id FROM jurusan WHERE nama_jurusan = 'IPA'
);
Penjelasan:
- Subquery mencari
id
jurusan IPA → hasilnya 1
- Lalu digunakan untuk memfilter siswa yang jurusan_id-nya = 1
Hasil:
id |
nama |
umur |
kelas |
jurusan_id |
1 |
Ali |
18 |
XII IPA 1 |
1 |
3 |
Citra |
19 |
XII IPA 3 |
1 |
4 |
Dewi |
16 |
X IPA 2 |
1 |
2. Subquery Menggunakan IN
Contoh: Tampilkan siswa yang berasal dari jurusan “IPA” atau “IPS”
SELECT * FROM siswa
WHERE jurusan_id IN (
SELECT id FROM jurusan WHERE nama_jurusan IN ('IPA', 'IPS')
);
Ini bisa digunakan kalau kita ingin mencocokkan banyak nilai dari subquery.
3. Subquery di Dalam SELECT
Kita bisa menghitung data tambahan per baris menggunakan subquery.
Contoh: Tampilkan nama siswa dan jumlah total siswa yang berada dalam jurusan yang sama
SELECT nama,
(SELECT COUNT(*) FROM siswa AS s2
WHERE s2.jurusan_id = s1.jurusan_id) AS total_satu_jurusan
FROM siswa AS s1;
Hasil (misalnya):
nama |
total_satu_jurusan |
Ali |
3 |
Budi |
2 |
Citra |
3 |
Dewi |
3 |
Eko |
2 |
4. Subquery di Dalam FROM
Subquery juga bisa digunakan sebagai tabel sementara dalam bagian FROM
.
SELECT jurusan_id, COUNT(*) AS jumlah
FROM (
SELECT * FROM siswa WHERE umur >= 18
) AS siswa_dewasa
GROUP BY jurusan_id;
Ini menghitung jumlah siswa yang berumur ≥ 18, dikelompokkan berdasarkan jurusan.
Tips Penggunaan Subquery
- Gunakan subquery jika tidak memungkinkan dilakukan dengan JOIN biasa
- Untuk efisiensi, pertimbangkan JOIN jika subquery terlalu dalam atau kompleks
- Pastikan subquery menghasilkan data yang sesuai dengan konteks pemanggilnya (1 nilai, 1 kolom, atau 1 tabel)
Kesimpulan
Dalam artikel ini, kita telah mengenal subquery, sebuah teknik powerful yang memungkinkan kita menjalankan query di dalam query lain. Dengan subquery, kita bisa membangun logika pencarian data yang lebih fleksibel dan dinamis.
Terima Kasih