Bagi
Anda dan saya yang sedang membuat sistem informasi akademik dan merasa kesulitan dengan
bagaimana cara menampilkan nilai Index Prestasi (IP) mahasiswa untuk setiap
semesternya, mudah-mudahan artikel ini berguna.
Ide
menulis artikel ini muncul sewaktu perjalanan menuju my campus
OK…
dalam artikel ini akan saya coba kupas bagaimana membuat query SQL untuk
menampilkan Index Prestasi mahasiswa untuk setiap semester yang telah
ditempuhnya. Query ini pasti terdapat dalam sebuah sistem informasi akademik
untuk menginformasikan track record akademik seorang mahasiswa yang telah menempuh
perkuliahan.
Misalkan
kita memiliki tabel matakuliah (‘mk’) dan pengambilan matakuliah (‘ambilmk’)
dalam database sebagai berikut:
1.CREATE TABLE mk (
2.kodeMK varchar(5),
3.namaMK varchar(20),
4.sks int(11),
5.PRIMARY KEY(kodeMK)
6.)
1.CREATE TABLE ambilmk (
2.nim varchar(5),
3.kodeMK varchar(5),
4.nilai float,
5.smt varchar(10),
6.tahun varchar(9),
7.PRIMARY KEY (nim, kodeMK, smt, tahun),
8.)
disertai
dengan record untuk masing-masing tabel sbb:
1.INSERT INTO `ambilmk` VALUES ('M002', 'MK01', '3', 'GANJIL', '2008/2009');
2.INSERT INTO `ambilmk` VALUES ('M002', 'MK02', '4', 'GANJIL', '2008/2009');
3.INSERT INTO `ambilmk` VALUES ('M002', 'MK03', '3', 'GENAP', '2008/2009');
4.INSERT INTO `ambilmk` VALUES ('M002', 'MK04', '4', 'GENAP', '2008/2009');
5.INSERT INTO `ambilmk` VALUES ('M002', 'MK05', '4', 'GANJIL', '2009/2010');
1.INSERT INTO `mk` VALUES ('MK01', 'DATABASE', '3');
2.INSERT INTO `mk` VALUES ('MK02', 'PEMROGRAMAN DASAR', '2');
3.INSERT INTO `mk` VALUES ('MK03', 'PEMROGRAMAN WEB', '4');
4.INSERT INTO `mk` VALUES ('MK04', 'OOP', '3');
5.INSERT INTO `mk` VALUES ('MK05', 'PEMROGRAMAN VISUAL', '3');
Keterangan:
Di
dalam tabel ‘ambilmk’ terdapat field ‘smt’ yang digunakan untuk memberi
keterangan pada semester apa (genap/ganjil) si mahasiswa mengambil matakuliah
tersebut. Sedangkan field ‘tahun’ menunjukkan tahun ajarannya.
OK…
sekarang bagaimana dengan bentuk query SQL nya. Untuk mencari IP, tentu kita
harus tahu dulu formulanya, yaitu
IP = sum(sks x
nilai)/sum(sks)
atau
hasil dari penjumlahan sks x nilai matakuliah yang telah diambil dibagi dengan
jumlah sks matakuliah tersebut.
Nah…
sekarang kita terapkan formula tersebut ke dalam query SQL. Dalam hal ini kita
akan menampilkan hasil querynya dalam bentuk SMT, TAHUN, IP.
But…
tunggu dulu. Field ‘nilai’ ada di tabel ‘ambilmk’ sedangkan field ‘sks’ ada di
tabel ‘mk’. So… gimana donk? …. Lho apanya yang gimana? kan kita bisa relasikan
kedua tabel melalui field ‘kodemk’. So… no problem kan?
1.SELECT smt, tahun, sum(sks * nilai)/sum(sks) as IP
2.FROM ambilmk, mk
3.WHERE ambilmk.kodemk = mk.kodemk AND nim
= 'M002'
4.GROUP BY tahun, smt
Query
SQL di atas akan mencoba menampilkan IP mahasiswa bernim ‘M002′ untuk
setiap semester dan tahun ajarannya.
Mungkin Anda bertanya, mengapa dalam query SQL perlu diberikan
GROUP BY tahun, smt
? Ya… karena query ini tujuannya adalah menampilkan IP setiap
tahun dan semesternya. Sehingga perhitungan nilai untuk menghasilkan IP juga
harus perlu dikelompokkan berdasarkan tahun dan semesternya.
Hasil query di atas akan menghasilkan output seperti di bawah
ini
Trus.. mungkin Anda bertanya lagi, apakah perintah ‘GROUP BY
tahun, smt’ nya harus seperti itu? Maksudnya, bisakah dibalik menjadi ‘GROUP BY
smt, tahun’? Jawabannya adalah ‘NO PROBLEM’. Hasilnya tetap sama, namun yang
berbeda adalah tampilannya saja. Bila Anda menggunakan ‘GROUP BY smt, tahun’
maka pengelompokan diprioritaskan pada semester, sehingga dalam tampilannya
menjadi seperti di bawah ini
Anda lihat bahwa pada hasil di atas, jika digunakan ‘
GROUP BY
smt, tahun
‘ maka nama semester yang sama
akan mengumpul menjadi satu (dalam baris yang berurutan).
Sekarang Anda coba bandingkan dengan gambar pertama yang
merupakan hasil dari penggunaan ‘
GROUP BY tahun, smt
‘. Dalam gambar tersebut tampak bahwa tahun yang sama akan
mengumpul menjadi satu (dalam baris yang berurutan). Nah.. tentunya tampilan
yang lebih baik adalah tampilan pada gambar pertama di atas yang menggunakan ‘GROUP BY
tahun, smt
‘.
OK.. mudah-mudahan sedikit artikel ini berguna buat Anda yang
sedang belajar SQL maupun yang sedang membuat sistem informasi akademik.
Sebuah sistem informasi akademik seharusnya merekam atau
mencatat semua track record akademik mahasiswanya secara lengkap detail dan lengkap.
Proses pencatatan ini harus dilakukan secara kontinyu tiap semester.
Sistem informasi akademik tidak lepas dengan pencatatan nilai
semua mahasiswanya. Dalam pencatatan nilai ini, terkadang ada banyak mahasiswa
yang mengambil sebuah matakuliah lebih dari sekali. Yah… itu wajar mengingat
tidak semua matakuliah itu mudah, sehingga butuh beberapa kali pengambilan
matakuliah yang sama sampai mencapai nilai yang baik.
Sebagai contoh misalkan ada mahasiswa A dia mengambil matakuliah
X pada semester 1. Karena si A ini anaknya malas belajar, maka nilai matakuliah
X nya jelek sekali yaitu 1.0 (D). Nah… semester 3, si A ini kembali lagi
mengambil matakuliah X. Namun dengan usahanya kali ini dia hanya mendapatkan
nilai 2.0 (C). Karena matakuliah itu sebenarnya menyenangkan, maka si A ingin
mengambil lagi matakuliah X di semester 5. Nah.. karena usahanya dalam belajar
tinggi, maka akhirnya ia mendapat nilai 4.0 (A).
Nah… dalam sistem informasi akademik harus dapat mencatat semua
track record mahasiswa A di atas dalam pengambilan matakuliah X nya, mulai dari
semester 1, 3, dan 5.
Selanjutnya ketika si A akan lulus kuliah, maka sistem informasi
akademik akan mencetak semua hasil studinya (transkrip nilai). Untuk kasus di
atas (pengambilan matakuliah X), harusnya sistem informasi akademik hanya akan
menampilkan hasil yang terbaik, yaitu nilai 4.0 (A) pada matakuliah X nya.
Yang menjadi pertanyaan adalah, ‘Bagaimana membuat query SQL
untuk menampilkan daftar matakuliah yang telah diikuti mahasiswa beserta
hasilnya, dengan ketentuan jika ada sebuah matakuliah yang diikuti beberapa
kali maka hanya akan ditampilkan sekali yaitu yang memiliki nilai terbaik
saja”. Pertanyaan inilah yang akan dibahas pada artikel kali ini.
OK.. untuk membahasnya, ada baiknya kita sajikan terlebih dahulu
data-datanya. Dalam kasus ini misalkan terdapat 3 buah tabel yaitu ‘mhs’, ‘mk’
dan ‘ambilmk’. Tabel ‘mhs’ digunakan untuk menyimpan data mahasiswa, ‘mk’ untuk
menyimpan data matakuliah-matakuliah, dan ‘ambilmk’ untuk menyimpan data
pengambilan matakuliah oleh mahasiswa beserta nilainya.
1.CREATE
TABLE
mhs (
2.nim
varchar(10),
3.namamhs
varchar(30),
4.alamat text,
5.sex
varchar(10),
6.PRIMARY
KEY
(nim)
7.);
1.INSERT
INTO
mhs
VALUES
('M0197001',
'ROSIHAN
ARI YUANA',
'COLOMADU',
'L');
2.INSERT
INTO
mhs
VALUES
('M0197002',
'DWI
AMALIA FITRIANI',
'KUDUS',
'P');
3.INSERT
INTO
mhs
VALUES
('M0197003',
'FAZA
FAUZAN KH.',
'COLOMADU',
'L');
4.INSERT
INTO
mhs
VALUES
('M0197004',
'NADA
HASANAH',
'COLOMADU',
'P');
5.INSERT
INTO
mhs
VALUES
('M0197005',
'MUH.
AHSANI TAQWIM',
'COLOMADU',
'L');
1.CREATE
TABLE
mk (
2.kodemk
varchar(5),
3.namamk
varchar(20),
4.sks
int(11),
5.smt
int(11),
6.PRIMARY
KEY
(kodemk)
7.) ;
1.INSERT
INTO
mk
VALUES
('K001',
'KALKULUS
I', 3, 1);
2.INSERT
INTO
mk
VALUES
('K002',
'KALKULUS
II', 3, 2);
3.INSERT
INTO
mk
VALUES
('K003',
'GEOMETRI',
2, 1);
4.INSERT
INTO
mk
VALUES
('K004',
'NUMERIK',
3, 2);
1.CREATE
TABLE
ambilmk (
2.nim
varchar(10),
3.kodemk
varchar(5),
4.smt
varchar(6),
5.thajaran
varchar(9),
6.nilai
float,
7.PRIMARY
KEY
(nim, kodemk, smt, thajaran)
8.);
1.INSERT
INTO
ambilmk
VALUES
('M0197001',
'K001',
'GANJIL',
'2007/2008',
1);
2.INSERT
INTO
ambilmk
VALUES
('M0197001',
'K002',
'GANJIL',
'2007/2008',
2);
3.INSERT
INTO
ambilmk
VALUES
('M0197001',
'K003',
'GANJIL',
'2007/2008',
3);
4.INSERT
INTO
ambilmk
VALUES
('M0197002',
'K001',
'GANJIL',
'2007/2008',
2);
5.INSERT
INTO
ambilmk
VALUES
('M0197002',
'K002',
'GANJIL',
'2007/2008',
3);
6.INSERT
INTO
ambilmk
VALUES
('M0197001',
'K001',
'GANJIL',
'2008/2009',
2);
7.INSERT
INTO
ambilmk
VALUES
('M0197001',
'K001',
'GANJIL',
'2009/2010',
4);
Dari data pengambilan matakuliah di atas tampak bahwa mahasiswa
bernim ‘M0197001′ mengambil matakuliah berkode ‘K001′ beberapa kali, tepatnya 3
kali. Pengambilan pertama dia mendapat 1.0, kedua 2.0 dan ketiga mendapat 4.0.
Sekarang bagaimana cara menulis query SQL untuk menampilkan
semua matakuliah yang telah diikuti mahasiswa bernim ‘M0197001′ ini?
OK… misalkan kita gunakan query seperti berikut ini
1.SELECT
nim, kodemk, nilai
2.FROM
ambilmk
3.WHERE
nim =
'M0197001';
Hasil query di atas adalah
Jika Anda gunakan query di atas maka akan tampak semua
matakuliah yang telah diikuti mahasiswa tersebut. Dalam hasil yang diperoleh
akan tampak bahwa matakuliah ‘K001′ muncul sebanyak 3 kali dengan nilainya masing-masing. Sehingga
penggunaan query di atas belum menampilkan hasil pengambilan matakuliah ‘K001′ secara tunggal dengan nilai
tertinggi.
Hmm… yang nilainya tertinggi yah… OK.. berarti kita harus
gunakan function MAX(nilai). Tapi eit… tunggu dulu! Nilai tertinggi di sini
bukan nilai nilai tertinggi secara umum dari semua matakuliah yang diambil tapi
nilai tertinggi dari matakuliah yang sama yang pernah diambilnya. Oleh karena
itu dalam query SQL yang kita buat ini nanti harus ada ‘GROUP BY kodemk’
1.SELECT
nim, kodemk,
max(nilai)
2.FROM
ambilmk
3.WHERE
nim =
'M0197001'
4.GROUP
BY
kodemk;
Hasil query di atas adalah
Yes…. sudah lebih baik sekarang. Dari hasil di atas tampak bahwa
untuk nilai ‘K001′ sudah muncul hanya sebuah dengan nilai yang tertinggi.
OK.. next… bagaimana jika kita ingin menampilkan nama
masing-masing matakuliahnya dan juga SKS nya? Hmm.. ya berarti kita harus
relasikan tabel ‘ambilmk’ dengan ‘mk’.
1.SELECT
ambilmk.nim, ambilmk.kodemk, mk.namamk, mk.sks,
MAX(ambilmk.nilai)
2.FROM
ambilmk, mk
3.WHERE
ambilmk.kodemk = mk.kodemk
AND
ambilmk.nim =
'M0197001'
4.GROUP
BY
ambilmk.kodemk;
Hasil query di atas adalah
He..3x mudah bukan membuat query SQL nya. Nah… mudah-mudahan
artikel ini bisa membantu Anda yang sedang membuat sistem informasi akademik.
BACA JUGA YANG INI DEH.....
Pada artikel ini akan diberikan beberapa contoh perintah SQL
yang diimplementasikan pada multi tabel. Adapun perintah SQL untuk manipulasi
data pada satu tabel, saya yakin hal ini cukup mudah bagi Anda. Dalam contoh
ini akan diambil studi kasus tentang pengambilan matakuliah mahasiswa.
Tabel-tabel yang dibuat pada studi kasus ini cukup sederhana
saja untuk memudahkan pemahaman. Adapun tabel-tabel tersebut adalah:
1.mhs (
2.nim varchar(3),
3.namaMhs
varchar(30),
4.primary key(nim)
5.)
1.mk (
2.kodeMK varchar(3),
3.namaMK varchar(30),
4.sks integer,
5.primary key(kodeMK)
6.)
1.ambilMK (
2.nim varchar(3),
3.kodeMK varchar(3),
4.nilai integer,
5.primary key(nim,
kodeMK)
6.)
Dalam hal ini, field nim dan kodeMK pada tabel ambilMK merupakan
foreign key. Apabila diperhatikan, tabel mhs dengan tabel ambilMK saling
berelasi karena nim dalam tabel ambilMK berasal dari nim dalam tabel mhs
(master tabel).
Demikian pula antara tabel mk dengan ambilMK. Kedua tabel ini
juga berelasi karena kodeMK dalam tabel ambilMK berasal dari kodeMK dalam tabel
mk.
Untuk record masing-masing tabel, misalkan diberikan berikut
ini:
Tabel : mhs
1.nim  Â
namaMhs
2.001Â Â Â
Joko
3.002Â Â Â
Amir
4.003Â Â Â
Budi
Tabel : mk
1.kodeMKÂ Â Â
namaMKÂ Â Â Â Â Â sks
2.A01Â Â Â
Kalkulus   3
3.A02Â Â Â
Geometri   2
4.A03Â Â Â
Aljabar      3
Tabel : ambilMK
1.nim  Â
kodeMKÂ Â Â nilai
2.001Â Â Â
A01Â Â Â 3
3.001Â Â Â
A02Â Â Â 4
4.001Â Â Â
A03Â Â Â 2
5.002Â Â Â
A02Â Â Â 3
6.002Â Â Â
A03Â Â Â 2
7.003Â Â Â
A01Â Â Â 4
8.003Â Â Â
A03Â Â Â 3
Selanjutnya misalkan akan dicari data-data sbb:
- Tampilkan nim dan nama
mahasiswa yang mengambil Kalkulus (kodeMK = A01)
- Tampilkan nim, nama
mahasiswa dan jumlah SKS matakuliah yang diambil untuk setiap mahasiswa
- Berapakah IPK mahasiswa
bernama Budi (NIM: 003)
- Tampilkan nim, nama
mahasiswa, dan IPK setiap mahasiswa
Untuk menjawab no. 1, kita harus cari dulu tabel mana yang
terkait dengan query tersebut. Apabila kita akan mencari query tersebut
berdasarkan nama matakuliah ‘Kalkulus’ maka tabel yang terkait adalah mhs
(untuk menampilkan nim dan nama mahasiswa), mk (karena dalam tabel ini terdapat
nama matakuliah), serta tabel ambilMK (karena tabel ini berisi data pengambilan
matakuliah oleh mahasiswa).
Setelah menentukan tabel mana yang terkait dengan query,
selanjutnya dapat dibuat statement SQL nya, yaitu
1.SELECT mhs.nim,
mhs.namaMhs
2.FROM mhs, mk,
ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.AND mk.namaMK =
'Kalkulus';
Maksud mhs.nim, maksudnya adalah menampilkan data nim yang
berasal dari tabel mhs. Dapat pula Anda menuliskan SQL nya seperti ini
1.SELECT ambilMK.nim,
mhs.namaMhs
2.FROM mhs, mk,
ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.AND mk.namaMK =
'Kalkulus';
Hal ini dikarenakan untuk menampilkan nim dapat pula berasal
dari tabel ambilMK.
Perhatikan bagian FROM dari kedua statement SQL di atas.
Nama-nama tabel yang terkait dengan query dituliskan pada bagian FROM ini.
Selanjutnya apa maksud dari perintah mhs.nim = ambilMK.nim?
Perintah ini digunakan untuk merelasikan tabel mhs dan ambilMK, dimana kedua
tabel direlasikan melalui field nim di kedua tabel. Hal yang sama juga berlaku
untuk perintah mk.kodeMK = ambilMK.kodeMK.
Sedangkan perintah mk.namaMK = ‘Kalkulus’ digunakan sebagai
syarat pencarian data (menampilkan data mahasiswa yang mengambil matakuliah
Kalkulus).
Apabila pencarian data mahasiswa yang mengambil Kalkulus ini
berdasarkan kode matakuliah (A01), maka Anda tidak perlu menggunakan tabel mk,
tapi cukup tabel mhs dan ambilMK saja. Hal ini dikarenakan kodeMK dapat
diketahui dari tabel ambilMK. Sehingga perintah SQL nya
1.SELECT mhs.nim,
mhs.namaMhs
2.FROM mhs, ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND ambilMK.kodeMK =
'A01';
Ketiga statement SQL di atas akan menghasilkan hasil yang sama
yaitu
1.NIMÂ Â Â
namaMhs
2.001Â Â Â
Joko
3.003Â Â Â
Budi
Selanjutnya akan dijawab pertanyaan no. 2. Seperti halnya
langkah penyelesaian pertanyaan no. 1, langkah pertama harus kita tentukan dulu
tabel apa saja yang terkait dengan query. Dalam hal ini kita akan menggunakan
tabel mhs, mk dan ambilMK. Tabel mhs untuk menampilkan nim dan nama mahasiswa.
Tabel mk digunakan karena di dalamnya terdapat data SKS. Sedangkan tabel
ambilMK digunakan karena berisi data yang menunjukkan pengambilan matakuliah
mahasiswa.
Perintah SQL untuk pertanyaan no. 2 adalah
1.SELECT mhs.nim,
mhs.namaMhs, sum(mk.sks)
as
jumlahSKS
2.FROM mhs, mk,
ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.GROUP BY
ambilMK.nim
atau
1.SELECT mhs.nim,
mhs.namaMhs, sum(mk.sks)
as
jumlahSKS
2.FROM mhs, mk,
ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
4.GROUP BY mhs.nim
Untuk mencari jumlah SKS setiap mahasiswa, kita menggunakan
perintah sum(mk.sks). Supaya perintah ini bisa jalan, maka harus ditambahkan
perintah GROUP BY mhs.nim atau GROUP BY ambilMK.nim. Hal ini dikarenakan proses
penjumlahan sks harus dilakukan pada setiap kelompok data. Maksudnya apa ya?
Perhatikan perintah SQL berikut ini
Perhatikan perintah SQL berikut ini
1.SELECT mhs.nim,
mhs.namaMhs, mk.sks
2.FROM mhs, mk,
ambilMK
3.WHERE mhs.nim =
ambilMK.nim AND mk.kodeMK = ambilMK.kodeMK
Perintah di atas akan menampilkan nim, nama mahasiswa serta sks
setiap mata kuliah yang diambil. Hasilnya adalah
1.NIMÂ Â Â
namaMhs      SKS
2.001Â Â Â
Joko  Â
   3
3.001Â Â Â
Joko  Â
   2
4.001Â Â Â
Joko  Â
   3
5.002Â Â Â
Amir  Â
   2
6.002Â Â Â
Amir  Â
   3
7.003Â Â Â
Budi     Â
3
8.003Â Â Â
Budi  Â
   3
Untuk pertanyaan no. 2 ini, seharusnya akan tampil hasil berikut
1.NIMÂ Â Â
namaMhs      jumlahSKS
2.001Â Â Â
Joko  Â
   8
3.002Â Â Â
Amir  Â
   5
4.003Â Â Â
Budi  Â
   6
Sehingga supaya mendapatkan hasil seperti di atas, kita akan
menjumlahkan setiap SKS yang diambil mahasiswa, berdasarkan kelompok mahasiswa,
dalam hal ini dikelompokkan berdasarkan NIM. Mengapa tidak dikelompokkan
berdasarkan nama mahasiswa? Wah bisa gawat kalau ini terjadi, karena ada
kemungkinan nama mahasiswa yang sama. Oleh karena itu harus ada perintah
GROUP BY mhs.nim
Bagaimana perintah SQL
untuk menampilkan IPK dari mahasiswa berNIM ’003′?
Untuk membuat SQL dari query di atas, lagi-lagi langkah pertama
adalah menentukan di tabel mana kita akan bekerja. Apabila Anda perhatikan,
maka tabel yang dipilih adalah mk dan ambilMK. Mengapa demikian? Tabel mk
digunakan untuk mengambil informasi terkait dengan sks matakuliah yang diambil
mahasiswa dan tabel ambilMK berisi informasi daftar matakuliah yang diambil
mahasiswa.
Nah… , setelah Anda menentukan tabel yang digunakan, selanjutnya
Anda harus tahu formula untuk menghitung IPK. Apa rumusnya? yaitu jumlah dari
perkalian sks dan nilai yang diambil mahasiswa dibagi dengan jumlah sks yang
diambil mahasiswa.
OK begitu Anda tahu rumusnya, langsung dapat diimplementasikan
ke SQL, yaitu
1.SELECT
sum(ambilMK.nilai * mk.sks)/sum(mk.sks)
as
IPK
2.FROM ambilMK, mk
3.WHERE
ambilMK.kodeMK = mk.kodeMK
4.AND ambilMK.nim =
'003';
Dari SQL di atas, Anda akan memperoleh hasil IPK mhs bernim ’003′ adalah 3.5
Hikmah dari contoh kasus pencarian IPK ini adalah, apabila Anda
membuat sistem untuk pencatatan nilai siswa seperti sistem informasi akademik
dan sejenisnya, sebaiknya data IP atau IPK jangan disimpan dalam tabel,
melainkan melalui proses query. Apabila data IP atau IPK tersimpan ke dalam
tabel, maka kemungkinan terjadi ketidakkonsistenan data semakin besar. Bisa
jadi IP atau IPK yang tersimpan di table
berbeda dengan kenyataan berdasarkan nilai-nilai matakuliah yang
diperoleh siswa. Lagipula jika data-data IP dan IPK disimpan dalam tabel, maka
hanya akan menambah penuh database Anda
OK… selanjutnya akan kita bahas untuk pertanyaan no. 4, yaitu
bagaimana statement SQL untuk menampilkan nim, nama dan nilai IPK semua
mahasiswa.
Nah… kalau pertanyaan ini, kita harus menggunakan semua tabel,
yaitu mhs, mk dan ambilMK.Tabel mhs diperlukan karena untuk menampilkan nama mahasiswa,
bisa juga untuk nim. Tapi nim juga dapat ditampilkan melalui tabel ambilMK.
Bagaimana statement SQL nya?
1.SELECT mhs.nim,
mhs.namaMhs,Â
2.sum(ambilMK.nilai *
mk.sks)/sum(mk.sks)
as
IPK
3.FROM mhs, ambilMK,
mk
4.WHERE mhs.nim =
ambilMK.nim AND ambilMK.kodeMK = mk.kodeMK
5.GROUP BY mhs.nim
Mengapa harus ada perintah GROUP BY mhs.nim? Hal ini karena
perhitungan IPK dapat dilakukan setelah data dikelompokkan berdasarkan nim,
mengingat seorang mahasiswa dapat mengambil matakuliah lebih lebih dari satu.
BACA JUGA ARTIKEL INI...
Ada beberapa mahasiswa saya yang bertanya,bisa tidak di
MySQL diterapkan konsep Foreign Key dan Referential Integrity seperti halnya di
MS. Access?”. Memang dalam MS. Access kita bisa melakukan setting relasi antar
tabel, yang menggambarkan hubungan PRIMARY KEY dan FOREIGN KEY antar tabel.
Sebagai contoh, misalkan dalam kasus pengambilan matakuliah
mahasiswa. Dalam kasus ini misalkan terdapat tabel induk bernama ‘MHS’ yang di
dalamnya terdapat field NIM, NAMAMHS. Tabel induk yang lain adalah ‘MK’ untuk
menyimpan data matakuliah dengan field-fieldnya KODEMK, NAMAMK. Dalam hal ini
field NIM dan KODEMK masing-masing adalah primary key pada tabel ‘MHS’ dan
‘MK’. Selanjutnya ada tabel lain bernama ‘AMBILMK’ dengan field NIM, KODEMK,
NILAI yang digunakan untuk menyimpan data pengambilan matakuliah mahasiswa.
Nah… dalam hal ini, field NIM dan KODEMK keduanya adalah bertindak sebagai
FOREIGN KEY.
Selanjutnya dalam MS. Access terdapat pula fasilitas untuk
mengimplementasikan referensial integrity. Misalkan, kita ubah data salah satu
kode NIM mahasiswa dalam tabel induk ‘MHS’. Nah… secara otomatis proses update
ini juga terjadi di tabel ‘AMBILMK’ yaitu pada data yang terkait NIM tersebut.
Begitu pula pada proses penghapusan. Sebagai contoh misalkan kita hapus salah
satu kode matakuliah di tabel MK, maka secara otomatis data yang terkait dengan
kode matakuliah tersebut pada tabel ‘AMBILMK’ akan terhapus.
Nah.. bagaimana dengan MySQL? Kira-kira bisa tidak diterapkan
kedua hal di atas seperti halnya MS. Access? Saya jawab TENTU SAJA BISA.
Yang menjadi pertanyaan adalah, “Bagaimana cara melakukannya?”.
Ya… untuk menerapkan konsep FOREIGN KEY dan REFERENTIAL INTEGRITY
ini, kita harus mensetting MySQL nya bisa support untuk tabel bertipe INNODB.
Biasanya ketika proses instalasi MySQL akan ditanyakan apakah databasenya
support dengan INNODB? Untuk hal ini, Anda harus jawab YA. Namun.. bila proses
instalasi Anda terlanjur tidak memilih support INNODB, maka cara mengaktifkan
INNODB adalah buka file “my.ini” lalu cari baris perintah “skip-innodb”.
Hapuslah perintah ini, lalu hentikan MySQL dan hidupkan kembali MySQL (restart
MySQL).
OK… sekarang kita coba untuk studi kasus. Kita akan membuat
database untuk keperluan pengambilan matakuliah mahasiswa seperti pada kasus di
atas. Berikut ini, adalah perintah SQL untuk membuat tabel-tabelnya.
Perintah SQL untuk membuat tabel ‘MHS’
1.CREATE
TABLE
mhs
2.(
3.nim
varchar(8),
4.namaMhs
varchar(20),
5.PRIMARY
KEY
(nim)
6.) TYPE = INNODB;
Perintah SQL untuk membuat tabel ‘MK’
1.CREATE
TABLE
mk
2.(
3.kodeMK
varchar(3),
4.namaMK
varchar(20),
5.PRIMARY
KEY
(kodeMK)
6.) TYPE = INNODB;
Perhatikan kedua perintah SQL di atas. Karena kita akan membuat
tabel bertipe INNODB, maka masing-masing perintah SQL diberikan perintah TYPE =
INNODB;
Sekarang, kita lanjutkan untuk membuat tabel untuk ‘ambilMK’.
01.CREATE
TABLE
ambilMK
02.(
03.nim
varchar(8),
04.kodeMK
varchar(3),
05.nilai
float(3,2),
06.PRIMARY
KEY
(nim, kodeMK),
07.FOREIGN
KEY
(nim)
REFERENCES
mhs (nim)
ON
DELETE
CASCADE
ON
UPDATECASCADE,
08.FOREIGN
KEY
(kodeMK)
REFERENCES
mk (kodeMK)
ON
DELETE
CASCADE
ON
UPDATECASCADE
09.) TYPE = INNODB;
Tabel di atas terdapat dua primary key yaitu NIM dan KODEMK.
Sedangkan field NIM ini juga merupakan foreign key yang direferensikan dari
field NIM yang ada dalam tabel MHS. Oleh karena itu tambahkan perintah “FOREIGN
KEY (nim) REFERENCES mhs (nim)”. Selanjutnya apa maksud dari “ON DELETE
CASCADE”? Perintah ini maksudnya bila ada data NIM yang dihapus pada tabel MHS,
maka secara otomatis data NIM yang ada dalam tabel AMBILMK ini juga akan
terhapus. Sedangkan “ON UPDATE CASCADE” digunakan untuk proses update otomatis
pada NIM dalam tabel AMBILMK, apabila NIM yang ada di tabel MHS ini diupdate.
Hal yang sama juga kita terapkan untuk tabel AMBILMK. Dalam hal
ini, KODEMK adalah sebagai foreign key yang direfensikan dari KODEMK yang ada
dalam tabel MK.
Sekarang coba Anda masukkan data-data berikut ini pada tabel MHS
1.NIM
NAMAMHS
2.M0197001
Rosihan Ari Yuana
3.M0197002 Dwi
Amalia Fitriani
4.M0197003 Faza
Fauzan
5.M0197004 Nada
Hasanah
6.M0197005 Muh.
Ahsani Taqwim
Masukkan pula data pada tabel MK
1.KODEMK
NAMAMK
2.M01
Database
3.M02
OOP
Nah… untuk mengecek referensial integrity, sekarang kita coba
masukkan data pada tabel AMBILMK.
1.INSERT
INTO
ambilmk
VALUES
('M0197001',
'M01',
3.0);
Ketika perintah SQL di atas dijalankan, data dapat dimasukkan ke
tabel AMBILMK dengan sukses. Kita lihat bahwa NIM M0197001 terdapat dalam tabel
MHS, begitu pula pada kode matakuliah M01 yang ada pada tabel MK.
Sehingga isi tabel AMBILMK menjadi
1.NIM
KODEMK NILAI
2.M0197001
M01 3.0
Sekarang kita coba masukkan data berikut ini
1.INSERT
INTO
ambilmk
VALUES
('M0197006',
'M01',
3.0);
Nah… perintah di atas akan menghasilkan error. Hal ini
disebabkan NIM M0197006 tidak ada dalam tabel MHS.
Sekarang kita coba melakukan proses update. Kita akan mengupdate
NIM M0197001 menjadi M0197010 yang ada dalam tabel MHS.
1.UPDATE
mhs
SET
nim =
'M0197010'
WHERE
nim =
'M0197001';
Hasil query di atas pada tabel MHS menjadi
1.NIM
NAMAMHS
2.M0197010
Rosihan Ari Yuana
3.M0197002 Dwi
Amalia Fitriani
4.M0197003 Faza
Fauzan
5.M0197004 Nada
Hasanah
6.M0197005 Muh.
Ahsani Taqwim
Sekarang Anda coba lihat isi tabel AMBILMK. Pastilah isinya
menjadi berikut ini
1.NIM
KODEMK NILAI
2.M0197010
M01 3.0
Selanjutnya kita coba update untuk KODEMK yang ada dalam tabel
MK. Misalnya akan diubah kode mk M01 menjadi M09.
1.UPDATE
mk
SET
kodeMK =
'M09'
WHERE
kodeMK =
'M01';
Hasil query di atas pada tabel MK adalah
1.KODEMK
NAMAMK
2.M09
Database
3.M02
OOP
Nah… bila kita lihat data di tabel AMBILMK, pastilah isinya
menjadi
1.NIM
KODEMK NILAI
2.M0197010
M09 3.0
1.NIM
KODEMK NILAI
2.M0197010
M09 3.0
Bagaimana dengan proses penghapusan? Kita cek aja… sekarang kita
coba hapus data mahasiswa berNIM M0197010 dalam tabel MHS.
1.DELETE
FROM
mhs
WHERE
nim =
'M0197010';
Hasil dari query SQL di atas pada tabel MHS adalah
1.NIM
NAMAMHS
2.M0197002 Dwi
Amalia Fitriani
3.M0197003 Faza
Fauzan
4.M0197004 Nada
Hasanah
5.M0197005 Muh.
Ahsani Taqwim
Sekarang bila kita lihat isi tabel AMBILMK, pastilah menjadi
kosong karena data pengambilan matakuliah terkait dengan mahasiswa NIM M0197010
ini ikut terhapus.
OK… begitulah penjelasan ini saya tulis. Moga-moga bermanfaat
bagi kita semua deh... semua… terus semangat belajar dan pantang menyerah. Indonesia
sangat membutuhkan kita ..Salam Hangat....WILLH NOBIS