Skip to content
Pertemuan 4: Sub Query

Pertemuan 4: Sub Query

Pada pertemuan ini, mahasiswa akan mempelajari sub query, yaitu query yang ditulis di dalam query lain. Jika pada pertemuan sebelumnya mahasiswa berfokus pada pengambilan data dengan SELECT, penyaringan, pengurutan, dan join antar tabel, maka pada pertemuan ini pembelajaran diarahkan pada cara menyusun query bertingkat untuk menghasilkan informasi yang lebih spesifik.

Modul ini disusun untuk membantu mahasiswa memahami bahwa dalam praktik basis data, ada banyak kebutuhan informasi yang tidak selalu dapat diselesaikan dengan satu query sederhana. Dalam beberapa kasus, kita perlu mengambil hasil dari satu query terlebih dahulu, lalu menggunakan hasil tersebut sebagai bagian dari query yang lain. Di sinilah sub query menjadi penting, karena sub query memungkinkan kita menyusun logika pencarian data secara lebih bertahap dan fleksibel.

Secara umum, modul ini memuat tujuan pembelajaran, gambaran umum materi, materi inti mengenai sub query, serta aktivitas praktikum untuk mencoba berbagai bentuk sub query secara langsung. Melalui susunan ini, mahasiswa diharapkan memahami terlebih dahulu konsep dan fungsi sub query sebelum masuk ke bagian praktik.

Tujuan Pembelajaran

Setelah mengikuti praktikum pada pertemuan ini, mahasiswa diharapkan mampu:

  1. menjelaskan konsep sub query sebagai query di dalam query lain,
  2. membedakan penggunaan sub query pada klausa SELECT, FROM, dan WHERE,
  3. menggunakan sub query untuk menghasilkan nilai tunggal maupun relasi sementara,
  4. memahami penggunaan operator ALL, ANY, SOME, EXISTS, NOT EXISTS, dan IN pada sub query,
  5. menyusun query bertingkat untuk memecahkan kebutuhan informasi yang lebih kompleks.

Gambaran Umum

Topik utama pada pertemuan ini adalah sub query. Dalam MySQL, sub query adalah query yang diletakkan di dalam query lain dan dituliskan di dalam tanda kurung (). Secara umum, sub query dapat ditempatkan pada tiga bagian utama, yaitu di klausa SELECT, klausa FROM, dan klausa WHERE.

Sub query pada klausa SELECT biasanya digunakan ketika kita ingin menampilkan hasil perhitungan tertentu, misalnya nilai maksimum, minimum, rata-rata, atau jumlah data, tanpa menuliskan fungsi agregat tersebut pada query utama. Sub query jenis ini harus menghasilkan satu nilai saja.

Sub query pada klausa FROM digunakan untuk membentuk relasi sementara atau inline view, yaitu hasil query yang diperlakukan seolah-olah sebagai tabel sementara. Sementara itu, sub query pada klausa WHERE digunakan untuk menyaring data pada query utama berdasarkan hasil query lain.

Selain penempatan sub query, pada pertemuan ini mahasiswa juga akan mempelajari beberapa operator penting yang sering digunakan bersama sub query, seperti ALL, ANY, SOME, EXISTS, NOT EXISTS, dan IN. Operator-operator ini membuat sub query menjadi lebih fleksibel karena memungkinkan pencarian data berdasarkan satu nilai, banyak nilai, atau keberadaan hasil query tertentu.

Secara garis besar, pertemuan ini dirancang agar mahasiswa tidak hanya memahami bentuk dasar sub query, tetapi juga mampu menggunakan sub query untuk menyusun query yang lebih logis, terstruktur, dan sesuai dengan kebutuhan informasi yang lebih kompleks.

Materi Inti

1. Pengertian Sub Query

Sub query adalah statement query yang dituliskan di dalam query yang lain. Sub query selalu ditulis di dalam tanda kurung (). Kehadiran sub query memungkinkan sebuah query menggunakan hasil query lain sebagai bagian dari proses pencarian data.

Secara umum, sub query dapat diletakkan pada tiga tempat berikut:

  1. sub query di klausa SELECT,
  2. sub query di klausa FROM,
  3. sub query di klausa WHERE.

2. Sub Query di Klausa SELECT

Sub query di klausa SELECT biasanya digunakan ketika kita ingin mendapatkan hasil sebuah perhitungan menggunakan fungsi agregat seperti SUM, COUNT, MIN, MAX, atau AVG, tetapi tidak ingin menuliskan fungsi agregat tersebut secara langsung pada query utama.

Bentuk umumnya adalah sebagai berikut.

SELECT ..., (subquery) AS nama_alias, ...
FROM tabel;

