• Tidak ada hasil yang ditemukan

1 Tiftazani Khara Ilmu Komputer UGM 2006 Tiftazani.wordpress.com

N/A
N/A
Protected

Academic year: 2021

Membagikan "1 Tiftazani Khara Ilmu Komputer UGM 2006 Tiftazani.wordpress.com"

Copied!
14
0
0

Teks penuh

(1)

Wah cukup lama juga nih dah nggak ngisi blog, abis akhir2 ini lagi sibuk banget nih, haha9 …so sibuk  deh lebih tepatnya ☺.  Oh ya kali ini saya akan mencoba bagi‐bagi ilmu sedikit mengenai database, soal ini saya dapat ketika  sedang mengikuti kuliah Basis Data beberapa hari lalu.    Soalnya adalah sebagai berikut :    Diketahui Skema database fakultas yang terdiri dari 3 tabel :  ‐ MAHASISWA (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)  ‐ MATAKULIAH (NO_MK, NAMA_MK, PROGRAM_STUDI)  ‐ NILAI (NO_MHS, NO_MK, NILAI)  Buatlah Table, beserta jawablah soal‐soal yang ada:    Jawab : 

Saya akan menjawab soal berikut dengan dua database yang berbeda yaitu MySQL Versi 5.0 dan  Oracle 10g, Hal ini karena ada sedikit perbedaan antara sintaks SQL kedua Database tersebut,  biasanya terkait dengan tipe datanya. Seperti di Oracle ada tipe data Number, tetapi di MySQL tidak  ada, di Oracle ada Tipe data VARCHAR2(), tetapi di MySQL hanya ada VARCHAR() saja,  tidak ada tipe  VARCHAR2() di MySQL, setidaknya pada saat saya mengetik tutorial ini ☺    Oke berikut adalah sintaks untuk Oracle 10g Database :    Untuk Table Mahasiswa    CREATE TABLE MAHASISWA  (    NO_MHS      CHAR(10),    NAMA_MAHASISWA  VARCHAR2(30),    PROGRAM_STUDI   VARCHAR2(30),    KOTA_ASAL       VARCHAR2(30)  );    ALTER TABLE MAHASISWA ADD (    CONSTRAINT PK_MAHASISWA   PRIMARY KEY   (NO_MHS)    );      Untuk Table Matakuliah    CREATE TABLE MATAKULIAH  (    NO_MK      CHAR(10),    NAMA_MK        VARCHAR2(30),    PROGRAM_STUDI  VARCHAR2(25) 

(2)

);    ALTER TABLE MATAKULIAH ADD (    CONSTRAINT PK_MATAKULIAH   PRIMARY KEY   (NO_MK)  );    Untuk Table Nilai    CREATE TABLE NILAI  (    NO_MHS  CHAR(10),    NO_MK   CHAR(10),    NILAI   NUMBER(5,2)  );    ALTER TABLE NILAI ADD (    CONSTRAINT FK_NILAI_MAHASISWA    FOREIGN KEY (NO_MHS)    REFERENCES MAHASISWA (NO_MHS),    CONSTRAINT FK_NILAI_MATAKULIAH    FOREIGN KEY (NO_MK)    REFERENCES MATAKULIAH (NO_MK)  );      Dan Berikut ini adalah sintaks untuk MySQL Versi 5.0 :    Untuk Table Mahasiswa    CREATE TABLE MAHASISWA  (    NO_MHS      CHAR(10),    NAMA_MAHASISWA  VARCHAR(30),    PROGRAM_STUDI   VARCHAR(30),    KOTA_ASAL       VARCHAR(30)  );    ALTER TABLE MAHASISWA ADD (    CONSTRAINT PK_MAHASISWA   PRIMARY KEY   (NO_MHS)   );    Untuk Table Matakuliah 

