School of Information Systems

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

Marisa Karsen