SQL – SUBQUERY
Subquery atau Inner query atau Nested query adalah query dalam query SQL lain dan tertanam dalam klausa WHERE. Sebuah subquery digunakan untuk mengembalikan data yang akan digunakan dalam query utama sebagai syarat untuk lebih membatasi data yang akan diambil. Subqueries dapat digunakan dengan SELECT, INSERT, UPDATE, dan DELETE statements bersama dengan operator seperti =, <,>,> =, <=, IN, BETWEEN dll.
Ada beberapa aturan yang subqueries harus mengikuti:
- Subqueries harus tertutup dalam tanda kurung.
- Sebuah subquery hanya dapat memiliki satu kolom pada klausa SELECT, kecuali beberapa kolom yang di query utama untuk subquery untuk membandingkan kolom yang dipilih.
- ORDER BY tidak dapat digunakan dalam subquery, meskipun permintaan utama dapat menggunakan ORDER BY.GROUP BY dapat digunakan untuk melakukan fungsi yang sama seperti ORDER BY dalam subquery.
- Subqueries yang kembali lebih dari satu baris hanya dapat digunakan dengan beberapa value operator, seperti operator IN.
- Daftar SELECT tidak bisa menyertakan referensi ke nilai-nilai yang mengevaluasi ke BLOB, ARRAY, CLOB, atau NCLOB.
- Sebuah subquery tidak dapat segera tertutup dalam fungsi set.
- Operator BETWEEN tidak dapat digunakan dengan subquery;Namun, BETWEEN dapat digunakan dalam subquery.
Sintaks dasar dari sub query adalah sebagai berikut:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
contoh:
Misalnya terdapat data berikut dalam tabel Staff:
ID | NAME | AGE | ADDRESS | SALARY (USD) |
1 | Andy | 35 | Ciledug | 2000.00 |
2 | Budi | 25 | Jakarta Pusat | 1500.00 |
3 | Ami | 23 | Cipulir | 2000.00 |
4 | Mita | 25 | Bintaro | 6500.00 |
5 | Nani | 27 | Pademangan | 8500.00 |
6 | Darren | 22 | Kelapa gading | 4500.00 |
7 | Rina | 24 | Kuningan | 10000.00 |
Sekarang kita ambil bagian subquery dengan SELECT statement untuk mengambil data Staff berdasarkan ID dan ID itu terikat oleh salary yang lebih besar dari 4500. Maka query akan menjadi seperti berikut ini:
SQL> SELECT * FROM STAFF WHERE ID IN (SELECT ID FROM STAFF WHERE SALARY > 4500) ;
Dan hasil dari query akan menghasilkan data seperti berikut:
ID | NAME | AGE | ADDRESS | SALARY (USD) |
4 | Mita | 25 | Bintaro | 6500.00 |
5 | Nani | 27 | Pademangan | 8500.00 |
7 | Rina | 24 | Kuningan | 10000.00 |
Banyak pernyataan Transact-SQL yang mencakup subqueries yang dapat dirumuskan secara alternatif sebagai bergabung. pertanyaan lainnya dapat diajukan hanya dengan subqueries. Dalam Transact-SQL, biasanya tidak ada perbedaan kinerja antara pernyataan yang mencakup subquery dan versi semantically equivalent yang tidak ada. Namun, dalam beberapa kasus di mana keberadaan harus diperiksa, hasil join membuat kinerja yang lebih baik. Jika tidak, nested query harus diproses untuk setiap hasil dari outer query untuk memastikan penghapusan duplikat. Dalam kasus tersebut, pendekatan JOIN akan menghasilkan hasil yang lebih baik.
Sumber:
https://www.tutorialspoint.com/sql/sql-sub-queries.htm
https://technet.microsoft.com/en-us/library/ms189575(v=sql.105).aspx