📘 Apa yang Akan Dipelajari?
Pada artikel ini kita akan belajar:
- Apa itu SQL Subquery
- Kapan Subquery dibutuhkan
- Struktur dasar Subquery
- Menggunakan fungsi agregasi seperti
AVG()danMAX() - Menggunakan Subquery dengan
WHERE - Praktik Subquery menggunakan SQLite
- Menampilkan hasil query menggunakan Python dan Pandas
- Kesalahan yang sering dilakukan saat menggunakan Subquery
Pendahuluan
Saat melakukan analisis data menggunakan SQL, terkadang satu query saja belum cukup untuk menjawab kebutuhan analisis. Ada kondisi ketika hasil dari sebuah query perlu digunakan sebagai dasar untuk menjalankan query lainnya.
Contohnya, sebuah toko memiliki beberapa produk dan ingin mengetahui produk mana saja yang memiliki harga di atas rata-rata seluruh produk.
Untuk menjawab pertanyaan tersebut, kita perlu menghitung rata-rata harga terlebih dahulu. Setelah mendapatkan nilai rata-rata, nilai tersebut digunakan untuk membandingkan harga masing-masing produk.
Di sinilah SQL Subquery dapat digunakan.
Pada artikel ini, kita akan mempelajari cara menggunakan SQL Subquery melalui studi kasus sederhana menggunakan SQLite dan Python.
💡 Mengapa SQL Subquery Dibutuhkan?
Bayangkan kita memiliki data produk seperti berikut:
| ID | Nama Produk | Harga |
|---|---|---|
| 1 | Keyboard | 150000 |
| 2 | Mouse | 75000 |
| 3 | Headset | 200000 |
| 4 | Webcam | 250000 |
Kemudian muncul pertanyaan:
“Produk mana yang memiliki harga lebih tinggi dari harga rata-rata seluruh produk?”
Untuk menjawab pertanyaan tersebut, ada dua proses yang perlu dilakukan:
- Menghitung rata-rata harga seluruh produk.
- Membandingkan harga setiap produk dengan hasil rata-rata tersebut.
SQL Subquery memungkinkan proses pertama ditempatkan di dalam query utama sehingga kedua proses dapat dijalankan dalam satu query.
⚠️ Sebelum Memulai
Untuk mengikuti praktik ini, kita membutuhkan:
- Google Colab
- Python dasar
- Pemahaman dasar SQL
- Library Pandas
- SQLite
Jika sebelumnya sudah mengikuti materi SQL JOIN, pemahaman tentang database dan query dasar akan membantu dalam mengikuti praktik ini.
💻 Apa Itu SQL Subquery?
SQL Subquery adalah query yang berada di dalam query lainnya.
Query yang berada di bagian dalam disebut subquery, sedangkan query yang berada di bagian luar disebut query utama.
Bentuk sederhananya seperti berikut:
SELECT kolom
FROM tabel
WHERE kolom > (
SELECT fungsi(kolom)
FROM tabel
);Bagian berikut merupakan Subquery:
(
SELECT fungsi(kolom)
FROM tabel
)Sedangkan query bagian luar merupakan query utama yang menggunakan hasil dari Subquery tersebut.
Secara sederhana, cara kerjanya dapat digambarkan seperti berikut:
Subquery
↓
Menghasilkan nilai
↓
Digunakan oleh query utama
↓
Menghasilkan data akhir🧪 Mini Praktik: Membuat Database SQLite
Kita mulai dengan membuat database sederhana menggunakan Python.
import sqlite3
conn = sqlite3.connect("toko_subquery.db")
cursor = conn.cursor()
print("Database berhasil dibuat!")Jika berhasil dijalankan, akan muncul:
Database berhasil dibuat!
Database tersebut akan digunakan untuk menyimpan data produk.
Membuat Tabel Produk
Selanjutnya, kita membuat tabel bernama produk.
cursor.execute("""
CREATE TABLE IF NOT EXISTS produk (
id_produk INTEGER PRIMARY KEY,
nama_produk TEXT,
harga INTEGER
)
""")
conn.commit()
print("Tabel produk berhasil dibuat!")Output:
Tabel produk berhasil dibuat!
Tabel tersebut memiliki tiga kolom:
id_produksebagai identitas produknama_produkuntuk menyimpan nama produkhargauntuk menyimpan harga produk
Memasukkan Data Produk
Sekarang kita masukkan beberapa data contoh ke dalam tabel.
produk = [
(1, "Keyboard", 150000),
(2, "Mouse", 75000),
(3, "Headset", 200000),
(4, "Webcam", 250000)
]
cursor.executemany(
"INSERT INTO produk VALUES (?, ?, ?)",
produk
)
conn.commit()
print("Data produk berhasil dimasukkan!")Output:
Data produk berhasil dimasukkan!
Untuk memastikan data sudah tersimpan, kita dapat menjalankan query berikut:
cursor.execute("SELECT * FROM produk")
for row in cursor.fetchall():
print(row)Output:
(1, 'Keyboard', 150000)
(2, 'Mouse', 75000)
(3, 'Headset', 200000)
(4, 'Webcam', 250000)
Menghitung Rata-Rata Harga Produk
Sebelum menggunakan Subquery, kita coba menghitung rata-rata harga terlebih dahulu.
Query SQL:
SELECT AVG(harga)
FROM produk;Jika dijalankan melalui Python:
cursor.execute("""
SELECT AVG(harga)
FROM produk
""")
hasil = cursor.fetchone()
print("Rata-rata harga:", hasil[0])Output:
Rata-rata harga: 168750.0Artinya, rata-rata harga dari seluruh produk adalah Rp168.750.

