SQL SUB QUERY
Pendahuluan
SQL SUB QUERY

Pendahuluan
Subquery atau SQL bertingkat merupakan query yang ditempatkan di dalam query utama. Subquery digunakan untuk mempermudah pengambilan data yang kompleks dalam database relasional. Dengan adanya subquery, pengguna dapat melakukan pencarian data berdasarkan hasil query lain sehingga proses manipulasi data menjadi lebih efektif.
Pada praktikum ini digunakan beberapa tabel yaitu mahasiswa, dosen, jurusan, matakuliah, dan ambil_mk. Praktikum bertujuan untuk memahami penggunaan subquery dengan operator IN, ANY, ALL, EXISTS, dan NOT EXISTS.
Tujuan
- Memahami konsep SQL Sub Query.
- Menerapkan query bertingkat pada database.
- Menggunakan operator IN, ANY, ALL, EXISTS, dan NOT EXISTS.
- Menampilkan data dari beberapa tabel menggunakan subquery.
Membuat Database
Pada langkah awal kita akan membuat database dulu, di sini database saya bernama mahasiswa. Di dalam nya ada beberapa tabel yaitu meliputi mahasiswa, ambil_mk, matakuliah, dosen dan jurusan.

tabel mahasiswa

tabel matakuliah

tabel jurusan

tabel dosen

tabel ambil_mk
Scalar Subquery
Scalar Subquery merupakan subquery yang menghasilkan satu nilai tunggal. Biasanya digunakan pada klausa WHERE untuk membandingkan suatu nilai dengan hasil query lain.
Contoh penggunaan scalar subquery adalah mencari mahasiswa yang memiliki jenis kelamin sama dengan mahasiswa bernama Wati.
SELECT *
FROM mahasiswa
WHERE jk = (
SELECT jk
FROM mahasiswa
WHERE nama = 'Wati'
);

Subquery menghasilkan satu nilai yaitu jenis kelamin Wati. Nilai tersebut digunakan oleh query utama untuk menampilkan mahasiswa dengan jenis kelamin yang sama.
Multiple Row Subquery
Multiple Row Subquery adalah subquery yang menghasilkan lebih dari satu baris data. Subquery ini biasanya menggunakan operator IN, ANY/SOME, dan ALL.
a. Operator In
Operator IN digunakan untuk mencocokkan nilai dengan beberapa data hasil subquery.
SELECT kode_dos, nama_dos
FROM dosen
WHERE kode_dos IN (
SELECT kode_dos
FROM matakuliah
);

Subquery mengambil seluruh kode dosen pada tabel matakuliah. Query utama menampilkan dosen yang mengajar matakuliah.
b. Operator ANY / SOME
Operator ANY digunakan untuk membandingkan nilai dengan salah satu nilai hasil subquery.
SELECT *
FROM matakuliah
WHERE sks > ANY (
SELECT sks
FROM matakuliah
WHERE semester = 3
);

Query akan menampilkan matakuliah yang memiliki SKS lebih besar dari salah satu SKS matakuliah semester 3.
c. Operator ALL
Operator ALL digunakan untuk membandingkan nilai dengan seluruh hasil subquery.
SELECT *
FROM matakuliah
WHERE sks > ALL (
SELECT sks
FROM matakuliah
WHERE semester = 3
);

Query menampilkan matakuliah yang memiliki SKS lebih besar dari seluruh SKS matakuliah semester 3.
Multiple Column Subquery
Multiple Column Subquery merupakan subquery yang menghasilkan lebih dari satu kolom data.
SELECT *
FROM matakuliah
WHERE (sks, semester) = (
SELECT sks, semester
FROM matakuliah
WHERE kd_mk = 'PTI447'
);

Subquery mengambil nilai SKS dan semester dari matakuliah PTI447. Query utama menampilkan matakuliah yang memiliki SKS dan semester yang sama.
Operator EXISTS dan NOT EXISTS
Operator EXISTS digunakan untuk mengecek apakah subquery menghasilkan data. Sedangkan NOT EXISTS digunakan untuk mengecek apakah subquery tidak menghasilkan data.
a. EXISTS
SELECT *
FROM matakuliah
WHERE EXISTS (
SELECT *
FROM ambil_mk
WHERE kd_mk = matakuliah.kd_mk
);

Query menampilkan matakuliah yang diambil oleh mahasiswa.
b. NOT EXISTS
SELECT *
FROM matakuliah
WHERE NOT EXISTS (
SELECT *
FROM ambil_mk
WHERE kd_mk = matakuliah.kd_mk
);

Query menampilkan matakuliah yang tidak diambil oleh mahasiswa.
Penugasan
Soal 1
Dapatkan kode dan nama matakuliah dosen yang menjadi Ketua Jurusan Teknik Elektro.
SELECT kd_mk, nama_mk
FROM matakuliah
WHERE kode_dos = (
SELECT kode_dos
FROM jurusan
WHERE nama_jur = 'Teknik Elektro'
);

