Tugasnya Tugas, Berkas dan Basis Data

Akhirnya  UTS sudah berjalan selama 1 minggu. Tugas yang sudah lama di kerjakan pun akhirnya saya posting juga. Maklum di kosan tidak ada internet. Oke, tanpa basa-basi ini tugas Berkas Basis Data yang diberikan Pak Khabib Mustofa.

Tugas bisa di download disini

basdat

Diagram di atas adalah diagram relasi yang menggambarkan hubungan antar tabel dari soal yang diberikan. Saya akan membahas 5 soal dari seluruh soal yang diberikan.

A. Tampilkan banyaknya SKS yang sudah diselesaikan oleh masing-masing mahasiswa

– Jika ada Matakuliah yang sama, sks nya tetap di jumlah kan

-Jika ada matakuliah yang sama maka yang di ambil ada lah matakuliah yang terbaru

B. Tampilkan data-data yang bisa untuk melakukan IPK berdasarkan asumsi diatas.

C. Tampilkan Dosen yang pernah mengampu matakuliah yang kurang dari 15 mahasiswa

D. ampilkan matakuliah yang telah lulus lebih dari 100 sks.

E. Bila matakuliah ‘Tugas Akhir’ adalah ‘M0016’. Tampilkan banyak siswa yang sudah mengambil matakuliah ‘Tugas Akhir’.

Langsung saja, akan saya bahas bagaimana query-query yang di pakai untuk menyelesaikan 5 permasalahan yang diberikan

A. MENAMPILKAN BANYAKNYA SKS YANG SUDAH DIAMBIL MAHASISWA

Pertama – tama akan dibentuk tabel yang memberikan informasi yang di butuhkan dalam penampilan banyaknya sks yang sudah di ambil oleh semua mahasiswa.

Dalam permasalahan ini, kolom yang akan saya tampilkan adalah:

NIM, NAMA, NAMA(dari matakuliah), KODEMK, KODEKULIAH, SKS, THNAKADEMIK, dan SEMESTER

Diambil dari tabel:

Mahasiswa, peserta, kuliah, matakuliah

Data – data ini akan sangat bermanfaat dalam penyelesaian soal-soal yang lain. Selain itu bisa juga di gunakan untuk mengecek pekerjaan yang sudah di lakukan.

Berikut adalah query untukn permasalah A.i :

SELECT mahasiswa.nim, mahasiswa.nama, matakuliah.nama AS matkul, kuliah.kodemk, kuliah.kodekuliah, matakuliah.sks, kuliah.thnakademik, kuliah.semester

FROM mahasiswa, peserta, kuliah, matakuliah

WHERE mahasiswa.nim = peserta.nim

AND kuliah.kodekuliah = peserta.kodekuliah

AND matakuliah.kodemk = kuliah.kodemk

Supaya data ini bisa di gunakan kembali, sebaiknya kita simpan query ini sebagai “view” supaya bisa di gunakan sewaktu-waktu biala di butuhkan.

Create view a1 as (SELECT mahasiswa.nim, mahasiswa.nama, matakuliah.nama AS matkul, kuliah.kodemk, kuliah.kodekuliah, matakuliah.sks, kuliah.thnakademik, kuliah.semester

FROM mahasiswa, peserta, kuliah, matakuliah

WHERE mahasiswa.nim = peserta.nim

AND kuliah.kodekuliah = peserta.kodekuliah

AND matakuliah.kodemk = kuliah.kodemk)

Saat ini saya menamkan tabel view baru ini dengan nama a1.

Lalu bagaimanakah cara menampilkan total sks yang sudah di ambil oleh masing-masing mahasiswa??

Karena sks yang akan di tampilkan memiliki kondisi bahwa matakuliah yang sudah di ulang tetap di jumlahkan maka yang akan di lakukan adalah kita  akan mengelompokkan (GROUP)tabel a1 tersebut berdasarkan NIM nya saja, dan akan menjumlahkan (SUM) dari sks tersebut. Berikut adalah QUERY nya:

