Penggunaan Subquery dalam Query SQL (Bag. 2)

Sharing is caring!

Artikel ini merupakan kelanjutan dari bagian 1 tentang Penggunaan Subquery dalam Query SQL. Pada artikel ini akan dibahas pertanyaan 4 s/d 6 yang diberikan pada artikel sebelumnya.

Apabila Anda belum membaca artikel sebelumnya, maka silakan baca terlebih dahulu.

Sekarang akan kita bahas pernyataan No. 4

Pada kasus ini, kita akan menghapus data mahasiswa (dari tabel mhs) yang memiliki IPK terendah (kasus di DO). Secara logika, penyelesaian dari soal ini adalah, kita harus cari dulu mahasiswa (nim) yang memiliki IPK terendah. Setelah diperoleh nim mahasiswa tersebut, selanjutnya kita gunakan sebagai syarat untuk menghapus data mahasiswa yang ada di tabel mahasiswa.

Berikut ini adalah query untuk mencari nim yang memiliki IPK terendah

SELECT ambilmk.nim
FROM ambilmk, mk
WHERE ambilmk.kodeMK = mk.kodeMK
GROUP BY ambilmk.nim
ORDER BY sum(ambilmk.nilai * mk.sks)/sum(mk.sks) ASC
LIMIT 0, 1;

Secara logika, untuk mencari nim dengan IPK terendah adalah, dengan menampilkan semua nim dan IPK nya terlebih dahulu, lalu mensorting berdasarkan IPK secara ASCENDING. Dengan demikian nim yang ber IPK terendah akan berada pada record pertama (setelah sorting). Lalu ambil record pertama tersebut dengan LIMIT 0, 1. Sehingga berdasarkan logika itu, jadilah query di atas. Tapi hal ini belum menjawab pertanyaan No. 4.

Selanjutnya berdasarkan hasil query untuk mencari nim ber IPK terendah itu, kita gunakan sebagai syarat penghapusan data mahasiswa di tabel mahasiswa.

DELETE FROM mhs
WHERE nim = (
            SELECT ambilmk.nim
            FROM ambilmk, mk
            WHERE ambilmk.kodeMK = mk.kodeMK
            GROUP BY ambilmk.nim
            ORDER BY sum(ambilmk.nilai * mk.sks)/sum(mk.sks)
            LIMIT 0, 1
            );

Dari query di atas, mahasiswa yang akan terhapus adalah yang bernim ‘002’, dengan IPK 2.4 Kasihan ya… Kejam sekali kebijakannya :’-(

Sekarang akan kita bahas soal No. 5

Pada soal ini, kita diminta menampilkan mahasiswa (nim dan nama) yang memiliki IPK di bawah 3.5.

Untuk menjawab soal ini, logika yang kita gunakan adalah: langkah pertama tampilkan dahulu semua nim dan IPK nya masing-masing (gunakan GROUP BY nim). Lalu persempit filternya dengan menambahkan syarat bahwa yang ditampilkan hanya yang ber IPK < 3.5 (gunakan HAVING).

Berikut ini querynya

SELECT ambilmk.nim,
       sum(ambilmk.nilai*mk.sks)/sum(mk.sks) as IPK
FROM ambilmk, mk
WHERE ambilmk.kodeMK = mk.kodeMK
GROUP BY ambilmk.nim
HAVING IPK &lt; 3.5;

Mengapa syarat IPK < 3.5 tidak diletakkan di WHERE? alasannya adalah IPK bukan suatu field tabel, tapi suatu alias untuk kalkulasi yang menggunakan aggregate function sum().

Wah ternyata kok gak ada subquerynya ya? he..he.. maaf saya salah mengambil kasus. Anggap saja ini bonus dari saya 🙂

OK… selanjutnya soal No. 6 (the last soal)

Pada soal ini, kita diminta menaikkan semua nilai sebesar 1 point untuk matakuliah ‘A03’. Alasannya sang dosen melakukan kesalahan dalam memberi nilai 🙂
Dalam hal ini, sama saja kita mengupdate data nilai dengan syarat hanya pada matakuliah ‘A03’. Sehingga query SQL nya adalah:

UPDATE ambilmk
SET nilai = nilai + 1
WHERE kodeMK = 'A03';

Maksud dari SET nilai = nilai + 1 adalah mengupdate nilai yang baru yaitu nilai yang lama ditambah 1.

Wah lagi-lagi kok gak ada subquerynya ya? 🙂 Sekali lagi maaf, saya salah ambil kasus lagi. Anggap saja ini bonus kedua buat Anda. Mudah-mudahan dengan 4 kasus dari 6 kasus yang ada, dapat memberikan pengetahuan bagi Anda tentang subquery ini.

Tinggalkan Komentar