Query di atas menggunakan subquery untuk mengambil kode dosen Ketua Jurusan Teknik Elektro dari tabel jurusan. Hasil subquery digunakan pada query utama untuk menampilkan matakuliah yang diajar dosen tersebut.
Soal 2
Dapatkan data mahasiswa yang tidak mengambil matakuliah.
SELECT *
FROM mahasiswa
WHERE NIM NOT IN (
SELECT NIM
FROM ambil_mk
);

Subquery mengambil seluruh NIM mahasiswa yang terdapat pada tabel ambil_mk. Query utama kemudian menampilkan mahasiswa yang NIM-nya tidak ada pada hasil subquery.
Soal 3
Dapatkan data dosen yang mengajar matakuliah di atas semester 3.
SELECT *
FROM dosen
WHERE kode_dos IN (
SELECT kode_dos
FROM matakuliah
WHERE semester > 3
);

Subquery mencari kode dosen yang mengajar matakuliah semester lebih dari 3. Query utama menampilkan data dosen berdasarkan kode dosen tersebut.
Soal 4
Dapatkan data matakuliah dosen yang bukan merupakan Ketua Jurusan Teknik Elektro.
SELECT *
FROM matakuliah
WHERE kode_dos <> (
SELECT kode_dos
FROM jurusan
WHERE nama_jur = 'Teknik Elektro'
);

Subquery mengambil kode dosen Ketua Jurusan Teknik Elektro. Query utama menampilkan matakuliah yang diajar selain oleh dosen tersebut.
Soal 5
Dapatkan data dosen pengajar matakuliah yang tidak diambil oleh mahasiswa.
SELECT *
FROM dosen
WHERE kode_dos IN (
SELECT kode_dos
FROM matakuliah
WHERE kd_mk NOT IN (
SELECT kd_mk
FROM ambil_mk
)
);

Subquery pertama mencari matakuliah yang tidak diambil mahasiswa. Kemudian query berikutnya mengambil kode dosen pengajar matakuliah tersebut.
Soal 6
Dapatkan data dosen yang mengajar matakuliah dengan sks lebih besar dari sembarang sks.
SELECT *
FROM dosen
WHERE kode_dos IN (
SELECT kode_dos
FROM matakuliah
WHERE sks > ANY (
SELECT sks
FROM matakuliah
)
);

Operator ANY digunakan untuk membandingkan nilai sks dengan salah satu nilai sks lainnya pada tabel matakuliah.
Soal 7
Dapatkan data mahasiswa yang tinggal satu wilayah dengan dosen yang bukan merupakan Ketua Jurusan Teknik Elektro.
SELECT *
FROM mahasiswa
WHERE Alamat IN (
SELECT alamat_dos
FROM dosen
WHERE kode_dos <> (
SELECT kode_dos
FROM jurusan
WHERE nama_jur = 'Teknik Elektro'
)
);

Query mencari alamat dosen yang bukan Ketua Jurusan Teknik Elektro, kemudian menampilkan mahasiswa dengan alamat yang sama.
Soal 8
Dapatkan data mahasiswa yang diajar oleh Ketua Jurusan Teknik Elektro.
SELECT *
FROM mahasiswa
WHERE NIM IN (
SELECT NIM
FROM ambil_mk
WHERE kd_mk IN (
SELECT kd_mk
FROM matakuliah
WHERE kode_dos = (
SELECT kode_dos
FROM jurusan
WHERE nama_jur = 'Teknik Elektro'
)
)
);

Query menggunakan beberapa subquery untuk mencari mahasiswa yang mengambil matakuliah yang diajar oleh Ketua Jurusan Teknik Elektro.
Kesimpulan
Berdasarkan praktikum yang telah dilakukan, dapat disimpulkan bahwa subquery sangat membantu dalam pengolahan data yang kompleks pada database relasional. Dengan menggunakan SQL Sub Query, pengguna dapat melakukan pencarian data secara lebih spesifik dan terstruktur.
Operator seperti IN, ANY, ALL, EXISTS, dan NOT EXISTS memiliki fungsi yang berbeda-beda dalam proses pengambilan data. Penggunaan subquery juga mempermudah hubungan antar tabel sehingga informasi yang diperoleh menjadi lebih lengkap dan akurat.
Reference
Ahmad Nugroho, S.Kom., M.Eng. (2026). SQL Sub Query [Modul 6].
메타데이터
- post_id
- 313356ecbb1e
- slug
- sql-sub-query-313356ecbb1e
- url
- https://medium.com/@aufanashr/sql-sub-query-313356ecbb1e
- canonical_url
- https://medium.com/@aufanashr/sql-sub-query-313356ecbb1e
- author_url
- https://medium.com/@aufanashr
- status
- ok
- fetched_at
- 2026-06-09 15:37:30