Pembahasan Basis Data
Diberikan sejumlah tabel untuk memodelkan sebagian dari suatu sistem akademik perguruan
tinggi sebagai berikut.
- Matakuliah(kodemk,namamk,sks) -> berisi daftar matakuliah yang
ditawarkan
- Dosen(nip,nama) -> daftar dosen pengampu matakuliah
- Mahasiswa(nim,nama,dosenpembimbing) -> daftar mahasiswa
- Kuliah(kodekuliah,kodemk,nip,thnakademik,semester) ->
daftar matakuliah dan dosen pengampu. Seorang dosen bisa mengajar
matakuliah yang sama untuk kelas yang berbeda pada suatu semester.
semester bernilai ’1′ untuk ganjil atau ’2′ untuk genap. thnakademik
dinyatakan dalam format panjang seperti ’2011-2012′
- Peserta(nim,kodekuliah,nilai) -> nilai mahasiswa dalam ‘a’, ‘b’
s.d. ‘e’.
Catatan
Asumsi
1. matakuliah hanya ditawarkan sekali dalam setahun, yaitu pada
semester 1 (ganjil) saja atau semester 2 (genap) saja dan tidak
kedua-duanya
2. bila pernah mengulang matakuliah, nilai yang diikutkan untuk
perhitungan IP adalah nilai terakhir
3. Matakuliah dikatakan lulus bila nilai yang diperoleh minimal ‘d’
Diasumsikan dalam suatu DBMS terdapat:
· fungsi upper(string) yang akan mengembalikan string dalam huruf kapital,
· fungsi concat(s1, s2, .., sn) yang mengembalikan gabungan string s1, s2 …
sn (misalnya concat(‘aku’, ‘kamu’
akan menghasilkan string ‘akukamu’
.
· fungsi ASCII(char) yang akan mengembalikan kode ASCII dari karakter
char. Detahui pula kode ASCII huruf ‘K’ lebih besar daripada kode ASCII
huruf ‘B’.
· fungsi substring(s,n,k) yang akan menghasilkan sub string dari string s
diambil sebanyak k karakter dimulai pada karakter ke n. Contoh:
substring(‘hanafi’,4,3) akan menghasilkan sub string “afi”
Tuliskan perintah SQL untuk permasalahan berikut:
A. tampilkan banyaknya SKS yang telah diselesaikan oleh masing-masing
mahasiswa
i. bila matakuliah yang diulang semua masuk dalam perhitungan
ii. bila matakuliah yang diulang hanya yang sesuai dengan asumsi
yang masuk dalam perhitungan
B. tampilkan data-data yang bisa untuk melakukan perhitungan IPK
(berdasar asumsi di atas)
C. Tampilkan dosen yang pernah mengampu kelas matakuliah yang
pesertanya tidak lebih dari 15 mahasiswa.
D. Tampilkan nama mahasiswa yang telah lulus lebih dari 100 SKS
E. Bila kode matakuliah untuk Tugas Akhir adalah ‘M0012’, tampilkan
banyaknya siswa yang telah lulus tugas akhir
F. Tampilkan daftar nomor dan nama mahasiswa beserta IP (Indeks
Prestasinya) berdasar dua asumsi di atas
Jawaban :
A.tampilkan banyaknya SKS yang telah diselesaikan oleh masing-masing
mahasiswa
i. bila matakuliah yang diulang semua masuk dalam perhitungan
SELECT m.nama, SUM( mk.sks )
FROM mahasiswa m
JOIN peserta p ON m.nim = p.nim
JOIN kuliah k ON p.kodekuliah = k.kodekuliah
JOIN matakuliah mk ON k.kodemk = mk.kodemk
GROUP BY m.nama
ii. bila matakuliah yang diulang hanya yang sesuai dengan asumsi
yang masuk dalam perhitungan
SELECT m.nama, SUM( mk.sks )
FROM mahasiswa m
JOIN peserta p ON m.nim = p.nim
JOIN kuliah k ON p.kodekuliah = k.kodekuliah
JOIN matakuliah mk ON k.kodemk = mk.kodemk
WHERE p.nilai ‘E’
GROUP BY m.nama
B.tampilkan data-data yang bisa untuk melakukan perhitungan IPK
(berdasar asumsi di atas)
SELECT m.nim, SUM( mk.sks ) sks, SUM(ASCII(‘E’
-ASCII(UPPER(p.nilai))) bobot, SUM(mk.sks* (ASCII(‘E’
-ASCII(UPPER(p.nilai)))/SUM(mk.sks) IP
FROM mahasiswa m
JOIN peserta p ON m.nim = p.nim
JOIN kuliah k ON p.kodekuliah = k.kodekuliah
JOIN matakuliah mk ON k.kodemk = mk.kodemk
WHERE p.nilai ‘E’
GROUP BY m.nim
C.Tampilkan dosen yang pernah mengampu kelas matakuliah yang
pesertanya tidak lebih dari 15 mahasiswa.
SELECT d.nama, COUNT(nim)
FROM dosen d
JOIN kuliah k ON d.nip = k.nip
JOIN peserta p ON k.kodekuliah = p.kodekuliah
GROUP BY d.nama
HAVING COUNT(nim) 100
E.Bila kode matakuliah untuk Tugas Akhir adalah ‘M0012’, tampilkan
banyaknya siswa yang telah lulus tugas akhir
SELECT COUNT(nim)
FROM peserta p
JOIN kuliah k ON p.kodekuliah = k.kodekuliah
JOIN matakuliah mk ON k.kodemk = mk.kodemk
WHERE mk.kodemk = ‘M0012′ AND nilai ‘E’
F.Tampilkan daftar nomor dan nama mahasiswa beserta IP (Indeks
Prestasinya) berdasar dua asumsi di atas
SELECT m.nim, m.nama, SUM(mk.sks*(ASCII(‘E’
-ASCII(UPPER(p.nilai)))/SUM(mk.sks) IP
FROM mahasiswa m
JOIN peserta p ON m.nim = p.nim
JOIN kuliah k ON p.kodekuliah = k.kodekuliah
JOIN matakuliah mk ON k.kodemk = mk.kodemk
WHERE p.nilai ‘E’
GROUP BY m.nim