(3)

  CREATE TABLE MATAKULIAH (    NO_MK char(10) NOT NULL,    NAMA_MK VARCHAR(30) DEFAULT NULL,    PROGRAM_STUDI VARCHAR(25) DEFAULT NULL,    CONSTRAINT PK_MATAKULIAH PRIMARY KEY  (`NO_MK`)  );    Untuk Table Nilai    CREATE TABLE NILAI (     NO_MHS VARCHAR(25) NOT NULL,     NO_MK VARCHAR(10) NOT NULL,     NILAI NUMERIC(5,2),    CONSTRAINT FK_NILAI_MAHASISWA FOREIGN KEY (NO_MHS) REFERENCES MAHASISWA (NO_MHS),    CONSTRAINT FK_NILAI_MATAKULIAH FOREIGN KEY (NO_MK) REFERENCES MATAKULIAH (NO_MK)  )   

Note : Saya sengaja untuk membuat script SQL dengan pola yang berbeda , hal ini bertujuan untuk  memberi infomasi kepada pembaca setia blog saya   hoho GR, bahwa sesungguhnya kemerdekaan itu  adalah hak segala bangsa(lah kok malah nyambung ke UUD), haha maksudnya sesungguhnya ada  berbagai macam cara untuk membuat script dengan bahasa SQL,Cmiiiw ☺    Oke berikut adalah gambaran dari ERD (Entity Relationship Diagramnya) :    Oh ya gambar ERD‐nya saya buat dengan menggunakan Program TOAD for Oracle, tools favourite saya  ketika sedang belajar Oracle ☺    Oke sekarang masukkan datanya sebagai berikut :         

(4)

  Data Tabel Mahasiswa :    Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/11055', 'TIFTAZANI KHARA', 'ILMU KOMPUTER', 'JAKARTA');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/10514', 'RIZKA PRATININGRUM', 'KIMIA', 'SURABAYA');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('KU/10514', 'RENDI AJI PRIHATININGSIH', 'PENDIDIKAN DOKTER', 'SIDOARJO');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/11514', 'ANDIKA PRATAMA', 'MATEMATIKA', 'BANJARMASIN');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/11111', 'ARIF PRIHUTOMO', 'ILMU KOMPUTER', 'PURWOREJO');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/10935', 'MIZAN RIZQIA', 'ILMU KOMPUTER', 'BOGOR');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('EPA/9851', 'HERU KALIANDRA', 'ILMU KOMPUTER', 'PALANGKARAYA');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('DPA/9851', 'HERA ANANTA', 'KOMSI', 'JAKARTA');  Insert into MAHASISWA     (NO_MHS, NAMA_MAHASISWA, PROGRAM_STUDI, KOTA_ASAL)   Values     ('PA/9851', 'RIZKI ANANTA', 'FISIKA', NULL);  COMMIT;   

Oke, sebenarnya kalo di Oracle sih kalian bisa pake bahasa PL/SQL (Procedural Language/SQL), jadi  cukup dimulai dengan Begin...dan diakhiri dengan End: ditambah dengan tanda”/” dipaling akhir , jadi  lebih fleksibel soalnya tinggal meng‐execute sekali aja, gak usah berkali‐kali. Oh ya hampir lupa,  perintah Commit ditujukan supaya perintah diatas menjadi bersifat permanen, kalau di MySQL  biasanya otomatis, tetapi kalo di Oracle DEFAULT Autocommit‐nya OFF, jadi supaya datanya bersifat 

(5)

permanen maka harus dikeluarkan perintah COMMIT , namun supaya anda‐anda semua (ca ileh)  menginginkan Autocommitnya bersifat otomatis ,tinggal keluarkan saja perintah SET AUTOCOMMIT  ON di SQL * Plus (Nama program Command Promptnya Oracle), Beresss kan?    Maksudnya begini loh mas, mbak :  Begin  [Syntax diatas dicopy kesini]  End;  /    Beress kan ?    Data Tabel MATAKULIAH :    Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MMS‐100', 'BASIS DATA', 'ILMU KOMPUTER');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MFS‐200', 'MEKANIKA KUANTUM', 'FISIKA');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MKS‐300', 'KIMIA DASAR', 'KIMIA');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MKS‐301', 'KIMIA ORGANIK', 'KIMIA');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MFS‐100', 'FISIKA DASAR', 'FISIKA');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MMS‐101', 'ALGORITMA DAN PEMROGRAMAN', 'ILMU KOMPUTER');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('KU‐100', 'ANATOMI', 'PENDIDIKAN DOKTER');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('KU‐101', 'BAHASA INGGRIS 1', 'PENDIDIKAN DOKTER'); 

