Subquery di SQL

Query di dalam query. Hasil query dalam dipakai oleh query luar, misalnya sebagai nilai pembanding.

Penjelasan sederhana

Subquery adalah query di dalam query, ditulis di dalam kurung. Database menjalankan query dalam lebih dulu, lalu hasilnya dipakai oleh query luar.

Ini berguna untuk pertanyaan yang butuh dua langkah. Contohnya "siapa yang gajinya di atas rata-rata?": kamu perlu tahu rata-ratanya dulu, baru bisa membandingkan.

Sintaks

SELECT kolom
FROM tabel
WHERE kolom > (SELECT AGREGAT(kolom) FROM tabel);
BagianKeterangan
(SELECT ...)Query dalam, ditulis dalam kurung. Bisa diletakkan di WHERE, FROM, atau SELECT.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh Subquery

Data contoh: karyawan

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL
query.sql
SELECT nama, gaji
FROM karyawan
WHERE gaji > (SELECT AVG(gaji) FROM karyawan)
ORDER BY gaji DESC;
>_ Jalankan & ubah query ini di browser

Hasil 3 baris

namagaji
Andi Pratama 12500000
Fajar Nugroho 11000000
Bunga Lestari 9800000

Karyawan yang gajinya di atas rata-rata. Rata-rata dihitung dulu oleh subquery, lalu dipakai sebagai batas.

Cara kerjanya, langkah demi langkah

  1. Query dalam (SELECT AVG(gaji) FROM karyawan) dijalankan lebih dulu, hasilnya 8.700.000.
  2. Query luar menjadi seperti WHERE gaji > 8700000.
  3. Gaji tiap karyawan dibandingkan dengan angka itu. Yang lolos Andi (12,5 juta), Fajar (11 juta), dan Bunga (9,8 juta).
  4. ORDER BY gaji DESC: diurutkan dari yang terbesar.

Dipakai untuk apa di kantor?

  • Produk yang harganya di atas rata-rata kategorinya.
  • Pelanggan yang pernah membeli produk tertentu: WHERE id IN (SELECT ...).
  • Transaksi di hari dengan omzet tertinggi.

Kesalahan yang sering terjadi

  • Subquery yang dipakai dengan = atau > ternyata menghasilkan lebih dari satu baris. Database menolak. Pakai IN, atau pastikan subquery hanya menghasilkan satu nilai.
  • Menumpuk subquery berlapis-lapis sampai sulit dibaca. Pakai WITH (CTE) supaya lebih rapi.
Progres bab Subquery & CTE 0/3 dipelajari
Lanjut: WITH (CTE)

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class