QUERI DATABASE SISTEM AKADEMIK PERGURUAN TINGGI
Assalamualaikum teman-teman,,
Pada kesempatan kali ini saya akan memberikan sedikit contoh query yang digunakan dalam pengolahan database. Dalam queri ini terdapat beberapa fungsi MySQL yang menggunakan fungsi agregasi, fungsi create view dan fungsi penggunaan 2 select dalam 1 queri.
Tetapi sebelum kita melakukan queri kita harus mempunyai suatu database dan sebuah permasalahan dalam sebuah database tersebut, jadi silakan ambil data dari link dibawah ini yang merupakan sebuah contoh permasalahannnya di sertai dengan database bernama evaluasi yang merupakan contoh sebuah database akademik di perguruan tinggi,,
Ya sebelum kita melakukan queri kita harus memahami data-data dari database tersebut baik tabel dan kolomnya,, Dan apabila ada sebuah data base yang mempunya isi seperti ini (sama dengan persoalan pada file di download linknya):
Matakuliah(kodemk,namamk,sks)
Dosen(nip,nama)
Mahasiswa(nim,nama,dosenpembimbing)
Kuliah(kodekuliah,kodemk,nip,thnakademik,semester)
Peserta(nim,kodekuliah,nilai)
(Untuk lebih lengkapnya silakan dibaca dalam link)
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'
many, karena dalam tabel matakuliah, kolom kodemk merupakan sebuah unique number, yang tidak akan mempunya data yang sama dan sedangkan pada kolom kodemk yang ada pada tabel kuliah, data kodemk bisa digunakan lebih dari satu. Hal pembacaan data seperti ini sangat diperlukan sebelum kita melakukan queri suatu database. Untuk memperudah analisis lihatlah bagan di bawah ini:
(terdapat dalam file pdf)
Dari gambar di atas tersebut dapat kita simpulkan bahwa setiap tabel saling berhubungan, sehingga kalau kita ingin menggunakan 2 buah tabel dalam suatu query kita harus menyamakan data yang merupakan penghubung tabel 1 ke tabel yang lain, misal pada tabel mahasiswa dengan tabel peserta yang menghubungkan kedua tabel tersebut ialah kolom nim, sehingga pada penquerian di butuhkan sebuah statment yang menyamakan kedua data nim tersebut. Dan apabila kita ingin menggabung lebih dari 2 tabel sekaligus, kita harus menyamakan data- data yang sama, misal kita ingin menggabungkan tabel peserta, kuliah dan matakuliah, yang harus di samakan agar ketiga tabel tersebut saling berhubungan ialah, data kodemk yang ada pada mata kuliah dan kuliah, data kodekuliah yang ada pada peserta dan kuliah.
Setelah memahami struktur database kita bisa menuju persoalan yang ada,
A. tampilkan banyaknya SKS yang telah diselesaikan oleh masing-masing mahasiswa i. bila matakuliah yang diulang semua masuk dalam perhitungan
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
Sebelum kita melakukan penquerian kita pertama juga harus menganalis soal, soal mana yang membutuhkan sebuah tabel bantu (dalam hal ini pembuatan sebuah tabel dibutuhkan fungsi ‘CREATE VIEW (NAME) AS (QUERY)’. Jadi kita tidak harus langung menquery menggunakan di phpmyadmin tetapi lebih baik kita buat sebuah bagan di selember kertas terlebih dahulu. Kemudian masuk dalam persoalan, soal B dapat dikatakan yang paling penting dan apabila hasil penquerian soal ini dibuat menjadi sebuah tabel bantu maka tabel ini dapat digunakan untuk menyokong penquerian pada soal nomer A, D,E,. Jadi pembuatan yang paling mendasar adalah membuat query pada soal B dan hasil penquerian tersebut kita gunakan sebagai tabel baru.
PEMBUATAN QUERY PADA SOAL B (PEMBUATAN DATA UNTUK PERHITUNGAN IPK)
Langkah awal dalam penquerian suata permasalahan adalah menentukan apa yang kita ingin tampilkan dalam tabel tersebut. Dalam permasalahan ini yang akan kita tampilkan adalah data yang dapat digunakan untuk perhitungan IPK, sehingga data-data yang dibutuhkan ialah data nim, nilai(nilai setiap mahasiswa), kodemk, sks, thnakademik, semester kemudian data tersebut Cuma membutuhkan 3 tabel saja yaitu: matakuliah, kuliah dan peserta. Kemudian yang terakhir untuk menggabungkan ketiga tabel tersebut kita harus menyamakan colom-colom yang sama sebagai penghubung yaitu colom kodekuliah dan kodemk. Mengapa tidak dicantumkan nama mahasiswa dalam penquerian tersebut?? Itu karena nim dapat dikatakan sudah mencukupi untuk membedakan mahasiswa yang satu dengan yang lain, dan apabila di ada masalah yang meminta dicantumkan nama mahasiswa, maka kita dapat memanggil data nama mahasiswa di tabel mahasiswa dengan menyamakan nim yang sudah ada.
Hasil penquerian permasalahan berdasarkan analisis tersebut:
SELECT nim, nilai, kuliah.kodemk, sks, thnakademik, semester FROM peserta, matakuliah, kuliah
ORDER BY nim
Dalam SELECT terdapat data yang mengikut sertakan nama tabelnya dan ada yang tidak, seperti kuliah.kodemk, Mengapa demikian?? Hal ini disebabkan pada colom kodemk terdapat pada dua tabel, yaitu pada tabel kuliah dan matakuliah, sehingga nama tabel harus dicantumkan agar kodemk tidak menjadi data yang ambigu. Kemudian FROM digunakan untuk memilih tabel mana yang akan digunakan, hal ini sesuai dengan analisis. Dan pada analisis untuk menggabungkan tabel-tabel kita harus menyamakan kolom-kolom yang sama,dan disini kita menggunkan perintah WHERE . perintah ORDER BY merupakan perintah yang digunakan untuk mengurutkan data pada tabel hasil penquerian, disini tabel saya urutkan berdasarkan nim.
Akan tetapi apabila kita lihat hasil dari tabel tersebut, ansumsi nomer 2 yaitu apabila mengulang maka nilai yang digunakan adalah nilai terakhir belumlah masuk, pada tabel ini semua kuliah yang dillakukan mahasiwa di cantumkan semua. Sehingga tabel hasil queri ini masihlah kotor(belum selesai) jadi kita harus memberi batasan batasan tertentu. Namun sebelumnya mungkin kita membutuhkan data-data dari hasil querian ini, maka lebih baik kita membuat tabel dari queri ini
Query untuk membuat tabel dari queri diatas:
CREATE VIEW dataipkotor AS SELECT nim, nilai, kuliah.kodemk, sks, thnakademik, semester FROM peserta, matakuliah, kuliah
WHERE peserta.kodekuliah = kuliah.kodekuliah AND matakuliah.kodemk = kuliah.kodemk ORDER BY nim menggabungkan
Perintah CREATE VIEW dataipkotor AS merupakan sebuah perintah untuk membuat sebuah tabel bernama dataipkotor. Tabel hasil querian tersebut kita namakan dataipkotor karena memang data tersebut belum sesuai dengan yang kita inginkan
namun sayangnya hal tersebut akan menghasilkan data pada kolom niai yang random untuk setiap nim, misal tadi peserta dengan nim “S2001” mempunyai nilai A, maka apabila menggunakan queri diatas bisa saja nilai berubah menjadi E(Gawat nich.. LoL), jadi untuk mengakalinya kita buat sebuah tabel bantu baru misal aja dinamai tbltahun. Di tabel ini kita gunakan fungsi MAX pada data thnkakademik sehinngga nanti relasinya kita kedua tabel dataipkotor dengan tbltahun dengan menyamakan nim, kodemk, dan thnakademik kedua tabel tersebut saling bersinambungan.
Na... ini queri pembuatan tabel pembantu tbltahun
CREATE VIEW tbltahun as SELECT nim, kodemk,MAX(thnakademik)as thnakademik FROM peserta, kuliah
WHERE peserta,kodekuliah=kuliah.kodekuliah GROUP BY nim, kodemk
ORDER BY nim
Disini tahun akademik di berikan fungsi maksimal dengan pengrupan kodemk, sehingga akan menghasilkan kodemk yang paling terakhir di ambil, setelah membuat tabel bantu ini kita dapat menentukan data ip yang sesuai dengan ansumsi di atas
Yup ini merupakan queri penggabungan tbltahun tabel dataipkotor
SELECT peserta.nim, nilai, kuliah.kodemk, sks, kuliah.thnakademik, kuliah.semester FROM peserta, matakuliah, kuliah, tbltahun
WHERE peserta.kodekuliah = kuliah.kodekuliah AND matakuliah.kodemk = kuliah.kodemk
AND kuliah.thnakademik = tbltahun.thnakademik AND peserta.nim = tbltahun.nim
AND kuliah.kodemk = tbltahun.kodemk ORDER BY nim
Kemudian karena kita membutuhkan data dari tabel ini kita lebih baik membuat hasil queri ini sebagai tabel dataip
Queri pembuatan tabel dataip
CREATE VIEW dataip AS SELECT peserta.nim, nilai, kuliah.kodemk, sks, kuliah.thnakademik, kuliah.semester
FROM peserta, matakuliah, kuliah, tbltahun WHERE peserta.kodekuliah = kuliah.kodekuliah AND matakuliah.kodemk = kuliah.kodemk
AND kuliah.thnakademik = tbltahun.thnakademik AND peserta.nim = tbltahun.nim
AND kuliah.kodemk = tbltahun.kodemk ORDER BY nim
Yap permasalahan b sudah selesai...
PEMBUATAN QUERY PADA SOAL A (MENENTUKAN BANYAKNYA SKS YANG DIAMBIL
MAHASISWA)
I)
Apabila Asumsi Kedua Diabaikan
SELECT nim, SUM(sks) AS banyaksks FROM dataipkotor
GROUP BY nim ORDER BY nim
Disini colom jumlah banyaknya sks yang di ambil mahasiswa kita namakan dengan banyaksks,....
II)
Apabila Asumsi Kedua Dipakai
Pada kasus yang ini tidaklah terlalu berbeda dengan yang pertama, perbedaannya cuma pada asumsi kedua dipakai. Jadi kali ini kita dapat menggunakan tabel yang telah kita buat pertama yaitu tabel dataip, di dalam tabel ini data kodemk sudah diambil yang paling akhir dari tahun akademik, jadi pada queri ini kita hanya mengganti tabelnya saja, sehingga querinya adalah sebagai berikut:
SELECT nim, SUM(sks) AS banyaksks FROM dataip
GROUP BY nim ORDER BY nim
Disini peserta yang mengulang matakuliah, nilainya hanya akan diambil yang terakhir
PEMBUATAN QUERY PADA SOAL C (MENAMPILKAN DOSEN YANG PERNAH
MENGAMPU KELAS YANG MAHASISWANYA TIDAK LEBIH DARI 15 PESERTA)
mendapatkan dosen yang mmengajar kurang dari 15 peserta dalam satu kelas?? Caranya adalah kita harus mencari relasi antara tabel peserta dengan tabel dosen. Dan ternyata kita membutuhkan tabel kuliah untuk menggabungkan kedua tabel tersebut dan relasinya adalah nip pada tabel dosen dengan kuliah dan kita lanjutkan dengan kodekuliah pada tabel kuliah dengan kodekuliah pada tabel peserta. Jadi hubungan dengan tabel dosen dengan peserta adalah nip dan kodekuliah dan penghubung antara keduanya adalah tabel kuliah. Sehingga untuk mencari banyaknya peserta dalam satu kelas matakuliah adalah dengan menggunakan fungsi COUNT pada nim peserta dengan digrup oleh kodekuliah. Digunakan nim karena merupakan pembeda pada setiap mahasiswa, sedangkan digunakan grup kodekuliah karena ini merupakan pembeda bagi setiap dosen, walaupun 2 kode kuliah dapat digunakan untuk 1 dosen . Oleh karena itu kita harus membagi menjadi satu subqueri lagi yaitu queri untuk menghitung banyaknya peserta yang ikut dalam setiap kodekuliah. Dan setelah itu kita gabungkan subqueri tersebut dengan tabel dosen tapi untuk menggabungkan keduanya kita membutuhkan tabel kuliah sebagai perantara. Dan kita pilih jumlah peserta dari subqueri itu yang jumlahnya kurang dari 15
Berdasarkan analisis query yang digunakan menjadi:
SELECT DISTINCT dosen.nip, nama FROM dosen, kuliah, (
SELECT COUNT( nim ) AS banyakp, kodekuliah FROM peserta
GROUP BY kodekuliah ) AS Y
WHERE kuliah.kodekuliah = Y.kodekuliah AND kuliah.nip = dosen.nip
AND Y.banyakp <15
Disini subqueri kita misalkan Y, dan banyak peserta pada setiap kuliah dimisalkan banyakp, dan subqueri dapat dikatakann merupakan sebuah tabel Y. Dan digunakan nama tabel didepan nip karena nip berada di dua tabel yaitu tabel dosen dan kuliah.
PEMBUATAN QUERY PADA SOAL D (MENAMPILKAN NAMA MAHASISWA YANG TELAH
Pada kasus kali ini kita hanya akan menampilkan data nama mahasiswa yang telah lulus lebih dari 100 sks jadi disini kita melakukan analisis yang hampir sama dengan diatas sehingga kita membutuhkan satu subqueri untuk membantu kita. Pada subqueri ini kita akan melakukan penjumlahan sks untuk setiap nim yang berbeda pada tebel dataipkotor, digunakan tabel dataipkotor karena pada permasalahan ini kita disuruh menampilkan mahasiswa yang telah lulus lebih dari 100 sks dan disini asumsi kedua tidaklah masuk juga pada subqueri ini kita pilih yang nilai bukanlah E karena syarat kelulusan sks adalah minimala nilai bernilai D. Kemudian pada queri utamanya kita akan memilih yang nimnya mempunyai jumlah sks yang lebih dari 100, kemudian kita gabungkan dengan tabel mahasiswa untuk mendapatkan nama dari nim yang telah lulus lebih dari 100 sks,
Sehingga querinya menjadi
SELECT nama, mahasiswa.nim FROM mahasiswa, (
SELECT nim, SUM( sks ) AS banyaksks FROM dataipkotor
WHERE UPPER( nilai ) != "E" GROUP BY nim
)Y
WHERE mahasiswa.nim = Y.nim AND banyaksks <100
Pada subqueri ini terdapat fungsi UPPER ini berfungsi untuk membuat huruf menjadi UPPERCASE, karena kalu tidak dipakai nilai e dan E tidaklah sama.
PEMBUATAN QUERY PADA SOAL E (MENAMPILKAN BANYAK MAHASISWA YANG
TELAH LULUS LULUS TUGAS AKHIR(M0012))
Sehingga querinya menjadi
SELECT COUNT(nim) AS bnyklulusTA FROM dataipkotor WHERE kodemk="M0012" AND UPPER(nilai) !="E"
Disini digunakan tabel dari dataip yang telah kita buat pertama kali kolom yang telah di beri fungsi count diberikan nama sebagai bnyklulusTA
QUERI UNTUK SOAL F (MENAMPILKAN NILAI IPK)
Pada permasalahan kali ini kita disuruh untuk menampilkan nilai ipk dari setiap mahasiswa dan disini kita juga akan menampilkan namanya. Yang susah itu adalah bagaimana kita mendapat nili ipk untuk setiap mahasiswa, lau gimana caranya..? caranya adalah kita harus mengkonversi nilai yang tadinya huruf menjadi angka, untuk angka A=4, B=3, C=2, D=1, dan E=0.adi disini kita butuh 2 fungsi tambahan yatu upper dan ascii, upper berguna untuk mengubah data menjadi uppercase semua dan ascii merubah huruf menjadi bil, untuk huruf A akan berubah menjadi 65 sedangkan untuk E adalah 69. jadi setelah kita mengkonversi dari huruf menjadi bilangan maka kita harus mengkalikan nilai tersebut dengan sks pada setiap matakuliah dan yang terakhir kita jumlahkan. Dengan itu maka kita akan mendapatkan jumlah pint untuk semua mahasiswa. Setelah mendapatkan point maka point tersebut harus dibagi dengan banyaknya sks yang kita ambil, ssehingga querinya menjadi:
SELECT mahasiswa.nim, nama, IPK
FROM mahasiswa,(SELECT nim, (SUM((69-(ASCII(UPPER(nilai))))*sks)/SUM(sks)) AS IPK FROM dataip
GROUP BY nim) as Y
WHERE Y.nim=mahasiswa.nim
Disni kita akan menggabungkan 2 tabel yaitu mahasiswa dengan tabel hasil queeri kita, jadi kita harus menyakan nnimnya agar kedua tabel tersebut menyatu.
Yup.. sekian dulu untuk pelajaran querinya