Sitemap
atop part2

atop part2

unemployed king part 2

PRAKTIKUM BASIS DATA.6

8 min readJun 2, 2026

--

PRAKTIKUM BASIS DATA.6 (SQL SUB QUERY)

Press enter or click to view image in full size

Haloooo kembali lagi bersama saya Munada Athof Fahlafi dalam artikel hasil praktikum saya selama mempelajari materi pada perkuliahan praktikum Basis data semester 2, langsung saja ke praktikumnya

Pendahuluan

1.1 Latar Belakang

Dalam pengelolaan basis data relasional, tidak semua kebutuhan pengambilan data dapat diselesaikan dengan query tunggal. Terkadang, suatu query membutuhkan hasil dari query lain sebagai syarat atau filter untuk mendapatkan informasi yang lebih spesifik. SQL menyediakan fitur Subquery (atau nested query) sebagai solusi untuk kebutuhan tersebut.

Praktikum Modul 6 ini membahas konsep SQL Subquery, yaitu teknik menyisipkan sebuah query ke dalam query lain sebagai bagian dari klausa WHERE, FROM, atau SELECT. Dengan memahami SQL Subquery, mahasiswa dapat membangun query yang lebih kompleks, dinamis, dan efisien dalam sistem basis data relasional, seperti melakukan perbandingan antar hasil query, memfilter data berdasarkan kriteria dari tabel lain, serta menangani operasi yang tidak dapat dilakukan dengan query tunggal.

1.2 Tujuan Praktikum

  1. Mahasiswa mampu menjelaskan konsep SQL bertingkat (Subquery) dalam basis data.
  2. Mahasiswa mampu mengimplementasikan berbagai jenis Subquery (Scalar, Multiple-Row, Multiple-Column, dan Correlated Subquery dengan operator EXISTS/NOT EXISTS).
  3. Mahasiswa mampu menganalisis perbedaan hasil dari masing-masing jenis Subquery dan operator komparasi (IN, ANY, SOME, ALL).

1.3 Manfaat

Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu merancang query SQL yang lebih kompleks dan dinamis untuk mengambil data dari basis data relasional, serta memahami implikasi setiap jenis Subquery terhadap hasil query dan performa eksekusi.

Metodologi

2.1 Alat dan Bahan

  • Seperangkat laptop/komputer dengan koneksi internet
  • Sistem Operasi Windows/Linux/Mac
  • Aplikasi XAMPP (MySQL + phpMyAdmin)

2.2 Dasar Teori SQL Subquery

Subquery (atau nested query) adalah sebuah query SQL yang disisipkan ke dalam query utama sebagai bagian dari klausa WHERE, FROM, atau SELECT. Subquery memungkinkan pengguna untuk mengeksekusi query yang lebih kompleks dengan menggabungkan hasil dari satu query ke dalam query lainnya.

Terdapat beberapa tipe Subquery:

a) Scalar Subquery

Subquery yang menghasilkan nilai tunggal (satu baris, satu kolom), seperti hasil perhitungan atau pengambilan data tunggal. Dapat menggunakan operator komparasi: =, >, >=, <, <=, <>.

SELECT * FROM mahasiswa
WHERE jk = (SELECT jk FROM mahasiswa WHERE nama = "wati");

b) Multiple-Row Subquery

Subquery yang menghasilkan beberapa baris data. Menggunakan operator komparasi: IN, ANY/SOME, atau ALL.

  • Operator IN — sama dengan member di dalam list.
  • Operator ANY/SOME — membandingkan suatu nilai dengan setiap nilai yang dikembalikan subquery (= ANY setara dengan IN, < ANY setara dengan kurang dari maksimum, > ANY setara dengan lebih dari minimum).
  • Operator ALL — membandingkan suatu nilai dengan semua nilai yang dikembalikan subquery (< ALL setara dengan kurang dari minimum, > ALL setara dengan lebih dari maksimum).
SELECT * FROM matakuliah
WHERE sks > ALL (SELECT sks FROM matakuliah WHERE semester = 3);

c) Multiple-Column Subquery

Subquery yang mengembalikan lebih dari satu kolom data. Menggunakan operator IN, ANY/SOME, atau ALL dengan pasangan kolom.

SELECT * FROM matakuliah
WHERE (semester, sks) IN (SELECT semester, sks FROM matakuliah WHERE kd_mk = 'PTI447');

d) Correlated Subquery dengan EXISTS dan NOT EXISTS

Subquery yang berkorelasi dengan query utama, artinya subquery dieksekusi berulang untuk setiap baris query utama.

  • EXISTS — mengembalikan TRUE jika subquery menghasilkan setidaknya satu baris.
  • NOT EXISTS — mengembalikan TRUE jika subquery tidak menghasilkan baris sama sekali.
SELECT * FROM matakuliah
WHERE EXISTS (SELECT * FROM ambil_mk WHERE kd_mk = kode_mk);

ANALISIS DAN HASIL PRAKTIKUM

