Sub Query adalah suatu query yang menjadi bagian darisuatu query.
Sub Query digunakan untuk menangani masalah yang kompleks yang mungkin sulit untuk dilakukan hanya dengan sebuah query.
Menyediakan cara alternatif untuk melakukan operasi yang membutuhkan join atau union yang rumit.
Dalam sebuah query boleh memiliki lebih dari 1 sub query.
• Sebuah sub query boleh memiliki sub query lagi.
• Operator perbandingan yang dapat digunakan adalah =, >,
<, >=, <=, <>, !=, <=>, IN, ANY, SOME, ALL, EXISTS, NOT
EXISTS
OPERATOR =, >, <, >=, <=, <>, !=, <=> DALAM SUB QUERY
Syarat dalam penggunaan operator tersebut adalah sub querynya hanya boleh memiliki 1 baris.
Jika barisnya memiliki lebih dari 1 baris akan menampilkan pesan “Subquery returns more
than 1 row”.
Contoh Benar
Contoh Salah
SQL di atas akan menampilkan pesan kesalahan “#1242 - Subquery returns more
than 1 row” karena mySQL tidak bisa melakukan perbandingan dengan data lebih
dari 1 baris. Solusi untuk masalah ini adalah menggunakan ANY, SOME atau ALL.
OPERATOR ANY, SOME, ALL DALAM SUB QUERY
Operator ANY, SOME dan ALL, harus diawali dengan penggunaan
Operator perbandingan =, >, <, >=, <=, <>, !=, <=>.
Operator ANY akan memeriksa apakah suatu nilai dari outer
query sesuai dengan SALAH SATU anggota dari hasil sebuah sub query.
Kondisi sesuai ditentukan oleh operator yang ditulis sebelumnya. Operator SOME adalah alias dari ANY Operator ALL akan memeriksa
apakah suatu nilai dari outer querysesuai dengan SEMUA anggota dari hasil sebuah sub query.
Sub query boleh memiliki data lebih dari 1 baris.
Contoh:
SELECT EmployeeNumber, FirstName
FROM Employees
WHERE EmployeeNumber = ANY
(SELECT EmployeeNumber FROM Employees WHERE OfficeCode=6)
OPERATOR IN DALAM SUB QUERY
Operator IN akan memeriksa apakah suatu nilai di outer query ada dalam sebuah hasil sub query.
Operator IN bisa disamakan dengan operator “= ANY” Lawan hasil dari operasi IN adalah NOT IN.
Operator NOT IN bisa disamakan dengan “<> ALL”Sub query boleh memiliki data lebih dari 1 baris.
CORRELATED SUBQUERY
Sebuah correlated subquery adalah suatu subquery yang memiliki sebuah reference ke tabel yang juga menjadi outer query.
Subquery boleh ditempatkan di daftar kolom atau dalam WHERE.
EXISTS DAN NOT EXISTS
EXISTS digunakan untuk memeriksa apakah subquery
memiliki baris atau tidak. Jika minimal ada 1 baris (walaupun hanya berisi NULL), maka akan bernilai TRUE NOT EXISTS adalah kebalikan dari EXISTS.
SELECT EmployeeNumber, FirstName
FROM Employees
WHERE EXISTS(SELECT * FROM Employees
WHERE OfficeCode=1)
Akan menampilkan semua data employee karena subquerynya bernilai TRUE.
SELECT EmployeeNumber, FirstNameTidak akan menampilkan semua data employee karena subquerynya bernilai FALSE.
FROM Employees
WHERE EXISTS(SELECT * FROM Employees
WHERE OfficeCode=99)
SELECT EmployeeNumber, FirstNameAkan menampilkan semua data employee karena subquerynya bernilai TRUE.
FROM Employees
WHERE NOT EXISTS(SELECT * FROM Employees
WHERE OfficeCode=99)
EmoticonEmoticon