MODUL 8 STRUCTURED QUERY LANGUAGE (BAGIAN 2) STRUKTUR DASAR 1. Klausa Select Perintah SQL untuk NIM dan nama mahasiswa yang ada di tabel Mahasiswa, maka perintah SQL berikut ini : Select nim, nama_mhs From mahasiswa Sementara, perintah berikut ini : Select nama_mhs From mahasiswa Apa bentuk tampilan dari klausa dibawah : Select nim, nama_mhs as nama Alamat_mhs as alamat From mahasiswa Apa bentuk tampilan dari klausa dibawah : Select * From mahasiswa 2. Klausa Where Berikut ini adalah contoh untuk menampilkan semua atribut untuk mahasiswa dengan NIM= 980002 : Select * From mahsiswa Where nim = 980002 Apa tampilan dari perintah dibawah ini : 1
Select * From kuliah Where semester between 3 and 5 3. Klausa Form Ekspresi berikut menghasilkan table seperti apa : select * from kuliah, dosen where kuliah. kode_dos = dosen.kode_dos Ekspresi berikut menghasilkan table seperti apa : apa? : select * from kuliah k, dosen d where k.kode_dos = d.kode_dos Ekspresi berikut menghasilkan table seperti apa : select k.kode_kul, k.nama_kul, d.nama_dos from kuliah k, dosen d where k.kode_dos = d.kode_dos Ekspresi berikut menghasilkan table seperti apa : select k.kode_kul as kode, k.nama_kul as kuliah, d.nama_dos as dosen from kuliah k, dosen d where k.kode_dos = d.kode_dos and k.semester = 3 Ekspresi berikut menghasilkan table seperti apa : select n.nim, m.nama_mhs k.nama_kul, n.indeks_nilai from nilai n, mahasiswa m, kuliah k 2
where n.nim = m.nim and n.kode_kul = k.kode_kul F. Latihan 1. Buatlah tabel-tabel dibawah ini dengan menggunakan Mysql dan simpan dalam database DataMaster Tabel Mahasiswa Mhs Nim T_lahir Jones Dendi Tomy Paula 61521 61300 61425 61230 05/12/77 28/04/78 01/11/75 14/06/77 Tabel Mhs_Kul Tabel Matakuliah Nim Kode_mk Nilai 61521 61521 61521 61300 61425 61425 61230 61230 Mat 231 Eko 220 Hst 211 Hst 211 Eng 202 Mat 231 Mat 231 Eng 202 B A B A C B D C M_kuliah Kode_mk sks Matematika Mat 231 3 Ekonomi Eko 220 3 Sejarah Hst 211 2 b.inggris Eng 202 2 Tabel Mutu Nilai Bobot 3
A B C D E 4 3 2 1 0 a. Cari semua nim dan nama mahasiswa yang tidak lahir tgl 28/04/78 b. Tampilkan nilai & nim dari mahasiswa yang memperoleh nilai D c. Tampilkan nilai mahasiswa yang bobotnya diatas dua d. tampilkan mahasiswa yang mengambil matakuliah "Matematika" e. ganti mahasiwa yang bernama "Tomy" menjadi "Candra" #Perintah INSERT Perintah INSERT digunakan untuk menambah data pada tabel. Sebenarnya ada berbagai macam kombinasi dari perintah insert ini. 3 macam model, yang sekiranya cukup bagi kita untuk berkiprah di dunia SQL. A. Model 1. Disini INSERT yang dipakai merupakan perintah standard Misalnya pada tabel tb_brg yang telah kita bikin pada pertemuan sebelumnya : insert into tb_brg(kode_brg, nama_brg) values( 1001, Buku ) insert into tb_brg(kode_brg, nama_brg) values( 1002, Pencil ) insert into tb_brg(kode_brg, nama_brg) values( 1003, Penggaris ) Jalankan ketiga perintah diatas maka tb_brg akan terisi dari nilai2 yang ada pada values. Untuk dapat melihat hasilnya bisa menjalankan perintah di bawah ini 4
select* from tb_brg maka akan terlihat tabel dibawah ini : B. Model 2. Perintah INSERT disini lebih ringkas, tapi butuh hapal susunan field tabelnya kalau tidak bisa ketukar informasi yang diberikan antara kode_brg dengan nama_brg. Perintah INSERT ini juga bisa dengan model dibawah ini insert into tb_brg values( 1004, Pulpen ) Perintah seperti ini semua field harus terisi oleh values, tidak boleh tidak. C. Model 3. Perintah ini dikombinasikan dengan SELECT, bisa dengan kriteria yang ingin kita tentukan. Biasanya perintah ini untuk memindah data dari tabel1 ke tabel2 Mari kita coba : Buat tabel kedua seperti pada pertemuan sebelumnya create table tb_brg2(kode_brg char(15) primary key, nama_brg char(50)) maka terbentuk tabel dengan nama tb_brg2, kemudian isi tabel tb_brg2 kita isikan dengan tabel tb_brg dengan kriteria kode_brg >= 1002, seperti yang dituliskan dibawah ini : insert into tb_brg2 select* from tb_brg where kode_brg >= 1002 5
hasilnya dapat dilihat pakai perintah select* from tb_brg2. Disini terlihat isi data tb_brg2 akan terisi dengan kode_brg >= 1002 Perintah Model ke-3 ini sangat praktis apabila kita mengelola data dengan jumlah ribuan bahkan jutaan record. Akan diberikan beberapa contoh perintah SQL yang diimplementasikan pada multi tabel. Adapun perintah SQL untuk manipulasi data pada satu tabel, 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: mhs ( nim varchar(3), namamhs varchar(30), primary key(nim) ) mk ( kodemk varchar(3), namamk varchar(30), sks integer, primary key(kodemk) ) ambilmk ( nim varchar(3), kodemk varchar(3), nilai integer, 6
primary key(nim, kodemk) ) 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 nim namamhs 001 Joko 002 Amir 003 Budi Tabel : mk kodemk namamk sks A01 Kalkulus 3 A02 Geometri 2 A03 Aljabar 3 Tabel : ambilmk nim kodemk nilai 001 A01 3 001 A02 4 001 A03 2 002 A02 3 002 A03 2 003 A01 4 003 A03 3 7
Selanjutnya misalkan akan dicari data-data sbb: 1. Tampilkan nim dan nama mahasiswa yang mengambil Kalkulus (kodemk = A01) 2. Tampilkan nim, nama mahasiswa dan jumlah SKS matakuliah yang diambil untuk setiap mahasiswa 3. Berapakah IPK mahasiswa bernama Budi (NIM: 003) 4. 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 SELECT mhs.nim, mhs.namamhs FROM mhs, mk, ambilmk WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk 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 SELECT ambilmk.nim, mhs.namamhs FROM mhs, mk, ambilmk WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk 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. 8
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 SELECT mhs.nim, mhs.namamhs FROM mhs, ambilmk WHERE mhs.nim = ambilmk.nim AND ambilmk.kodemk = 'A01'; Ketiga statement SQL di atas akan menghasilkan hasil yang sama yaitu NIM namamhs 001 Joko 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 SELECT mhs.nim, mhs.namamhs, sum(mk.sks) as jumlahsks FROM mhs, mk, ambilmk WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk GROUP BY ambilmk.nim 9
atau SELECT mhs.nim, mhs.namamhs, sum(mk.sks) as jumlahsks FROM mhs, mk, ambilmk WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk 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 SELECT mhs.nim, mhs.namamhs, mk.sks FROM mhs, mk, ambilmk 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 NIM namamhs SKS 001 Joko 3 001 Joko 2 001 Joko 3 002 Amir 2 002 Amir 3 003 Budi 3 003 Budi 3 Untuk pertanyaan no. 2 ini, seharusnya akan tampil hasil berikut NIM namamhs jumlahsks 001 Joko 8 002 Amir 5 003 Budi 6 10
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 Adapun pertanyaan no. 3 adalah 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 SELECT sum(ambilmk.nilai * mk.sks)/sum(mk.sks) as IPK FROM ambilmk, mk WHERE ambilmk.kodemk = mk.kodemk 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 tabel 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. Selanjutnya akan dibahas untuk pertanyaan no. 4, yaitu 11
bagaimana statement SQL untuk menampilkan nim, nama dan nilai IPK semua mahasiswa. 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? SELECT mhs.nim, mhs.namamhs, sum(ambilmk.nilai * mk.sks)/sum(mk.sks) as IPK FROM mhs, ambilmk, mk WHERE mhs.nim = ambilmk.nim AND ambilmk.kodemk = mk.kodemk 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. =================== 12