Sub query pada klausa SELECT harus menghasilkan satu nilai tunggal. Jika sub query mengembalikan lebih dari satu baris, maka MySQL akan menampilkan error karena hasilnya tidak dapat ditempatkan sebagai satu nilai dalam kolom hasil query utama.

3. Sub Query di Klausa FROM

Sub query di klausa FROM disebut juga inline view. Bentuk ini digunakan ketika kita ingin membuat relasi sementara terlebih dahulu, lalu hasil relasi tersebut diperlakukan sebagai sumber data pada query utama.

Bentuk umumnya adalah sebagai berikut.

SELECT ...
FROM (subquery) AS nama_relasi;

Sub query ini berguna ketika data perlu dipilih atau dibentuk terlebih dahulu sebelum diproses lebih lanjut pada query utama.

4. Sub Query di Klausa WHERE

Sub query di klausa WHERE digunakan untuk menyaring data pada query utama berdasarkan hasil dari query lain. Query utama akan membandingkan nilai suatu kolom dengan hasil yang dikembalikan oleh sub query.

Contoh umum bentuk ini adalah pencarian data dengan nilai maksimum atau minimum, misalnya menampilkan employee yang memiliki salary tertinggi.

Perlu diperhatikan bahwa operator seperti = hanya dapat menerima satu nilai. Jika sub query menghasilkan lebih dari satu nilai, maka operator = tidak dapat digunakan dan harus diganti dengan operator lain yang sesuai.

5. Sub Query dengan ALL

Operator ALL digunakan bersama operator perbandingan untuk menyatakan bahwa kondisi harus bernilai benar terhadap semua nilai yang dihasilkan oleh sub query.

Contoh makna logisnya:

  • salary > ALL(subquery) berarti salary harus lebih besar daripada semua nilai yang dihasilkan oleh sub query.

Operator ini berguna ketika kita ingin mencari data yang melampaui seluruh hasil pada sub query.

6. Sub Query dengan ANY dan SOME

Operator ANY digunakan untuk menyatakan bahwa kondisi cukup bernilai benar terhadap salah satu nilai yang dihasilkan oleh sub query. Dalam MySQL, SOME adalah alias dari ANY, sehingga keduanya memiliki arti yang sama.

Contoh makna logisnya:

  • salary > ANY(subquery) berarti salary lebih besar dari minimal satu nilai hasil sub query.

Operator ini berguna ketika query tidak harus memenuhi seluruh hasil sub query, tetapi cukup cocok dengan salah satunya.

7. Sub Query dengan EXISTS dan NOT EXISTS

Sub query dengan EXISTS digunakan untuk memeriksa apakah sub query menghasilkan data atau tidak.

  • Jika sub query menghasilkan setidaknya satu baris, maka EXISTS bernilai TRUE.
  • Jika sub query tidak menghasilkan baris, maka EXISTS bernilai FALSE.

Negasinya adalah NOT EXISTS, yang bernilai TRUE ketika sub query tidak memiliki hasil.

Operator ini sering digunakan untuk memeriksa keberadaan data tertentu sebelum query utama dijalankan.

8. Sub Query dengan IN

Operator IN digunakan ketika sub query menghasilkan lebih dari satu nilai dan kita ingin memeriksa apakah nilai pada query utama termasuk di dalam himpunan nilai tersebut.

Contoh makna logisnya:

  • description IN (subquery) berarti nilai description harus sama dengan salah satu nilai yang dihasilkan sub query.

Operator ini sangat berguna sebagai pengganti = ketika hasil sub query terdiri atas banyak baris.

9. Hal-Hal yang Perlu Diperhatikan

Ada beberapa hal penting yang perlu dipahami saat menggunakan sub query:

  • sub query selalu ditulis di dalam tanda kurung (),
  • sub query pada klausa SELECT harus menghasilkan satu nilai,
  • operator = hanya cocok untuk sub query dengan satu hasil,
  • jika sub query menghasilkan banyak nilai, gunakan operator seperti IN, ANY, SOME, atau ALL,
  • urutan eksekusi query memengaruhi apakah sebuah alias dari klausa SELECT dapat dikenali pada klausa lain.

Pemahaman terhadap hal-hal ini penting agar query bertingkat dapat disusun dengan benar dan tidak menimbulkan error.

Penutup Pengantar

Sebelum masuk ke aktivitas praktikum, mahasiswa perlu memahami bahwa seluruh materi pada pertemuan ini saling berkaitan. Penempatan sub query pada klausa SELECT, FROM, dan WHERE, serta penggunaan operator ALL, ANY, SOME, EXISTS, NOT EXISTS, dan IN, merupakan bagian dari satu cara berpikir yang sama, yaitu menggunakan hasil query lain untuk mendukung query utama. Dengan memahami materi inti ini terlebih dahulu, mahasiswa akan lebih mudah mengikuti percobaan praktikum secara runtut dan memahami alasan di balik setiap query yang dijalankan.