beberapa soal yang akan saya jadikan acuan pada praktikum kali ini :

sebelum mengerjakan soal kita akan membuat database dari contoh yang sudah diberikan pada modul yaitu :

Press enter or click to view image in full size

sebagai contoh saya akan membuat salah satu database diatas

Press enter or click to view image in full size

jika berhasil maka database akan menampilkan data seperti ini :

Press enter or click to view image in full size

oke langsung saja kita ke pembahasan soal.

Get atop part2’s stories in your inbox

Join Medium for free to get updates from this writer.

soal 1

Press enter or click to view image in full size

Proses pada query ini diawali dengan eksekusi subquery yang bertugas mencari siapa dosen yang menjabat sebagai ketua jurusan Teknik Elektro. Subquery tersebut akan menyisir tabel jurusan, tepatnya pada baris di mana kolom nama_jur berisi 'Teknik Elektro', lalu mengambil nilai kode_dos dari baris tersebut. Setelah angka kode dosen didapatkan, query utama yang menargetkan tabel matakuliah akan menggunakan angka tersebut sebagai filter. Hasil akhirnya, query menampilkan kolom kd_mk dan nama_mk dari setiap mata kuliah yang diampu oleh dosen ketua jurusan Teknik Elektro tersebut.

soal 2

Langkah pertama yang dilakukan oleh query ini adalah mengumpulkan seluruh NIM mahasiswa yang pernah terlibat dalam pengambilan mata kuliah. Subquery (SELECT DISTINCT nim FROM ambil_mk) akan memindai tabel ambil_mk dan menghasilkan daftar NIM unik, yaitu 101, 103, 104, 105, 107. Setelah daftar tersebut terkumpul, query utama yang mengambil semua data dari tabel mahasiswa akan melakukan pengecekan dengan operator NOT IN. Operator ini bekerja seperti penyaring: setiap baris mahasiswa akan diperiksa, apakah NIM-nya tidak termasuk dalam daftar dari subquery. Apabila NIM seorang mahasiswa tidak ditemukan dalam daftar tersebut, maka baris mahasiswa bersangkutan akan ditampilkan. Hasilnya, mahasiswa dengan NIM 102 dan 106 (Budi dan Iwan) muncul karena mereka tidak tercatat pernah mengambil mata kuliah apa pun.

soal 3

Query ini memanfaatkan subquery untuk mengumpulkan kode-kode dosen yang mengajar mata kuliah dengan tingkat semester lebih besar dari 3. Subquery akan memindai tabel matakuliah, menyaring baris-baris yang memiliki nilai semester > 3, lalu mengambil kolom kode_dos dari baris-baris tersebut. Setelah daftar kode dosen terkumpul, query utama akan menampilkan seluruh kolom dari tabel dosen yang kode dosennya masuk ke dalam daftar tersebut. Dengan demikian, informasi lengkap tentang dosen-dosen yang mengajar di semester atas (4, 5, dst) akan ditampilkan.

soal 4

Press enter or click to view image in full size

Proses pada query ini cukup sederhana namun efektif. Pertama, subquery (SELECT kode_dos FROM jurusan WHERE nama_jur = 'Teknik Elektro') akan dieksekusi dan menghasilkan satu nilai, yaitu 10. Nilai ini merepresentasikan kode dosen yang menjadi ketua dari jurusan Teknik Elektro. Kemudian, query utama yang mengambil seluruh kolom dari tabel matakuliah akan menerapkan kondisi kode_dos != 10. Artinya, query akan menampilkan semua mata kuliah kecuali yang diampu oleh dosen berkode 10. Dengan kata lain, mata kuliah yang diajar oleh Suharto (kode_dos 10) seperti PTI333 dan TIK333 tidak akan muncul. Sebaliknya, mata kuliah seperti PTI123 (diampu Rahmawati kode 12), PTI447 (diampu Martono kode 11), PTI777 (diampu dosen kode 99), TIK123 (diampu dosen kode 33), dan TIK342 (diampu Martono kode 11) akan tampil semua karena diampu oleh dosen yang bukan ketua jurusan Teknik Elektro.

soal 5

Press enter or click to view image in full size

Query ini bekerja dengan dua lapisan pencarian. Lapisan pertama, subquery paling dalam akan mengumpulkan semua kode mata kuliah yang pernah diambil oleh mahasiswa dari tabel ambil_mk. Kemudian, subquery lapisan kedua akan mencari kode dosen dari tabel matakuliah yang mata kuliahnya tidak termasuk dalam daftar hasil lapisan pertama. Terakhir, query utama akan menampilkan seluruh data dosen yang kode dosennya berhasil dikumpulkan oleh subquery lapisan kedua. Hasilnya, dosen yang mengajar matakuliah yang tidak pernah diminati oleh mahasiswa manapun akan ditampilkan secara lengkap.

soal 6

