Aturan Subquery dalam SQL
a. Subquery harus ditutup dalam tanda kurung
Subquery wajib berada dalam tanda kurung agar dibedakan dari query utama.
Contoh:
SELECT nama FROM siswa
WHERE id_kelas = (SELECT id_kelas FROM kelas WHERE nama_kelas = 'XI
RPL');
b. Subquery biasanya hanya memilih satu kolom
Subquery biasanya mengembalikan satu kolom saja.
Contoh benar:
SELECT nama FROM siswa WHERE nis = (SELECT nis FROM nilai WHERE
nilai_akhir = 100);
Contoh salah:
SELECT nama FROM siswa WHERE (nis, nama) = (SELECT nis, nama FROM
nilai);
c. ORDER BY tidak boleh dipakai dalam subquery
ORDER BY hanya boleh dipakai di query utama.
Contoh:
SELECT nama FROM siswa WHERE umur > (SELECT AVG(umur) FROM siswa)
ORDER BY nama ASC;
d. Jika subquery menghasilkan banyak baris, gunakan IN
Jika hasil subquery lebih dari 1 baris, gunakan IN.
Contoh:
SELECT nama FROM siswa WHERE nis IN (SELECT nis FROM nilai WHERE
nilai_akhir > 80);
e. Subquery tidak boleh memilih tipe data BLOB/ARRAY/CLOB
Subquery tidak bisa membandingkan tipe data besar.
Contoh salah:
SELECT nama FROM siswa WHERE foto = (SELECT foto FROM arsip);
f. Subquery tidak boleh langsung ditutup dalam fungsi set
Tidak boleh membungkus subquery dengan UNION tanpa query utama.
Contoh salah:
(SELECT nama FROM siswa) UNION (SELECT nama FROM guru);
g. BETWEEN tidak boleh dipakai langsung dengan subquery
BETWEEN hanya menerima dua nilai, sedangkan subquery bisa mengembalikan
banyak baris.
Contoh salah:
SELECT nama FROM siswa WHERE umur BETWEEN (SELECT umur FROM
siswa);
Contoh benar:
SELECT nama FROM siswa WHERE nis IN (SELECT nis FROM nilai WHERE
nilai_akhir BETWEEN 80 AND 95);