Menggunakan SQL Subquery
Sekarang kita kembali ke pertanyaan awal:
“Produk mana yang memiliki harga lebih tinggi dari rata-rata?”
Kita dapat menggunakan query berikut:
SELECT nama_produk, harga
FROM produk
WHERE harga > (
SELECT AVG(harga)
FROM produk
);Perhatikan bagian berikut:
SELECT AVG(harga)
FROM produkBagian tersebut merupakan Subquery.
Subquery akan menghitung rata-rata harga terlebih dahulu. Hasilnya kemudian digunakan oleh query utama untuk melakukan perbandingan.
Jika dijalankan melalui Python:
query = """
SELECT nama_produk, harga
FROM produk
WHERE harga > (
SELECT AVG(harga)
FROM produk
)
"""
cursor.execute(query)
for row in cursor.fetchall():
print(row)Output:
('Headset', 200000)
('Webcam', 250000)
Dari hasil tersebut dapat diketahui bahwa hanya Headset dan Webcam yang memiliki harga lebih tinggi dari rata-rata harga produk.
Bagaimana Cara Kerja SQL Subquery?
Query tersebut sebenarnya menjalankan dua proses.
Pertama, Subquery:
Mau Kuasai SQL Subquery: Cara Menggunakan Query di Dalam Query dengan Contoh Praktik Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
SELECT AVG(harga)
FROM produk;menghasilkan nilai:
168750Kemudian nilai tersebut digunakan oleh query utama untuk melakukan perbandingan:
SELECT nama_produk, harga
FROM produk
WHERE harga > 168750;Hasil akhirnya:
Headset 200000
Webcam 250000Dengan menggunakan Subquery, kita tidak perlu menghitung rata-rata secara manual sebelum menjalankan query utama.
Menampilkan Hasil Menggunakan Pandas
Hasil SQL juga dapat langsung dimasukkan ke dalam DataFrame Pandas.
import pandas as pd
df = pd.read_sql_query(query, conn)
print(df)Output:
nama_produk harga
0 Headset 200000
1 Webcam 250000
Pandas dapat membantu ketika hasil query akan dilanjutkan ke proses analisis atau visualisasi data.
Subquery dengan Kondisi Lain
Subquery tidak hanya dapat digunakan dengan fungsi AVG().
Misalnya, kita ingin mencari produk yang memiliki harga sama dengan harga tertinggi.
Query-nya:
SELECT nama_produk, harga
FROM produk
WHERE harga = (
SELECT MAX(harga)
FROM produk
);Subquery:
SELECT MAX(harga)
FROM produk;akan menghasilkan:
250000Kemudian query utama mencari produk yang memiliki harga tersebut.
Output:
('Webcam', 250000)
Contoh lainnya adalah mencari produk dengan harga di bawah rata-rata:
SELECT nama_produk, harga
FROM produk
WHERE harga < (
SELECT AVG(harga)
FROM produk
);Output:
('Keyboard', 150000)
('Mouse', 75000)Dengan mengubah operator > menjadi <, kita dapat menggunakan nilai rata-rata yang sama untuk mencari produk dengan harga di bawah rata-rata.
💼 Kapan Subquery Digunakan di Dunia Kerja?
Dalam pekerjaan yang berkaitan dengan database dan analisis data, Subquery dapat digunakan untuk berbagai kebutuhan.
Contohnya:
- mencari produk dengan harga di atas rata-rata
- mencari pelanggan dengan jumlah transaksi tertentu
- mencari transaksi dengan nilai terbesar
- membandingkan data dengan nilai agregat
- mencari data berdasarkan hasil query lainnya
Misalnya pada laporan penjualan, seorang analis ingin mengetahui pelanggan yang memiliki total transaksi lebih tinggi dari rata-rata seluruh pelanggan.
Konsepnya tetap sama: hitung nilai pembanding menggunakan Subquery, kemudian gunakan hasil tersebut pada query utama.
❌ Kesalahan yang Sering Dilakukan Pemula
1. Lupa Menggunakan Tanda Kurung
Subquery pada contoh ini ditulis di dalam tanda kurung.
Contoh yang benar:
WHERE harga > (
SELECT AVG(harga)
FROM produk
)Tanda kurung membantu menunjukkan bagian query yang berada di dalam query utama.
2. Kolom yang Dibandingkan Tidak Sesuai
Misalnya Subquery menghasilkan rata-rata harga, tetapi query utama membandingkan hasil tersebut dengan kolom yang tidak berkaitan dengan harga.
Pastikan nilai yang dibandingkan memiliki konteks yang sesuai.
3. Tidak Memahami Hasil Subquery
Sebelum menggunakan Subquery, pahami terlebih dahulu hasil yang dihasilkan.
Contohnya:
SELECT AVG(harga)
FROM produk;Jika menghasilkan satu angka, nilai tersebut dapat digunakan sebagai nilai pembanding pada query utama.
4. Menggunakan Subquery Ketika Query Biasa Sudah Cukup
Subquery memang berguna, tetapi tidak berarti setiap masalah SQL harus diselesaikan menggunakan Subquery.
Jika query sederhana sudah dapat menyelesaikan masalah dengan jelas, tidak perlu membuat query menjadi lebih kompleks.
⭐ Tips Menggunakan SQL Subquery
Beberapa hal yang perlu diperhatikan:
- Pahami kebutuhan analisis sebelum menulis query.
- Uji Subquery secara terpisah terlebih dahulu.
- Pastikan hasil Subquery sesuai dengan kebutuhan.
- Gunakan nama kolom yang jelas.
- Jangan membuat Subquery terlalu kompleks jika dapat disederhanakan.
- Gunakan komentar ketika query mulai sulit dibaca.
- Setelah query berhasil, periksa kembali hasilnya dengan data sumber.
🔗 Hubungan dengan Materi Sebelumnya
Pada materi sebelumnya kita telah mempelajari SQL JOIN untuk menggabungkan data dari beberapa tabel.
SQL JOIN digunakan ketika kita membutuhkan data dari tabel yang berbeda.
Sementara itu, SQL Subquery digunakan ketika hasil dari sebuah query perlu digunakan sebagai bagian dari query lainnya.
Keduanya dapat digunakan bersama dalam analisis data yang lebih kompleks.
🎯 Kesimpulan
SQL Subquery merupakan teknik untuk menjalankan sebuah query di dalam query lainnya. Teknik ini berguna ketika hasil dari suatu proses perlu digunakan sebagai dasar untuk proses berikutnya.
Melalui praktik SQLite, kita telah mencoba menghitung rata-rata harga menggunakan AVG() kemudian menggunakan hasil tersebut untuk mencari produk yang memiliki harga di atas rata-rata.
Kita juga mencoba MAX() untuk mencari produk dengan harga tertinggi serta menggunakan Subquery untuk mencari produk yang berada di bawah rata-rata.
Dari latihan ini dapat dipahami bahwa SQL bukan hanya digunakan untuk mengambil data, tetapi juga dapat digunakan untuk membangun logika analisis secara bertahap.
Memahami Subquery akan menjadi dasar yang berguna sebelum mempelajari teknik SQL yang lebih lanjut, seperti Window Function dan analisis data menggunakan kombinasi SQL dan Python.
✍️ Penulis
Ditulis oleh Maulana Aldi Pradana.
Mau Kuasai SQL Subquery: Cara Menggunakan Query di Dalam Query dengan Contoh Praktik Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
