Dalam perintah SQL yang kompleks, sering kali ditemukan adanya query di dalam query. Hal ini disebut dengan subquery atau sering disebut dengan inner perintah SELECT.
Ada 3 jenis subquery, yaitu:
- Scalar subquery mengembalikan masing-masing satu kolom dan satu baris sehingga merupakan nilai tunggal. Contohnya adalah ketika ingin mencari gaji terbesar dari semua pegawai yang ada.
- Row subquery akan mengembalikan satu baris dengan banyak kolom. Contohnya adalah ketika ingin membandingkan gaji terbesar dan gaji terkecil semua karyawan.
- Tabel subquery akan mengembalikan banyak kolom dan banyak baris.
Berikut ini adalah beberapa penggunaan subquery yang umum ditemui:
1. Subquery dengan equality
Penggunaan subquery ini bertujuan untuk mencari data dengan kondisi yang disesuaikan dengan data yang ada pada tabel di dalam subquery. Umumnya digunakan untuk mencari nilai data pada tabel yang lain untuk menyesuaikan data yang ada. Script di bawah ini menunjukkan contoh perintah SQL untuk mengambil data employees yang berada pada departemen Administration.
SELECT * FROM employees
WHERE department_id = (
SELECT department_id FROM departments
WHERE department_name LIKE 'Administration'
);
2. Subquery dengan fungsi agregat
Ada beberapa aturan mengenai subquery dengan fungsi agregat, yaitu:
- ORDER BY tidak boleh digunakan d dalam subquery (sekalipun digunakan pada perintah SELECT paling yang luar).
- Perintah SELECT dalam subquery harus terdiri dari kolom tunggal, kecuali penggunaan EXISTS dalam subquery yang bersangkutan.
- Ketika subquery adalah salah satu antara dua operan yang terlibat dalam perbandingan, maka subquery harus diletakkan di bagian kanan dar perbandingan. Script di bawah ini menunjukkan contoh penggunaan subquery dengan agregat.
SELECT first_name || ' ' || last_name, salary
FROM employees
WHERE (SELECT AVG (salary) FROM employees)
< salary
Semoga bermanfaat & selamat belajar!