(6)

Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MMS‐1031', 'KALKULUS 1', 'MATEMATIKA');  Insert into MATAKULIAH     (NO_MK, NAMA_MK, PROGRAM_STUDI)   Values     ('MMS‐1032', 'KALKULUS 1', 'ILMU KOMPUTER');  COMMIT;    Data Tabel NILAI :    Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/11055', 'MMS‐101', 95);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/10514', 'MKS‐301', 85);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('KU/10514', 'KU‐100', 100);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/10935', 'MMS‐101', 95);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/9851', 'MFS‐200', 75);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/9851', 'MMS‐100', 80);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/10935', 'MMS‐1032', 65);  Insert into NILAI     (NO_MHS, NO_MK, NILAI)   Values     ('PA/10514', 'MMS‐1031', 55);  COMMIT;   

(7)

Oke proses input data selesai, sekarang kita coba dulu ya hasilnya.    Melihat data Tabel Mahasiswa ( Gambar from MySQL)                          Melihat data Tabel Matakuliah (Gambar dari SQL* Plus Oracle)                                                             

(8)

Melihat Data Tabel Nilai (Gambar dari SQL Plus Oracle via Command Prompt Windows)                         

Oke sekarang kita sudah melihat data ketiga tabel tersebut, sekarang kita akan masuk kebagian  pertanyaan mengenai Query SQL.     Tampilkan mahasiswa yang berasal dari kota Jakarta    Jawab :     Select * from Mahasiswa Where KOTA_ASAL= 'JAKARTA' ;      ‐ Tampilkan Nomor dan Nama Mahasiswa Ilmu Komputer yang berasal dari kota Purworejo    Jawab :   

Select No_Mhs,Nama_Mahasiswa from MAHASISWA where Program_Studi='ILMU KOMPUTER' AND 

KOTA_ASAL='PURWOREJO' : 

   

(9)

Tampilkan Nomor Mahasiswa Jurusan Kimia atau yang Mengambil Matakuliah denga kode  MMS‐101  Jawab :      Select No_Mhs from mahasiswa where Program_Studi='KIMIA'  Union  Select No_Mhs from Nilai where No_Mk='MMS‐101';     Tampilkan Nomor dan Nama Mahasiswa yang mengambil Matakuliah MMS‐100    Jawab :   

Soal ini bisa menggunakan beberapa sintaks SQL,ada 2 versi SQL saat ini yaitu versi SQL/86 dan  SQL/92. Sintaks SQL/92 Mulai support pada Oracle versi 9i keatas. 

 

Menggunakan Sintaks Join dengan SQL/86:   

Select  Mahasiswa.No_Mhs,  Mahasiswa.Nama_Mahasiswa  from  Mahasiswa,Nilai  where  Mahasiswa.No_Mhs=Nilai.No_Mhs and Nilai.No_Mk='MMS‐100';    Atau Menggunakan Sintaks Natural Join dengan SQL/92:    Select No_Mhs,Nama_Mahasiswa from mahasiswa Natural Join Nilai where No_Mk='MMS‐100';    Atau Menggunakan Sintaks Inner Join dengan menggunakan Keyword ON pada SQL/92:   

Select  Nilai.No_Mhs,  Mahasiswa.Nama_Mahasiswa  from  Mahasiswa  Inner  Join  Nilai  On  Mahasiswa.No_Mhs=Nilai.No_Mhs where Nilai.No_Mk='MMS‐100'; 

   