SELECT nim, nama, sum(sks) as skstotal FROM a1 GROUP BY nim

Lalu bagaimanakah cara nya bila kita mau menampilkan total sks yang sudah diambil oleh mahasiswa dengan asumsi bahwa matakuliah yang sudah diulang diambil yang paling baru.

Berarti kita akan membutuhkan data-data dari tabel a1 dan akan mengambil matakuliah yang paling baru jika mahasiswa mangembil matakuliah yang sama lebih dari 1 kali.

Saya akan mengambil matakuliah terbaru berdasarkan kodekuliah yang paling baru, dan semester yang paling baru. Dan di kelompokkan berdasarkan NIM, dan kodemk. Karena data yang ini akan di pakai lagi maka sebaiknya di buat view berdasarkan data ini.

CREATE view a2 as(SELECT nim, nama, matkul, kodemk, max(kodekuliah), sks, thnakademik, max(semester) FROM a1 GROUP BY nim, kodemk)

Lalu saya akan menampilkan jumlah sks masing-masing mahasiswa dengan query sebagaik berikut.

SELECT nim, nama, sum(sks) as jumlah_sks FROM a2 GROUP BY nim


B. MENAMPILKAN TABEL YANG BISA DIGUNAKAN UNTUK MENDAPATKAN IPK

IPK bisa didapatkan dengan menjumlahkan semua IP yang  didapat dan dibagi dengan banyaknya semester.

Pertama-tama, dibuat terlebih dahulu tabel penilaian yang memberikan data tentar nilai dan bobot dari nilai tersebut.

CREATE table penilaian (nilai char(1), bobot int(1))

Setelah itu dimasukkan ketentuan bobot nya. Jika nilai A bobot nya adalah 4, B bobot nya 3, C bobotnya 2, D bobotnya 1 dan E bobot nya 0.

Setelah itu, untuk mempermudah pengambilan, saya akan membuat view baru yang menampung data-data yang akan mempermudah untuk pengambilan IPK. Kolom2 yang akan saya ambil adalah, nim, nama, nama matakuliah, kodemk, kodekuliah, sks,  nilai, bobot , semester dan tahun akademik .

Querynya adalah:

Create view b1 as(select mahasiswa.nama, mahasiswa.nim, matakuliah.nama as matkul, kuliah.kodemk, kuliah.kodekuliah, matakuliah.sks, peserta.nilai, penilaian.bobot, kuliah.thnakademik, kuliah.semester from mahasiswa, peserta, kuliah, matakuliah, penilaian where mahasiswa.nim = peserta.nim and kuliah.kodekuliah = peserta.kodekuliah and matakuliah.kodemk = kuliah.kodemk and peserta.nilai = penilaian.nilai)

setelah itu kita akan untuk menyeleksi jika ada matakuliah yang sudah di ulang akan diambil yang terakhir kali saja. QUERY nya adalah:

select nama, nim, matkul, kodemk, max(kodekuliah), sks, nilai, bobot, thnakademik, max(semester) from b1 group by nim, kodemk

supaya lebih mudah jika akan di gunakan maka query sebelum nya di buat menjadi view baru

create view b2 as (select nama, nim, matkul, kodemk, max(kodekuliah) as kodekul_terakhir, sks, nilai, bobot, thnakademik, max(semester) as smt_akhir from b1 group by nim, kodemk)

Dari tabel ini kita bisa mendapatkan IPK. IPK bisa kita dapatkan pertama2 dengan cara mengelompokan berdasarkan nim, thnakademik dan semester untuk mendapatkan IP semester. IP semester bisa di dapat dari total bobot / banyaknya sks. Setelah itu kita akan mengelompokan berdasarkan nim untuk mendapatkan IPK. IPK didapat dari perhitungan total IP  / banyaknya semester (sum(IP)/count(IP))


