Subkueri adalah pernyataan SELECT yang ditumpuk di dalam SELECT, SELECT... INTO, INSERT... Pernyataan INTO, DELETE, atau UPDATE atau di dalam subkueri lain.
Sintaks
Anda dapat menggunakan tiga bentuk sintaks untuk membuat subkueri:
perbandingan [ANY | SEMUA | SOME] (sqlstatement)
expression [NOT] IN (sqlstatement)
[TIDAK] EXISTS (sqlstatement)
Subkueri memiliki bagian ini:
Bagian |
Deskripsi |
Perbandingan |
ekspresi dan operator perbandingan yang membandingkan ekspresi dengan hasil subkueri. |
ekspresi |
Ekspresi di mana kumpulan hasil subkueri dicari. |
pernyataansql |
Pernyataan SELECT, mengikuti format dan aturan yang sama seperti pernyataan SELECT lainnya. Ini harus dimasukkan dalam tanda kurung. |
Keterangan
Anda dapat menggunakan subkueri, bukan ekspresi dalam daftar bidang pernyataan SELECT atau dalam klausul WHERE atau HAVING. Dalam subkueri, Anda menggunakan pernyataan SELECT untuk menyediakan sekumpulan nilai tertentu atau lebih untuk dievaluasi dalam ekspresi klausul WHERE atau HAVING.
Gunakan predikat ANY atau SOME, yang identik, untuk mengambil rekaman dalam kueri utama yang memenuhi perbandingan dengan rekaman apa pun yang diambil dalam subkueri. Contoh berikut mengembalikan semua produk yang harga satuannya lebih besar dari produk apa pun yang dijual dengan diskon 25 persen atau lebih:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Gunakan predikat ALL untuk mengambil hanya rekaman tersebut dalam kueri utama yang memenuhi perbandingan dengan semua rekaman yang diambil dalam subkueri. Jika Anda mengubah ANY ke ALL dalam contoh sebelumnya, kueri hanya akan mengembalikan produk yang harga satuannya lebih besar dari semua produk yang dijual dengan diskon 25 persen atau lebih. Ini jauh lebih terbatas.
Gunakan predikat IN untuk mengambil hanya rekaman tersebut dalam kueri utama di mana beberapa rekaman dalam subkueri berisi nilai yang sama. Contoh berikut mengembalikan semua produk dengan diskon 25 persen atau lebih:
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Sebaliknya, Anda bisa menggunakan NOT IN untuk mengambil hanya rekaman tersebut di kueri utama yang tidak ada rekaman dalam subkueri berisi nilai yang sama.
Gunakan predikat EXISTS (dengan kata khusus NOT opsional) dalam perbandingan true/false untuk menentukan apakah subkueri mengembalikan rekaman apa pun.
Anda juga dapat menggunakan alias nama tabel dalam subkueri untuk merujuk ke tabel yang tercantum dalam klausul FROM di luar subkueri. Contoh berikut mengembalikan nama karyawan yang gajinya sama dengan atau lebih besar dari gaji rata-rata semua karyawan yang memiliki jabatan yang sama. Tabel Karyawan diberi alias "T1":
SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;
Dalam contoh sebelumnya, kata khusus AS bersifat opsional.
Beberapa subkueri diperbolehkan dalam kueri tab silang — khususnya, sebagai predikat (yang ada dalam klausul WHERE). Subkueri sebagai output (yang ada dalam daftar SELECT) tidak diperbolehkan dalam kueri tab silang.