Subkueri Skalar dalam SELECT dan WHERE
Subkueri bernilai tunggal dan error yang terjadi saat subkueri mengembalikan lebih dari satu baris.
Subkueri Skalar dalam SELECT dan WHERE adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Yang Dimaksud Pewawancara dengan Subkueri Skalar
Subkueri skalar adalah kueri yang mengembalikan tepat satu baris dan satu kolom — satu nilai. Karena menghasilkan satu nilai, SQL memungkinkan Anda menempatkannya hampir di mana saja yang dapat diisi oleh nilai literal: dalam SELECT, WHERE, HAVING, bahkan ORDER BY.
- Pewawancara menguji apakah Anda mengetahui aturan satu baris, satu kolom.
- Jebakan klasiknya: subkueri yang secara tidak sengaja mengembalikan lebih dari satu baris.
Jika Anda dapat menyatakan definisi tersebut dengan jelas, berarti Anda sudah melewati tahap pemeriksaan pertama.
Subkueri Skalar dalam Daftar SELECT
Menempatkan subkueri skalar dalam daftar SELECT memungkinkan Anda menambahkan satu nilai hasil perhitungan ke setiap baris hasil. Di sini, kami menampilkan setiap karyawan di sebelah rata-rata gaji seluruh perusahaan.
Subkueri (SELECT AVG(salary) FROM employees) dijalankan dan meringkas seluruh tabel menjadi satu angka, lalu angka tersebut diulangi pada setiap baris.
SELECT
name,
salary,
(SELECT AVG(salary) FROM employees) AS company_avg
FROM employees;Subkueri Skalar dalam WHERE
Nilai tunggal yang sama dapat digunakan untuk menggerakkan filter. Pertanyaan wawancara yang sangat umum adalah temukan semua orang yang berpenghasilan lebih tinggi daripada rata-rata perusahaan.
Subkueri menghitung rata-rata satu kali, lalu setiap baris dalam kueri luar dibandingkan dengannya. Ini bukan kueri berkorelasi — kueri dalam tidak bergantung pada baris luar, sehingga dijalankan satu kali.
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);Kesalahan “Lebih dari Satu Baris”
Inilah kesalahan yang ingin diperkirakan oleh pewawancara. Jika subkueri Anda digunakan bersama = atau > tetapi mengembalikan beberapa baris, mesin basis data akan menghasilkan:
- Postgres: lebih dari satu baris dikembalikan oleh subkueri yang digunakan sebagai ekspresi
- MySQL: Subkueri mengembalikan lebih dari 1 baris
Kueri di bawah gagal karena mungkin ada beberapa karyawan di departemen 5 — subkueri tersebut bukan subkueri skalar.
SELECT name
FROM employees
WHERE salary = (SELECT salary FROM employees WHERE dept_id = 5);Memaksa Subkueri Menjadi Skalar
Dua cara yang andal untuk menjamin satu nilai:
- Gunakan agregat seperti
MAX,MIN, atauAVG— agregat tanpaGROUP BYselalu mengembalikan satu baris. - Gunakan
LIMIT 1(Postgres/MySQL) atauFETCH FIRST 1 ROW ONLYsetelahORDER BY.
Versi yang telah diperbaiki di bawah meminta satu gaji tertinggi di departemen 5.
SELECT name
FROM employees
WHERE salary = (
SELECT MAX(salary) FROM employees WHERE dept_id = 5
);Subkueri Skalar Mengembalikan NULL Jika Tidak Ada Baris
Poin wawancara yang cukup halus: jika subkueri skalar cocok dengan nol baris, subkueri tersebut tidak menghasilkan kesalahan — melainkan mengembalikan NULL. NULL tersebut kemudian merambat melalui perbandingan Anda.
Karena salary > NULL bernilai UNKNOWN (bukan benar), kueri luar tidak mengembalikan baris apa pun. Kandidat sering mengira akan terjadi kesalahan di sini; jawaban yang benar adalah hasil kosong secara diam-diam.
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary) FROM employees WHERE dept_id = 9999
);Contoh Lengkap: Karyawan Bergaji di Atas Rata-Rata Beserta Selisihnya
Mari gabungkan kedua penempatan tersebut. Kami menampilkan setiap karyawan yang bergajinya di atas rata-rata beserta seberapa besar selisihnya dari rata-rata. Subkueri skalar yang sama muncul dalam SELECT dan WHERE.
Pewawancara mungkin bertanya apakah subkueri tersebut dijalankan dua kali. Secara logis, subkueri itu muncul dua kali, tetapi pengoptimal yang baik dapat mengevaluasi subkueri yang tidak berkorelasi satu kali dan menggunakannya kembali.
SELECT
name,
salary,
salary - (SELECT AVG(salary) FROM employees) AS above_avg
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees)
ORDER BY above_avg DESC;Subkueri Skalar dalam ORDER BY
Karena subkueri skalar hanyalah sebuah nilai, subkueri tersebut juga sah digunakan dalam ORDER BY. Ini jarang merupakan pendekatan yang paling rapi, tetapi pewawancara suka memastikan bahwa Anda tahu hal ini diperbolehkan.
Di sini, kami mengurutkan departemen berdasarkan nilai yang diambil dari tabel lain — jumlah karyawan setiap departemen — tanpa penggabungan.
SELECT d.dept_name
FROM departments d
ORDER BY (
SELECT COUNT(*) FROM employees e WHERE e.dept_id = d.id
) DESC;Skalar vs Berkorelasi: Mengetahui Perbedaannya
Contoh ORDER BY di atas secara tersembunyi merujuk pada d.id dari kueri luar — hal itu menjadikannya subkueri skalar berkorelasi, yang dijalankan satu kali untuk setiap baris luar.
Pewawancara sangat menyukai perbedaan ini:
- Subkueri skalar tidak berkorelasi: berdiri sendiri dan dijalankan satu kali.
- Subkueri skalar berkorelasi: merujuk pada baris luar dan dijalankan untuk setiap baris.
Keduanya tetap bersifat skalar (satu nilai), tetapi kinerjanya dapat sangat berbeda.
Kapan Sebaiknya NOT Menggunakan Subkueri Skalar
Subkueri skalar berkorelasi dalam daftar SELECT memang praktis, tetapi dapat lambat pada tabel berukuran besar — subkueri tersebut dijalankan untuk setiap baris. Pewawancara mengharapkan Anda mengetahui alternatifnya:
LEFT JOINke tabel turunan yang telah diagregasi sebelumnya.- Fungsi jendela seperti
AVG(salary) OVER ().
Bentuk fungsi jendela di bawah menghasilkan kolom rata-rata perusahaan yang sama tanpa pemindaian subkueri terpisah.
SELECT
name,
salary,
AVG(salary) OVER () AS company_avg
FROM employees;Kalimat Singkat untuk Wawancara
Jika diminta mendefinisikan subkueri skalar, katakan ini: "Subkueri skalar mengembalikan satu baris dan satu kolom, sehingga berperilaku seperti satu nilai dan dapat digunakan di mana pun nilai literal diperbolehkan. Jika mengembalikan lebih dari satu baris, mesin basis data menghasilkan kesalahan; jika tidak mengembalikan baris, subkueri tersebut menghasilkan NULL."
Satu kalimat itu mencakup definisi, kasus kesalahan, dan kasus khusus NULL — tiga hal yang ingin didengar oleh setiap pewawancara.
Uji Cepat
Uji pemahaman Anda tentang perilaku subkueri skalar.
Ringkasan
Sekarang Anda telah menguasai subkueri skalar:
- Definisi: satu baris, satu kolom — dapat digunakan seperti nilai literal dalam SELECT, WHERE, HAVING, dan ORDER BY.
- Beberapa baris bersama =/> menyebabkan kesalahan; pastikan subkueri menjadi skalar dengan agregat atau
LIMIT 1. - Nol baris menghasilkan NULL, yang secara diam-diam menghapus baris dalam filter.
- Subkueri skalar berkorelasi dijalankan untuk setiap baris; pilih penggabungan atau fungsi jendela jika kinerja penting.
Berikutnya: subkueri dalam klausa FROM, yang hasilnya berupa seluruh tabel virtual.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Subkueri Skalar dalam SELECT dan WHERE” gratis?
Ya — teks lengkap “Subkueri Skalar dalam SELECT dan WHERE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Subkueri Skalar dalam SELECT dan WHERE”?
Subkueri bernilai tunggal dan error yang terjadi saat subkueri mengembalikan lebih dari satu baris. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Subkueri Skalar dalam SELECT dan WHERE” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Subkueri Skalar dalam SELECT dan WHERE
- Subkueri dalam Klausa FROM (Tabel Turunan)
- Subkueri IN, ANY, dan ALL
- Kinerja EXISTS vs IN