← Back to list

SQL SUB QUERY

Pendahuluan

Aufa Abid Rahman · 2026-05-17 00:41 · 0 claps · 5.7 min read
#query #sql #mysql
Open on Medium ↗

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 mahasiswa

tabel matakuliah

tabel matakuliah

tabel jurusan

tabel jurusan

tabel dosen

tabel dosen

tabel ambil_mk

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.

[embed]Basis-Data/Pertemuan_9/mahasiswa.sql at main · Aufanashr/Basis-Data Contribute to Aufanashr/Basis-Data development by creating an account on GitHub.github.com

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