Untuk memahami query ini, perlu diketahui bahwa kata kunci ANY berfungsi membandingkan suatu nilai dengan setiap nilai yang dikembalikan oleh subquery, dan jika salah satu perbandingan bernilai benar maka kondisi keseluruhan dianggap benar. Subquery (SELECT sks FROM matakuliah) akan menghasilkan daftar seluruh SKS yang ada pada tabel matakuliah, yaitu 3, 3, 1, 2, 2, 3, 1. Kemudian, query utama memeriksa setiap baris di tabel matakuliah dengan kondisi sks > ANY (...subquery...). Artinya, sebuah mata kuliah akan memenuhi syarat jika SKS-nya lebih besar dari setidaknya satu nilai dalam daftar tersebut. Karena nilai SKS terkecil dalam daftar adalah 1, maka semua mata kuliah dengan SKS lebih besar dari 1 akan terambil. Setelah itu, query luar mengambil kode dosen dari matakuliah yang memenuhi syarat tersebut, lalu query paling luar menampilkan seluruh data dosen yang kodenya masuk dalam daftar tersebut. Hasil akhirnya adalah semua dosen yang mengajar matakuliah dengan SKS 2 atau 3 akan ditampilkan.

soal 7

Press enter or click to view image in full size

uery ini bekerja dengan cara mencari terlebih dahulu alamat-alamat dosen yang tidak menjabat sebagai ketua jurusan Teknik Elektro. Subquery akan mengecualikan kode dosen ketua jurusan Teknik Elektro (yaitu kode 10) dari tabel dosen, lalu mengambil kolom alamat_dos dari dosen-dosen yang tersisa. Setelah kumpulan alamat tersebut didapatkan, query utama akan menyaring tabel mahasiswa dengan kondisi di mana kolom alamat mahasiswa termasuk ke dalam daftar alamat dari subquery. Hasilnya, seluruh data mahasiswa yang bertempat tinggal di wilayah yang sama dengan salah satu dosen non-ketua Teknik Elektro akan ditampilkan.

soal 8

Query ini tergolong yang paling kompleks karena melibatkan JOIN antar tabel selain subquery. Prosesnya dimulai dari subquery (SELECT kode_dos FROM jurusan WHERE nama_jur = 'Teknik Elektro') yang menghasilkan nilai 10, yaitu kode dosen ketua jurusan Teknik Elektro. Nilai ini digunakan untuk menyaring tabel matakuliah secara tidak langsung. Query utama menghubungkan tiga tabel sekaligus: mahasiswa di-JOIN dengan ambil_mk berdasarkan NIM, kemudian hasilnya di-JOIN lagi dengan matakuliah berdasarkan kode mata kuliah. Setelah ketiga tabel tergabung, klausa WHERE mk.kode_dos = 10 akan menyaring hanya baris-baris di mana dosen pengajarnya adalah dosen berkode 10, yaitu Suharto. Kata kunci DISTINCT digunakan karena seorang mahasiswa bisa saja mengambil lebih dari satu mata kuliah yang diajar oleh ketua jurusan, sehingga tanpa DISTINCT mahasiswa yang sama bisa muncul berulang kali. Hasil akhirnya adalah seluruh kolom data mahasiswa yang mengambil mata kuliah yang diampu oleh Ketua Jurusan Teknik Elektro.

Kesimpulan

Berdasarkan praktikum yang telah dilakukan, dapat disimpulkan:

  1. SQL Subquery adalah mekanisme penting dalam basis data relasional untuk menyisipkan query ke dalam query lain, memungkinkan pengambilan data yang lebih kompleks dan dinamis.
  2. Scalar Subquery menghasilkan satu nilai tunggal dan cocok digunakan ketika kita membutuhkan satu nilai spesifik sebagai filter, misalnya mencari data dengan kesamaan atribut dari baris tertentu.
  3. Multiple-Row Subquery (dengan IN, ANY, ALL) berguna ketika hasil subquery berupa beberapa baris. Operator IN digunakan untuk keanggotaan dalam daftar, ANY untuk perbandingan dengan setidaknya satu nilai, dan ALL untuk perbandingan dengan semua nilai dalam hasil subquery.
  4. Multiple-Column Subquery memungkinkan perbandingan berdasarkan lebih dari satu kolom sekaligus, sangat berguna ketika kondisi filter melibatkan pasangan nilai dari beberapa atribut.
  5. Correlated Subquery dengan EXISTS/NOT EXISTS sangat efektif untuk mengecek keberadaan atau ketiadaan relasi antara tabel, misalnya mencari mata kuliah yang pernah diambil atau tidak pernah diambil oleh mahasiswa.
  6. Pemilihan jenis Subquery sangat bergantung pada kebutuhan analisis data; kesalahan memilih operator atau jenis Subquery dapat menghasilkan data yang tidak sesuai atau performa query yang buruk, terutama pada database dengan skala besar.

Referensi dan link github

referensi : modul 6 praktikum basis data

github :

sekian laprak dari saya terimakasih ^^