C. MENAMPILKAN DOSEN YANG PERNAH MENGAJAR MATAKULIAH YANG KURANG DARI 15 MAHASISWA

Pertama2 akan di buat sebuah tabel yang berisi tentang data mahasiswa – mahasiswa beserta dosen-dosennya

create view c1 as(select dosen.nip, dosen.nama, kuliah.kodekuliah, peserta.nim from dosen, kuliah, peserta where dosen.nip = kuliah.nip and kuliah.kodekuliah = peserta.kodekuliah)

setelah itu akan dihitung total dari peserta yang mengikuti. Di kelompokan berdasarkan nip dosen tersebut.

select nip, nama, count(nim) from c1 group by nip

umpamakan query sebelumnya kita jadikan view c2.

Maka untuk meilhat dosen yang pernah mengajar kelas kurang dari 15 orang adalah:

select nip, nama from c2 where jummahasiswa <= 15

D. Menampilkan Nama Mahasiswa Yang Telah Lulus Lebih Dari 100 sks

Untuk permasalahan yang satu ini, pada dasarnya kita harus menghitung total sks yang sudah di ambil oleh masing masing mahasiswa sesuai dengan asumsi yang telah di berikan dari soal.

Mahasiswa yang lulus tidak boleh memiliki nilai E.

Hal ini bisa diselesaikan dengan query Sebagai Berikut

SELECT nim, nama, sum( sks ) AS jumlahsks

FROM (SELECT mahasiswa.nama, peserta.nim,

kuliah.kodemk, MAX( kuliah.kodekuliah ) ,

matakuliah.sks, peserta.nilai

FROM mahasiswa, peserta, kuliah, matakuliah

WHERE kuliah.kodemk = matakuliah.kodemk

AND peserta.kodekuliah = kuliah.kodekuliah

AND mahasiswa.nim = peserta.nim

AND UPPER( peserta.nilai ) != ‘E’

GROUP BY peserta.nim, kuliah.kodemk) AS sks

GROUP BY nim

HAVING jumlahsks >100

Fungsi Upper digunakan untuk menyatakan bahwa nilai tidak boleh bernilai ‘E’ atau ‘e’.  Dan fungsi having digunakan untuk menyatakan bahwa sks yang diharuskan untuk bisa lulus harus lebih besar dari 100 sks.

E.MENAMPILKAN BANYAKNYA MAHASISWA YANG TELAH LULUS TUGAS AKHIR APABILA TUGAS AKHIR ADALAH ‘M0012’

Pada bagian ini di haruskan agar tidak ada nilai yang ‘ E’ atau ‘e’. Penggunaan count nim dapat menyajikan banyak nya mahasiswa yang telah mengambil tugas akhir. Tentu saja semua ini harus sesuai dengan relasi-relasi nya agar menampilkan hasil yang akan diinginkan

Query nya adalah:

SELECT count( nim ) as jumlahlulusTA

FROM (

SELECT mahasiswa.nim, kuliah.kodemk, peserta.nilai

FROM mahasiswa, peserta, kuliah

WHERE mahasiswa.nim = peserta.nim

AND peserta.kodekuliah = kuliah.kodekuliah

AND kuliah.kodemk = ‘M0012’

AND UPPER( peserta.nilai ) != ‘E’

GROUP BY mahasiswa.nim) AS lulusTgs_Akhir

Sekian dahulu posting soal tugas dari saya. mohon maaf kalau masih banyak yang salah dan tidak efisien dalam pengerjaan seperti banyak menggunakan view dan lain-lain. Nanti setelah saya mengerti lebih jau akan saya update menggunakan query yang lebih baik lagi. _|-|o””””

Wassalam.


Comments (1)

ventyApril 20th, 2010 at 9:57 am

salam kenal ya…
dokumentasi kuliah ya…
ditunggu lho kunjungan baliknya ya….
thx…

Leave a comment

Your comment