Atau Menggunakan Sintaks Inner Join dengan menggunakan Keyword USING pada SQL/92:   

Select No_Mhs, Mahasiswa.Nama_Mahasiswa from Mahasiswa Inner Join Nilai USING (No_Mhs)  where Nilai.No_Mk='MMS‐100'; 

(10)

Hasil dari ketiga  Sintaks  SQL diatas akan  mengembalikan hasil yang  sama namun  tentu  saja  menghasilkan performa yang berbeda, Sintaks dengan SQL/92 Relatif lebih cepat dibandingkan Sintaks  dengan SQL/86.      − Tampilkan Nomor Mahasiswa yang mengambil Matakuliah Basis Data    Jawab :    Select Nilai.No_Mhs from nilai Inner Join Matakuliah Using (No_Mk) where Nama_Mk='BASIS DATA';    Atau    Select No_Mhs from Matakuliah Natural Join Nilai where Nama_Mk='BASIS DATA';    Atau    

Select Nilai.No_Mhs from Nilai Inner Join Matakuliah On Nilai.No_Mk= Matakuliah.No_Mk where 

(11)

 

Catatan : Saya menggunakan Fungsi UPPER pada sintaks ke 3, karena nilai Pada Kolom Nama_Mk  bersifat Case Sensitive (Membedakan huruf besar dan kecil), karena pada saat pengisian data ke dalam  tabel, semuanya diisi dengan Huruf Kapital semua, maka kita harus memberi Mengisi nilai dari Kolom  dengan huruf Kapital pula, Fungsi UPPER disini berfungsi untuk merubah semua tulisan didalam tanda  kurung kedalam Huruf Kapital.      − Tampilkan Nomor dan Nama semua mahasiswa yang mengambil paling sedikit satu Matakuliah  dari Program Studi Ilmu Komputer    Jawab :    Sebenarnya saya kurang setuju dengan Jawaban yang diberikan dikelas yang menjawab Sintaks berikut  ini adalah yang benar.    Select No_Mhs,Nama_Mahasiswa from Mahasiswa Natural Join Nilai Natural Join Matakuliah Where  Matakuliah.Program_Studi='ILMU KOMPUTER';    Sintaks diatas akan mengembalikan hasil sebagai berikut : 

Perlu diperhatikan kalau kita menggunakan sintaks diatas di Oracle, maka akan mengembalikan  error,mengapa? Karena pada intinya Natural Join adalah Operasi biner (menggabungkan dua tabel 

(12)

atau lebih) yang mengizinkan kita untuk mengkombinasikan beberapa seleksi/pemilihan tertentu  terhadap hasil dari Cartesian Product kedalam  satu operasi saja. Nah Operasi ini akan memerhatikan  semua kolom yang memiliki Nama yang sama pada masing2 Tabel,sehingga hasil dari Natural Join ini  tidak akan mengembalikan dua (atau lebih) kolom dengan nama yang sama. 

 

Pada sintaks diatas pada klausa where, terdapat Sintaks Matakuliah.Program_Studi , Kita tidak  diperkenankan  menuliskan  Matakuliah  disini, karena Oracle  akan  mendeteksi  secara  otomatis  darimana kolom itu berasal(ini sesuai dengan prinsip Natural Join, yang akan menyeleksi nama‐nama  kolom yang memiliki kesamaan pada beberapa relasi tabel). 

 

Jika kita memaksa untuk menggunakan sintaks diatas maka akan menghasilkan error sebagaimana  pada gambar berikut :    Maka sintaks yang tepat (pada Database Oracle) adalah dengan mengabaikan darimana Nama Kolom  tersebut berasal, sehingga sintaksnya adalah sebagai berikut:    Select No_Mhs,Nama_Mahasiswa from Mahasiswa Natural Join Nilai Natural Join Matakuliah Where  Program_Studi='ILMU KOMPUTER';    dan hasil dari sintaks diatas sama persis dengan sintaks sebelumnya (pada MySQL).     

