Overview
Konsep dasar SQL subquery adalah adanya query di dalam query utama. Ada lima jenis subquery berdasarkan penggunaannya, apa saja dan bagaimana cara menggunakannya? Ulasan selengkapnya di artikel berikut.
Dalam proses pengolahan data menggunakan SQL, terdapat kondisi di mana akan dilakukan beberapa langkah/operasi dalam satu query/logic.
Sebagai contoh, data yang sudah ada akan dilakukan operasi penjumlahan terhadap data dari beberapa kolom dan kemudian akan dicari rata-rata dari penjumlahan tersebut. Hal ini membutuhkan dua query untuk melakukan masing-masing agregat.
Untuk menyelesaikan permasalahan tersebut dalam satu logic diperlukan subquery.
Apa itu Subquery di SQL?
Subquery atau kadang disebut juga dengan nested queries atau inner queries merupakan query yang terletak di dalam query utama (main query/outer query).
Query utama bersifat dependen dengan query di dalamnya. Artinya, hasil yang dikeluarkan dari query utama bergantung dengan hasil yang diperoleh dari subquery. Sedangkan subquery dapat bersifat independen (kecuali correlated subquery) yang artinya dapat dijalankan dengan sendirinya.
Jenis-jenis Subquery
Umumnya subquery yang digunakan adalah scalar subquery, tetapi subqueries juga dibagi menjadi beberapa tipe berdasarkan penggunaannya yaitu sebagaimana dikutip dari Scalar:
- Single row subquery
- Multiple row subquery
- Correlated subquery
- Nested subqueries
Berikut merupakan penjelasan dari setiap jenis subquery beserta contoh penggunaannya. Setiap contoh penulisan jenis-jenis subquery di atas akan menggunakan dataset berikut:
- Tabel ‘Employee’
- Tabel ‘Manager’
#1 Scalar Subquery
Scalar subquery merupakan jenis subquery yang paling umum digunakan dalam pengolahan data. Pada scalar subquery, hasil yang diperoleh berupa nilai tunggal. Umumnya, nilai ini kemudian digunakan pada klausa SELECT, WHERE, ataupun HAVING untuk membandingkan data yang ada pada query utama dengan nilai tunggal yang dihasilkan dari subquery.
Sebagai contoh, seorang data analyst ingin mencari nama dan umur karyawan yang memiliki gaji di atas gaji rata-rata karyawan dalam suatu perusahaan. Dengan menggunakan contoh tabel di atas, scalar subquery dapat dituliskan dengan logic sebagai berikut:
Maka hasil yang akan diperoleh adalah:
#2 Single-Row Subquery
Single row subquery merupakan jenis subquery yang menghasilkan data dalam bentuk satu baris. Pada single row subquery, hasil yang diperoleh digunakan sebagai operator pembanding seperti =, >, <, atau klausa IN.
Penggunaan single row subquery dapat dilihat dari contoh berikut. Misalkan akan dicari nama karyawan beserta nama pekerjaan yang berada dalam naungan manager bernama Sam. Menggunakan data yang sama, single row subquery dapat dituliskan dengan logic sebagai berikut:
Hasil yang diperoleh dari logic di atas adalah:
Dari hasil pada gambar di atas, dapat dilihat bahwa karyawan bernama Kevin yang bekerja sebagai product manager berada dalam naungan manager Sam.
#3 Multiple-Row Subquery
Multiple row subquery merupakan jenis subquery yang menghasilkan beberapa baris data. Serupa dengan single row subquery, hasil yang diperoleh dari subquery akan digunakan sebagai operator pembanding.
Akan tetapi, dikarenakan hasilnya merupakan gabungan dari beberapa data, klausa yang dapat digunakan hanya klausa IN atau NOT IN.
Untuk mempermudah pemahaman multiple row subquery, akan diberikan sebuah contoh. Misalkan akan dicari siapa saja dan pekerjaan masing-masing karyawan yang berada di bawah naungan manager yang ada di dalam sebuah perusahaan. Maka dapat dicari dengan logic sebagai berikut:
Dapat diperhatikan bahwa terdapat penggunaan klausa DISTINCT di dalam subquery. Hal ini digunakan untuk menghasilkan nama-nama pekerjaan yang berbeda dan mengabaikan duplikat. Dari logic pada gambar di atas, dapat diperoleh data sebagai berikut:
#4 Correlated Subquery
Correlated subquery merupakan jenis subquery yang hasilnya bergantung dengan query utama (main query). Sifatnya yang dependen membuat subquery jenis ini berbeda dari jenis lainnya. Ciri-ciri subquery jenis ini adalah memiliki sumber data yang sama dengan query utama. Umumnya, hasil yang diperoleh akan digunakan untuk memfilter hasil dari query utama.
Penggunaan correlated subquery dapat dilihat dari contoh berikut. Misalkan akan dicari siapa nama karyawan dan juga besar gaji dari karyawan tersebut yang memiliki gaji lebih besar dari gaji rata-rata karyawan dengan pekerjaan (bidang) yang sama.
Hal ini dapat dicari menggunakan logic berikut:
Maka hasil yang diperoleh dari logic tersebut adalah:
#5 Nested Subqueries
Nested Subqueries merupakan jenis subqueries di mana terdapat subquery lain di dalam subquery. Pada umumnya, subquery jenis ini digunakan untuk perhitungan atau filter yang cukup kompleks untuk sebuah dataset.
Misalkan akan dicari nama, umur, dan besar gaji dari karyawan yang memiliki gaji lebih besar dari gaji rata-rata tim tech support. Pada kondisi ini, dapat dicari menggunakan nested subqueries dengan penulisan logic sebagai berikut:
Pada penulisan logic di atas, dapat dilihat bahwa subquery pertama yang terletak pada klausa FROM digunakan untuk memfilter data yang pekerjaannya adalah ‘Tech Support’. Kemudian pada subquery kedua yang terletak pada klausa WHERE, merupakan scalar subquery yang digunakan untuk menghitung rata-rata gaji dari data yang sudah difilter sebelumnya.
Hasil dari scalar subquery tersebut kemudian digunakan sebagai pembanding untuk menghasilkan data pada query utama.
Dari logic pada gambar di atas, hasil yang diperoleh dapat dilihat pada gambar di bawah ini:
{{COMPONENT_IDENTIFIER}}
Penggunaan Subquery dengan Klausa FROM, INSERT, UPDATE, dan DELETE
Tidak hanya kelima jenis subquery yang telah kita bahas, subquery juga dapat digunakan dalam kondisi lain seperti:
- Subquery dengan klausa FROM
- Subquery dengan klausa INSERT
- Subquery pada statement UPDATE
- Subquery dengan klausa DELETE
Berikut akan dijelaskan masing-masing penggunaan subquery beserta contoh penulisannya:
#1 Subquery dengan klausa FROM
Penggunaan subquery pada klausa FROM merupakan kondisi yang umum digunakan dalam pengolahan data menggunakan SQL. Subquery pada klausa FROM biasanya digunakan apabila dataset yang ada ingin difilter/diagregat terlebih dahulu sebelum diproses kembali untuk mengambil kesimpulan.
Berikut merupakan contoh penulisan logic untuk subquery dengan klausa FROM:
Dari gambar di atas dapat disimpulkan bahwa akan dicari nama karyawan, role, dan besaran gaji karyawan yang gajinya lebih besar dari 15000 USD. Hasil yang diperoleh dari logic tersebut adalah:
#2 Subquery dengan klausa INSERT
Subquery pada klausa INSERT biasanya digunakan untuk memasukkan data ke dalam tabel lain di mana sebelumnya data tersebut dimodifikasi/difilter terlebih dahulu.
Subquery pada klausa INSERT dapat dituliskan menggunakan logic sebagai berikut:
Dapat dilihat bahwa semua data dari tabel manager yang memiliki pekerjaan ‘Tech Support’ akan dimasukkan ke dalam tabel baru yang bernama ‘newEmployee’ apabila menggunakan logic di atas.
#3 Subquery pada statement UPDATE
Pada kondisi ini, subquery pada statement UPDATE digunakan apabila ingin memperbaharui data pada suatu tabel di mana perubahannya hanya terjadi pada data yang memenuhi syarat pada subquery. Di dalam statement UPDATE, klausa yang umumnya digunakan ada klausa SET dan WHERE.
Misalkan terjadi perubahan gaji pada setiap karyawan yang memiliki umur lebih dari sama dengan 35 tahun. Di mana besar gaji meningkat menjadi 2 kali dari gaji sebelumnya. Maka, logic untuk subquery pada statement UPDATE dapat dituliskan sebagai berikut:
#4 Subquery dengan klausa DELETE
Penggunaan subquery dengan klausa DELETE dilakukan apabila ingin menghapus data pada suatu tabel. Di mana data yang akan dihapus adalah data yang memenuhi syarat tertentu. Pada kondisi ini, subquery akan digunakan bersama dengan klausa WHERE.
Penulisan logic subquery dengan klausa DELETE adalah sebagai berikut:
Dengan menggunakan logic pada gambar di atas, data pada tabel ‘newEmployee’ akan dihapus apabila besar gaji kurang dari rata-rata gaji yang dihasilkan dari tabel Employee.
Penutup
Dalam melakukan pengolahan data, terdapat beberapa kondisi yang perlu menggunakan subquery. Berdasarkan penggunaannya, subquery dibagi menjadi 5 jenis yaitu:
- Scalar subquery: Subquery yang menghasilkan nilai tunggal
- Single row subquery: Subquery yang menghasilkan data berupa 1 baris
- Multiple row subquery: Subquery yang menghasilkan data berupa beberapa baris
- Correlated subquery : Subquery yang hasilnya bergantung dengan main query
- Nested subqueries: Subquery yang terletak di dalam subquery
Tidak hanya itu, subquery dapat digunakan bersamaan dengan klausa lain seperti klausa FROM, INSERT, UPDATE, dan DELETE yang umumnya digunakan sebagai operator pembanding (filter) sebelum diolah kembali pada main query (outer query).
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)