Apa itu Subquery
Subquery adalah sebuah query dalam query SQL lainnya. Subquery digunakan untuk mengambil data dari database yang akan digunakan oleh query utama. Subquery memungkinkan Anda melakukan operasi dalam beberapa tahap, dengan menggunakan hasil dari satu tahap sebagai input untuk tahap berikutnya.
Subquery dapat digunakan dalam berbagai bagian pernyataan SQL, termasuk klausa SELECT
, FROM
, WHERE
, dan HAVING
. Data yang dikembalikan oleh subquery kemudian digunakan oleh query luar untuk operasi lebih lanjut. Subquery dapat mengembalikan nilai tunggal (skalar), satu baris, beberapa baris, atau tabel, tergantung pada cara penggunaannya.
Sintaksis dan Penggunaan Subquery
Saya akan menjelaskan sintaksis dan berbagai penggunaan subquery dalam SQL. Kita akan menggunakan database sederhana yang mencakup dua tabel: Employees
dan Departments
. Tabel-tabel tersebut didefinisikan sebagai berikut:
Employees:
EmployeeID | FirstName | LastName | DepartmentID | Salary |
---|---|---|---|---|
1 | John | Doe | 1 | 50000 |
2 | Jane | Smith | 2 | 60000 |
3 | Mary | Johnson | 1 | 70000 |
4 | James | Brown | 3 | 80000 |
Departments:
DepartmentID | DepartmentName |
---|---|
1 | HR |
2 | Finance |
3 | IT |
Sintaksis Dasar Subquery
Sebuah subquery ditulis di dalam tanda kurung dan dapat ditempatkan di berbagai bagian dari query SQL utama. Berikut adalah sintaksis dasar untuk subquery dalam klausa WHERE
:
SELECT column_name(s)
FROM table_name
WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);
Sebagai contoh, jika kita ingin menemukan semua karyawan yang mendapatkan gaji lebih tinggi dari rata-rata gaji:
SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
Hasil dari query ini adalah:
FirstName | LastName | Salary |
---|---|---|
Mary | Johnson | 70000 |
James | Brown | 80000 |
Inline Views
Inline view adalah subquery dalam klausa FROM
. Ini dapat digunakan untuk menyederhanakan query yang kompleks. Berikut contohnya:
SELECT e.FirstName, e.LastName, e.Salary
FROM (SELECT * FROM Employees WHERE Salary > 60000) as e;
Hasil dari query ini adalah:
FirstName | LastName | Salary |
---|---|---|
Mary | Johnson | 70000 |
James | Brown | 80000 |