Namun menurut saya ada hal lain yang perlu dicermati, yaitu bahwa sintaks diatas adalah hanya  menganggap bahwa Mahasiswa yang mengambil Matakuliah dari program studi Ilmu Komputer,  hanyalah mahasiswa yang berasal dari Program Studi Ilmu Komputer saja. Padahal pada kenyataannya  ada Mahasiswa selain dari Program Studi lain semisal Matematika, yang mengambil matakuliah dari  program  studi  Ilmu  Komputer,  sebagai  contoh  (di  kampus  saya)  Matakuliah  Algoritma  dan  Pemrograman. 

 

Oleh karena itu, menurut saya sintaks diatas kurang tepat untuk diimplementasikan pada soal,  sehingga sintaks yang tepat adalah yang menampilkan Nomor dan Nama Mahasiswa yang mengambil  Matakuliah dari Program Studi Ilmu Komputer, meskipun Mahasiswa yang bersanggkutan bukan  berasal dari Program Studi Ilmu Komputer. 

(13)

Sehingga sintaks yang tepat adalah sebagai berikut :    Select No_Mhs, Mahasiswa.Nama_Mahasiswa from Mahasiswa Inner Join Nilai Using(No_Mhs) Inner  Join Matakuliah Using (No_Mk) Where Matakuliah.Program_Studi='ILMU KOMPUTER';      Hasil diatas menampilkan Mahasiswa bernama Rizki Ananta dengan Nomor Mahasiswa PA/9851, hasil  ini adalah tepat karena jika diihat pada data pada Table Nilai(silahkan lihat gambar sebelum‐ sebelumnya yang menamplikan data pada Table Nilai) Mahasiswa dengan Nomor Mahasiswa PA/9851  , telah mengambil Matakuliah dengan kode MMS‐100 (Matakuliah Basis Data), yang mana Matakuliah  tersebut berasal dari Program Studi Ilmu Komputer. 

 

Tampilkan Nomor dan semua Mahasiswa   yang kota asalnya sama dengan kota asal dari 

Mahasiswa dengan Nomor Mahasiswa DPA/9851   

Jawab :   

Select No_Mhs, Nama_Mahasiswa from Mahasiswa Where Kota_Asal = (Select Kota_Asal from 

Mahasiswa where No_Mhs='DPA/9851');   

 

Hitunglah banyaknya Matakuliah yang sudah diambil oleh Mahasiswa Bernama Rizki Ananta 

dan Nilainya Tidak Kurang dari 80   

Jawab :   

Select Count(Matakuliah.Nama_Mk) as “Jumlah kuliah yang diambil” from MATAKULIAH JOIN NILAI 

USING  (No_mk)  JOIN  MAHASISWA  USING(No_Mhs)  where  Nama_Mahasiswa  (Select 

Nama_Mahasiswa from Mahasiswa Inner Join Nilai USING (No_Mhs) where NAMA_Mahasiswa='RIZKI  ANANTA' AND NILAI >=80); 

(14)

   Buatah View yang hanya berisi Nomor Mahasiswa, Nama Mahasiswa , dan Nilai Rata‐rata, dan  nilai Rata‐rata lebih dari atau sama dengan 80 , diurutkanberdasarkan Nilai Rata‐rata tertinggi.    Jawab :    Create or Replace view V_NILAI_RERATA AS   Select No_Mhs, Mahasiswa.Nama_Mahasiswa , AVG(Nilai.Nilai) AS “Nilai Rata‐rata”  from Mahasiswa Inner join Nilai using (No_Mhs)  Group By No_Mhs,Mahasiswa.Nama_Mahasiswa  Having AVG(Nilai.Nilai) >=80  Order By AVG(Nilai.Nilai) Desc;    dan untuk melihat hasil dari view diatas adalah dengan mengeluarkan sintaks berikut :    Select * From V_NILAI_RERATA; 

Referensi

Dokumen terkait