1
2
KATA PENGANTAR
Di dalam menguasai dasar pemrograman dibutuhkan pemahaman awal di dalam menguasai
algoritma
pemograman
dasar,
algoritma
pemograman
lanjut,
membuat struktur data, menulis program dasar, mengoperasikan aplikasi basis data dan membuat dokumen kode program.
3
UNIT-UNIT KOMPETENSI
TIK yang ada dalam modul komputer ini terdaftar dalam tabel berikut ini:
Kode TIK
Nama TIK
TIK.PR01.016.01
Menjaga Etika
TIK.PR02.001.01
Membuat algoritma pemograman dasar
TIK.PR02.002.01
Membuat algoritma pemograman lanjut
TIK.PR02.003.01
Membuat struktur data
TIK.PR02.005.01
Menulis program dasar
TIK.PR02.020.01
Mengoperasikan aplikasi basis data
TIK.PR02.019.01
Membuat dokumen kode program
4
BAB I ALGORITMA PEMROGRAMAN DAN PENGANTAR C
Pengenalan Permasalahan Etika Permasalahan etika berhubungan dengan penyalahgunaan kegunaan intelligent systems oleh pengguna. Selain itu, privacy juga menjadi masalah utama pada basis pengetahuan (knowledge base). Bab
ini
juga
akan
menjelaskan
secara
umum
mengenai
dasar
teknik
pemrograman bahasa C secara umum dengan sedikit contoh pemakaiannya. Berikut ini digambarkan topik-topik yang akan dibahas pada bab ini :
Tujuan Instruksional Umum 1. Mengenalkan siswa mengenai algoritma pemrograman dan bahasa C secara umum. 2. Membantu siswa dalam belajar menggunakan pemrograman bahasa C dengan baik dan benar.
5
Tujuan Instruksional Khusus 1. Siswa dapat menggunakan contoh pemakaian operator, array , struktur, if..else dan switch serta variabel dll dalam bahasa C secara umum
1.1 Sejarah Singkat Algoritma Pemrograman dan C/C++ Dalam menulis sebuah program di komputer, salah satu elemen yang paling penting adalah bagaiman memecahkan suatu masalah yang sebelumnya telah dipikirkan dengan cepat, praktis dan akurat. Istilah algoritma yang digunakan oleh para pakar komputer di selruh dunia digunakan untuk memcahkan masalah yang dalam implementasi program menggunakan komputer. Algoritma adalah “bahan” sebagai objek sentral dalam sebuah pembelajaran program. Kebanyakan algoritma menggunakan metode yang rumit dalam mengatur perhitungan pada suatu data dimana objek yang dilahirkan berupa struktur data algoritma yang rumit dapat diatasi menggunakan struktur data yang sederhana untuk menyelesaikan algoritma tersebut Berbicara mengenai bahasa C, kita tidak bisa lepas dari pembahasan mengenai sistem operasi UNIX, karena kedua sistem ini dan sebagian besar program yang dijalankan pada UNIX ditulis dengan bahasa C. Namun tidak berarti bahwa C terikat pada UNIX atau sistem-sistem operasi lain, atau komputer jenis tertentu. Pengembangan seiring UNIX/C membuat C menjadi suatu “bahasa pemrograman sistem” karena C dapat dipakai untuk menulis compiler dan sistem operasi, selain untuk membuat berbagai program dalam banyak bidang. Pada tahun 1969, UNIX pertama kali dikembangkan pada DEC PDP-7 di laboratoria Bell yang ada di Murray Hill, New Jersey, USA. Saat itu UNIX ditulis dalam
bahasa
assembly
PDP-7.
Sistem
operasi
ini
diharapkan
menjadi
“programmer friendly” dengan environment yang relatif terbuka. Sedangkan bahasa C dikembangkan oleh Dennis Ritchie pada tahun 1972, juga di laboratoria Bell. Pada tahun 1983, komite ANSI (American National Standars Institute)
dibentuk
dengan
tujuan
pembuatan
ANSI
C
yang
merupakan
standarisasi bahasa C. Bahasa C (seperti bahasa-bahasa lain yang dikembangkan secara individual macam Pascal dan Lisp) berisi perekat yang tidak didapatkan pada bahasa-bahasa yang dikembangkan oleh suatu tim pemrograman besar. Bahasa
C
merupakan
bahasa
low-level
yang
memungkinkan
kita
untuk
menetapkan setiap detil dalam logika algoritma untuk mencapai efisiensi komputer yang maksimum. Namun bahasa C juga merupakan bahasa high-level
6 yang dapat menyembunyikan detail arsitektur komputer sehingga meningkatkan efisiensi pemrograman. Pencipta bahasa high-level (seperti FORTRAN , Pascal, dll). Membuat bahasa yang berorientasi pada persoalan (problem-oriented languages). Sementara itu para peneliti software sistem menciptakan kategori bahasa yang berorientasi pada mesin (machine-oriented languages). Kita mengatakan kategori yang terakhir ini sebagai bahasa dengan level yang lebih rendah. Bahasa C berada satu step di atas bahasa yang berorientasi pada mesin. Bahasa C cukup dekat dengan komputer untuk dapat memberikan kendali yang besar pada anda terhadap detail implementasi pemakaian, namun cukup jauh untuk mengabaikan detail hardware. Karena inilah bahasa C suatu ketika dipandang sebagai bahasa high-level dan pada saat yang lain dilihat sebagai bahasa low-level. Tentu saja semua bahasa pemrograman memiliki kelebihan dan kekurangan. Berikut ini kita akan menyimak lebihan dan kekurangan dari bahasa C Karena berbagai sifatnya yang luar biasa, bahasa C dapat menangani banyak aplikasi antara lain: sains, teknik, dan bisnis. Setelah bahasa C, menyusul apa yang kita kenal dengan bahasa C++. Secara sederhana, bahasa C++ merupakan superset dari bahasa C. bahasa C++ tetap mempertahankan kehebatan bahasa C termasuk kemampuan dalam menangani interface hardware dan software, pemrograman low-levelnya, serta efisiensinya. Namun C++ membawa C ke dunia pemrograman object-oriented (OOP) dan tetap mempertahankan keterpaduan dan efisiensi eksekusi C Bahasa C++ ini menggabungkan bahasa prosedural standard yang telah dikenal oleh sebagian besar pemrogram dan model object-oriented. Dengan teknik ini, kita dapat menggunakannya untuk menghasilkansolusi yang benar-benar object oriented. 1.1.1 Definisi Algoritma Algoritma merupakan pola pikir yang terstruktur yang berisi tahap-tahap penyelesaian suatu masalah, yang nantinya akan diimplementasikan ke dalam suatu bahasa pemrograman. Biasanya dalam program, algoritma digunakan untuk tiga struktur program yaitu struktur urut (sequence structure), struktur keputusan (decision structure) dan struktur perulangan (looping structure).
7 1.2 Kerangka Dasar Program C Untuk mulai mengetik program, tekanlah tombol File dan New. Ketiklah contoh program sederhana berikut ini.
Program itu akan menampilkan output tulisan seperti ini:
Untuk mendapatkan output itu, pilih tombol Run dan Run sekali lagi atau tombol control F9. Ada beberapa hal tentang kerangka program C tersebut yang perlu diketahui. Pertama, program C harus mempunyai fungsi main yang ditulis seperti ini: main () atau int main (). Tubuh program C akan mengikuti fungsi main itu dan dimasukkan diantara tanda kurung { dan }. Dalam contoh di atas tubuh programnya adalah printf(“C itu mudah!\n.”). Kedua, fungsi dan pernyataan di tubuh program C ditutup dengan tanda “;”. Ketiga, program C biasanya punya satu atau lebih File header.file header program di atas adalah stdio.h. file header itu mempunyai banyak kegunaan,
8 antara lain untuk menjalankan proses input/output. Untuk mengikutkan file header itu
para siswa/siswi bisa menulis directive #include<...>. Tabel 1.1
mencatumkan beberapa nama file header yang biasanya diperlukan (tabel itu tidak mencakup semua file header) Keempat, variabel yang dipakai di bahasa C biasanya dideklarasikan (declare atau dinyatakan lebih dulu dengan menyebutkan apakah tipe variabel itu char (karakter/huruf), int (integer/bilangan bulat), dan sebagainya. Tabel 2 adalah daftar tipe variabel selengkapnya. Tabel 1.1 Beberapa File Header
Kelima komentar ditulis dengan diawali tanda /* dan diakhiri tanda */. Perhatikan tulisan /* Problem 1.1 */ di atas. Komentar seperti ini untuk kepentingan para siswa/siswi sendiri, yaitu supaya program kita mudah dipahami. Jika perlu, kita bisa menulis komentar pada setiap baris program kita. Berikut ini adalah contoh lain dari program C. coba pahami kerangkanya dengan melihat fungsi main (), tanda “;” di tiap akhir kalimat, file header, dll.
9
Outputnya akan tampak sebagai berikut:
Tabel 1.2 Tipe Variabel
10 Jika kita perhatikan, program 1.2 di atas memiliki tanda \t dan \n. Tanda \t dipakai untuk memerintah komputer agar memebri jarak dengan tab dalam menempatkan output berikutnya. Lihatlah bahwa di antara tanda koma dan tulisan “mbah” ada jarak yang lebar. Tanda \n dipergunakan untuk pindah ke baris baru. Tanda \t dan \n itu disebut escape squences. Contoh lain escape squence dicantumkan di Tabel 1.3 Selain tanda \t dan \n, kita juga melihat tanda %d (ini disebut format spesification). Tanda %d dipakai untuk menandai letak desimal bilangan. Misalnya dalam kalimat (saya ambil program 1.2 di atas): printf (“Ini tanggal %d \n Jumat Kliwon bulan suro. \n”,i; tanda %d tersebut memerintah komputer supaya mencetak bilangan 13 tepat di belakang kata-kata “Ini tanggal.” Tabel 1.3 Escape Squence
Perhatikan pula bahwa nama variabel i (yang berisi bilangan 13 ditulis sesudah koma pada sisi paling akhir. Variabel di bahasa C selalu case sensitive. Artinya, C membedakan variabel bernama hasil dengan HASIL. Jadi jika kita menyebut nama variabel (misalnya i harus tepat sama dengan nama yang kita tulis saat men-declare (yaitu i bukan I atau yang lainnya). Deklarasi untuk variabel i dan h diletakkan pada bagian atas, yaitu sebagai berikut: Int i=13; Float h=12000.78;
11 Tabel 1.4 Format Specification
Para siswa/siswi mungkin penasaran dengan istilah printf(..).apa guna printf() itu? Printf() disebut juga fungsi, atau lengkapnya library functions. C tidak memberi banyak
perintah
menyediakan
(command)
kumpulan
seperti
(library)
FORTRAN
fungsi-fungsi
atau untuk
BASIC,
melainkan
mencetak
output,
menerima pesan dari keyboard, dll. Fungsi printf() merupakan salah satu fungsi dasar yang penting di dalam bahasa C yang berguna untuk menulis output. Tabel 5 menyajikan daftar beberapa fungsi dan header yang disediakan oleh bahasa C. Tabel 1.5 Fungsi
12
Daftar tersebut belum mencakup semua fungsi, tetapi nanti para siswa/siswi akan melihat fungsi-fungsi yang lainnya.
1.3 Operator Jika kita ingin menetapkan nilai suatu variabel, selain memerlukan nama variabel itu, kita juga memerlukan operator tertentu yang disebut dengan assignment operators . Misalnya, tanda “=” pada deklarasi variabel int i=13; adalah operator. C memiliki cara penulisan operator yang unik. Tabel 6 menyajikan daftar berbagai operator yang bisa dipakai di dalam membuat program.
13 Tabel 1.6 Operator
Sampai tahap ini para siswa/siswi sudah belajar tentang kerangka program C, deklarasi variabel, operator, fungsi, dll. Ini sangat penting. Sebagai latihan ,
14 cobalah identfikasikan mana yang tergolong deklarasi, fungsi, operator, dsb. Dari setiap contoh program yang ada di bagian-bagian selanjutnya.
1.4 Array Pada waktu kita membuat program yang memerlukan deret (urutan) atau indeks, kita memerlukan array. Array ini terutama diperlukan jika indeks kita lebih dari sepuluh. Misalnya pada saat mengurutkan produksi harian selama setahun. Berikut ini adalah contoh pemakaian array bilangan bulat yang sederhana.
/* Problem 1.3 */
#include <stdio.h> main ( ) { int i=1; int x[15]; x [i]=25; printf (“Urutan ke %d dari array berisi angka %d”,i+1,x[i]; } Output dari program itu adalah kalimat seperti ini:
Indeks array dimulai dari , bukan 1. jadi indeks array program di atas dimulai dari x[0] , bukan x[1]. Perhatikan pula bahwa kita menulis array dengan memakai tanda kurung [ ], seperti misalnya x[15].
15 Kita bisa menempatkan nilai-nilai tertentu dalam array, kemudian menunjuk urutan arraynya untuk memakai nilai-nilai tersebut dalam hitungan dengan vektor. Program berikut ini memberi contoh bagaimana memakainya:
/*Program 1.4 */ #include <stdio.h> int main ( ) { Int Berapa [2], /*vektor bilangan*/ Jumlah ; /*jumlah bilangan*/ Berapa [0]= 10; Berapa [1]= 15; Berapa [2]= 25;
Jumlah = berapa []+berapa [1] + berapa [2]; Printf (“Jumlahnya = %d\n”, jumlah); } Lihatlah bahwa di sini tidak langsung memakai nilai 1, 15, dan 25, melainkan memakai array berapa [0]...dst. output program itu adalah:
16 Selain untuk bilangan, array juga bisa dipakai untuk huruf atau string. Dua program (program 1.5 dan program 1.6 mencontohkan pemakaian array untuk string.
/*Program 1.5 */
#include <stdio.h> int main ( ) { Char mbah [ ] = “Ketemu lagi mbah”; printf (“%s\n”,mbah); } Nilai variabel mbah dalam baris printf(“%s\n,mbah); adalah “ketemu lagi mbah”. Oleh sebab itu output program itu adalah:
Program 1.6 berikut ini juga memberi output yang sama, hanya saja isi array mbah[] dalam program 1.5 dan program 1.6 berbeda. Perhatikan bahwa di kedua program di atas untuk mencetak string dipakai %s, bukan %d (%d hanya untuk bilangan – lihat Tabel 1.4.)
17 /*Program1.6*/ #include<stdio.h> int main ( ) { char mbah [] = {‘m’,’’b’,’a’,’h’,’\’,}; printf (“Ketemu lagi %s.\n”, mbah); } Program 1.6 itu berisi tanda \0 (artinya ASCII Null. Tanda itu berguna untuk menetapkan akhir string. Dalam pengolahan
array string di atas kita telah belajar bagaimana mengolah
penampilan string secara sederhana. Ada beberapa fungsi library yang bisa dipakai untuk mengolah huruf dan string. Berikut ini fungsi-fungsi tersebut (sebagai tambahan tabel 1.5):
/* Program 1.7 */
#include<stdio.h> #include<string.h>/*jangan lupa pakai header ini*/ Int main ( ) { Char nama [30]; /*declare array yang bisa menampung 3 karakter*/ Strcpy(nama,”Mister”); / *meng-copy tiap-tiap karakter dalam ‘mxster’lalu menyimpannya di memory mulai
18 pada address nama’ dan menambah karakter null*/ Strcat (nama,”Paimo”; / *menambah semua karakter dalam ‘Paimo’ ke ‘Mister’*/ Puts (nama); } Output program itu adalah:
Array yang dipakai di atas, semuanya adalah array satu dimensi. Ada pula array dua dimensi yang bisa ditulis seperti x[][]. Program berikut ini berisi array dua dimensi. /*Program 1.8*/
#include <stdio.h> main ( ) { int x=1, y=5; int nilai [15] [15]; nilai [x] [y] =350; printf (“nilai matrik baris %d kolom % adalah%d”,y,x,nilai [x] [y]; } Output program itu adalah:
19
Perhatikan bahwa dalam program itu array ditulis nilai [x] [y], bukan nilai [x,y]. Jika kita terbiasa membuat program dengan bahasa BASIC atau Fortran maka hal itu mungkin agak membingungkan kita.
1.5 Struktur Struktur mengumpulkan data yang memiliki bermacam-macam tipe ke dalam satu kelompok. Sebagai contoh, informasi tentang karyawan bisa disimpan dalam struktur seperti ini:
Struct karyawan { char nama [2]; double no_karyawan; double no_KTP; char pangkat [1]; float gaji_tahunan; }; Dengan struktur itu berti kita mendefinisikan tipe data baru karyawan serta menentukan item (anggota data yang dimiliki variabel karyawan. Setelah struktur kita tentukan, kita bisa memakainya dalam pemrograman cukup dengan menyebut struct karyawan Berikut ini adalah contoh program yang memakai struktur.
20 /*program 1.9*/
#include <stdio.h> #include <string.h> Struct rekening {
int nomer;
/*inilah deklarasi atau penentuan
char nama [15];
struktur rekening*/
long jumlah; } main ( ) { struct rekening rek; /* Inilah cara memakai struktur */ strcpy (rek.nama,”Persediaan 1’; rek.nomer=21; rek.jumlah = 4000000; printf (“%d %s\t Rp %ld\n”,rek.nomer,rek.nama,rek.jumlah); } Output program di atas adalah:
21 Struktur juga bisa dinyatakan sebagai array. Untuk membuat deklarasi tipe data tertentu, dapat dilakukan dengan meletakkan dimensi array di belakang nama variabel struktur. Berikut ini adalah contoh programnya:
/* program 1.1*/ /*array struktur dan cara memakai typedef*/ #include <stdio.h>
typedef struct /* mendefinisikan struktur*/ { int noID;
/* inilah*/
char nama [2];
/* isi*/
long jumlah ;
/* strukturnya*/
} gaji;
/* typedef memberi nama GAJI pada struktur itu*/
gaji karyawan [1];
/*struktur itu berupa array yang berisi 10 karyawan.*/
int main ( )
{ karyawan [1].noID = 201; strcpy (karyawan [1].nama,”Wagino”; karyawan [1].jumlah = 400000;
printf (“%d %s %ld”,karyawan [1].noID,karyawan [1].nama,\ karyawan [1].jumlah); }
Lihatlah bahwa pada fungsi printf di atas ada tanda \. Tanda \ ini untuk menyatakan bahwa barisnya belum selesai (karena terlalu panjang)
22 1.6 If......Else dan Switch If......Else dan Switch sering disebut sebagai pernyataan kondisional karena dipergunakan untuk menunjukkan kondisi di mana arus program harus bercabang. Contoh program yang memakai if...else tampak seperti berikut ini. /* program 1.11 */ /* contoh pemakaian if dan fungsi scanf*/
#include <stdio.h>
int main ( ) /*deteksi input*/
{ int x; printf (“1. Mau ke mana?\n”; printf (“2. Makan apa?\n”); printf (“ pilih 1 atau 2 ?\n”); scanf (“%d”,&x); if (x==1)
/*lihat kita memakai & untuk menunjuk address x */
/* lihat operator yang dipakai adalah ==*/ Printf(“mau ke yogya”);
if (x==2) Printf (“Nasi gudeg “); else Printf (“anda sedang bingung “); return ; }
Dalam contoh program di atas pernyataan di dalam tanda kurung ( ) – misalnya if (x==1) –- akan diteliti. Jika hasilnya TRUE (non zero, maka tulisan “mau ke yogya” akan dicetak .
23
pernyataan scanf ( ) di program itu dipakai untuk menerima input dari keyboard. Program tersebut akan menunjukkan pada bahasa C di mana input itu disimpan (yaitu di address &x). Konsep pemberian address (dan bukan langsung nilai x ini nanti akan kita bahas lagi di sub-bab tentang pointer. Berikut ini adalah contoh program untuk menghitung gaji karyawan. /* program 1.12 */ /* contoh memakai sscanf , get, dan if * /
#include <stdio.h> int main ( ) /*menghitung gaji karyawan*/ { int no; float jam, tarip, lembur, gaji; char buf[130]; /* array buffer untuk menyimpan array input sementara*/ tarip = 1000; printf (“nomer karyawan = “; gets (buf) ; /* cara memakai fungsi gets untuk memesan buffer*/ scanf (buf,”%d”,&jam); Lembur = jam -35;
24 printf (“jumlah jam lembur = %2.2f\n”, lembur); if (lembur >=0) { /* tanda {menunjukkan awal group instruksi program */ Gaji = 1.5 * tarip * lembur + tarip *35; printf (“jumlah gaji karyawan %d adalah Rp 6.2 % f\n”,No,gaji); } /* tanda } menunjukkan awal group instruksi program */ else { Gaji = tarip * 35; Printf (“jumlah gaji karyawan %d adalah Rp %f\n”, no , gaji; } return 0; }
Switch memiliki fungsi yang sama seperti if....else , yaitu untuk membuat pernyataan kondisional. Bila dalam program tersebut kondisionalnya banyak maka penggunaan switch akan lebih efisien . berikut ini adalah contoh programnya. /* program 1.13*/ /* contoh pemakaian switch , getch dan getche # include /* untuk memanggil DOS console I/O routines */ # include <stdio.h>
int main ( ) {
25 char c; printf (“Pilihan Menu Hari Ini.\n”); printf (“-------------------------.\n”); printf (“Pilihan Menu Hari Ini.\n”); printf (“1: Sate Kambing\n”); printf (“2: Ayam Bakar\n”); printf (“3: Bandeng Presto\n”); printf (“4: Rendang Sapi\n”); printf (“1: Pilihlah menu dengan menekan 1, 2, 3, atau 4\n\n”); c = getch ( ); /* beginilah cara memakai getch */ switch (c) { case ‘1’: printf (“Tak ada. Kambingnya lari!\n”); break; case ‘2’: printf (“Tak ada. Telurnya belum\menetas\n”); break; case ‘3’: printf (“Tak ada. Bandengnya dimakan \ kucing\n”); break; case ‘1’: printf (“Habis. Saya makan sendiri!\n”); break; default:printf (“wah, anda pasti pecinta soto kodok \n”); } return 0; } Setiap pernyataan case harus disambung dengan break supaya arus program langsung melompat ke akhir program sesudah kita menekan tombol input.
26 Misalnya jika sesudah case ‘1’ kita tidak membuat break, maka jika kita menekan tombol “1” output yang muncul seperti ini:
Tentu saja bukan output seperti itu yang kita inginkan. Fungsi getch () di atas dipakai untuk membaca input dari keyboard. Dalam contoh tersebut input akan dimasukkan sebagai nilai c (ini nama variabel – karakter). 1.7 Loop (Putaran) Loop artinya putaran. Untuk membuat arus putaran kita bisa memakai fungsi for, while, dan do....while. FOR Jika kita memakai for, kita harus menetapkan dulu jumlah putarannya. Pernyataan for bisa ditulis seperti ini: for (i=1; i<=th; i++). Supaya bisa jalan, kita harus menetapkan nilai th lebih dulu sebagai jumlah putaran. Sebagaimana kita tahu bahwa i++ adalah inkremen yang artinya sama dengan i=i+!. Sebagai contoh lihat program berikut yang dipakai untuk menghitung program depresiasi garis lurus: /* program 1.14*/ /* contoh FOR .... dan menghitung depr.*/ #include <stdio.h> int main ( )
27 { int th, i; long residu, depr, akm, harga; harga = 100000; /*data yang perlu dimasukkan ; 1.harga*/ th=10; /*2. tahun*/ residu = 20000; /*3. nilai residu*/ depr = (harga – residu)/th; /*rumus depresiasi garis lurus*/ akm = 0; printf (“Tabel Depresiasi Garis Lurus\n”): printf (“-----------------------------------------------------------\n”); for (i=1; i<=th; i++) /*notasi i++ berarti i=i+1*/ { akm += depr; /*rumus akumulasi depresiasi */ printf(“th: %d\t dpr.: %ld\t akm_dpr: \%ld\n”,i,depr,akm); } } WHILE Jika kita membuat putaran dengan while, kita perlu menentukan syarat kapan putaran
itu
terus
berlangsung.
Dalam
pernyataan
while
(nil
<=2),
kita
menetapkan bahwa putaran hanya berlangsung jika nilai nil kurang atau sama dengan 2. ini berbeda dengan for yang mewajibkan kita menentukan jumlah putarannya. Inilah contoh program yang mempergunakan while untuk membuat tabel akar bilangan: /* program 1.15*/ #include <stdio.h>
28 #include <match.h> Int main ( ) { float nil,akar; nil=1; while (nil<=2) { akar=sqrt(nil); printf(“%2.2f\t
%3.3f\n”,nil,akar);
nil +=0.1; } } Program itu akan menampilkan output tulisan seperti ini:
Berikut ini adalah contoh program dengan while untuk membuat tabel angsuran.
/* program 1.16*/
29 /* cara memakai WHILE dan menghitung tabel angsuran */ #include <stdio.h> #include<math.h> int main () { int i,th; float pokok, tb, nt, bunga, angsuran, sisa, ta; th =10; /*data yang dimasukkan: 1.tahun*/
`
pokok = 20000000;
/*2.pokok bunga*/
tb = 0.20;
/*3. tarip bunga*/
nt=pow ((1+tb),(-1*th)); angsuran = pokok / ((1-nt)/tb);
/*rumus angsuran*/
i=1; ta =0; Sisa=0; printf (“Tabel angsuran hutang \n”); printf (“--------------------------------------- \n”); printf (“Pokok pinjaman :%9.2f\n”,pokok); printf (“Tingkat bunga:%9.2f\n”,tb); printf (“Angsuran/th.:%9.2f\n”,angsuran); while (i<=10) { sisa = pokok – ta;
/* rumus sisa hutang*/
bunga = tb * sisa;
/* rumus bunga*/
30 ta += (angsuran – bunga);
/* rumus pengurang pokok hutang*/
printf (“th:%d bunga: %9.2 f angs.: %9.2f\sisa:%9.2f\n”,i, bunga, angsuran, sisa); i+=1; } } Program tersebut akan menghasilkan output seperti berikut:
DO WHILE Fungsi Do while sebetulnya sama dengan while. Bedanya, jika dengan while syarat putaran diletakkan di awal loop (putaran), maka dengan do while syarat putaran diletakkan di akhir putaran. Contoh program yang dipakai untuk membuat tabel nilai tunai (present value) berikut ini memakai do while. /*Program 1.17*/ /*latihan memakai DO...WHILE dan membuat tabel present value */ #include <math.h> #include <stdio.h> main ( )
31 { float p1, p2, p3; /*p1,p2,p3=nilai tunai pada tk bunga 0.1,0.2,0.3*/ int n=0; /*jumlah periode, biasanya tahun */ do { n++; /*inkremen n=n+1 */ p1=pow((1.1),(-1*n)); p2=pow((1.2),(-1*n)); p3=pow((1.3),(-1*n)); printf(“%d %7.4f\t %7.4f\t %7.4f\n “,n,p1,p2,p3); } while (n<5); /*syarat putaran diletakkan di akhir loop */
1.8 Goto Fungsi goto bisa dipakai untuk melompat ke baris program tertentu. Ini bisa juga digunakan untuk keluar dari loop (putaran). Karena pemakaian goto tampaknya tidak sistematis, programmer sering mengindari pemakaiannya. Contoh program berikut ini menunjukkan pemakaian goto untuk keluar dari loop do...while. /* PROGRAM 1.18*/ #include <stdio.h> main ( ) { int n; n=0;
32 do { n++; if (n=10) goto bilang; } while (n>0); bilang; printf (“nilai n=10 kan?”): } Sampai tahap ini para siswa/siswi tentu sudah cukup mahir memakai fungsifungsi dasar bahasa C. sudah waktunya kita menginjak tahap yang lebih rumit yakni pemakaian memori dan variabel serta pointer 1.9 Pemakaian Memori Sebagaimana dengan bahasa Assembly, dengan bahasa C para siswa/siswi punya kesempatan yang luas untuk bermain-main dengan memori komputer. Hal ini tentu berbeda dengan bahasa lain seperti BASIC atau Fortran. Pemakaian memori yang baik bisa membuat program menjadi efisien dan dapat bekerja dengan cepat. Paling tidak ada empat area di dalam memori komputer yang perlu kita ketahui saat ini yaitu: 1. code area Di area inilah instruksi komputer berada. Area ini biasanya tidak berubah pada waktu program dijalankan. 2. Data Area Di sinilah tempat data berada. Ada dua macam data area yaitu: - initialized data area - unitialized data area
33 3.
Stack area Stack area biasanya diletakkan paling atas pada memori yang ada. Jika pemakaian stack memori makin besar dia akan mengambil area memori yang lebih rendah. C akan mengatur pemakaian stack dengan sendirinya
4. Heap Area Heap area ada di atas code dan data area. Seperti halnya stack, heap area bisa tumbuh dan memenuhi area yang terletak di atasnya. C tidak mengatur pemakaian heap area. Kita harus memberi tahu C tentang bagaimana pemakaiannya. Fungsi library tertentu membantu kita dalam hal ini. Fungsi itu misalnya: malloc() dan calloc()
1.10 Variabel Ada tiga tipe variabel bahasa C yang perlu diketahui, yaitu: 1. Variabel Automatic 2. Variabel Static 3. Variabel Global Default setiap variabel adalah automatic. Kita bisa membuat deklarasinya seperti ini: auto int i=10; Tetapi biasanya kita tidak perlu melakukannya, karena sudah merupakan default (bahasa C menetapkannya begitu saja). Variabel ini disebut automatic karena area memori selalu tersedia untuk variabel tersebut jika diperlukan. Variabel automatic akan diletakkan dalam suatu blok atau fungsi. Contoh variabel automatic adalah variabel x dalam fungsi kali25 () berikut ini. kali25 (); main () { printf (“10 x 25 =%d”,kali25(10));
34 } kali25(x) int x; { return x*25; } Dalam
contoh
program
itu
setiap
kali25
dipanggil
x,
komputer
akan
mengalokasikan area stack untuk x. Ini punya kelemahan yaitu setiap kali pemanggilan kali25 realokasi memori nilai x akan selalu berubah. Untuk menutup kelemahan ini diciptakanlah jenis variabel static. Deklarasi variabel static adalah: static int i=30; Variabel ini kemudian akan disimpan di area initialized data (bukan area stack). Jelaslah sudah beda pemakaian area initialized data dan stack. Berbeda dengan variabel automatic atau static yang diletakkan dalam blok atau fungsi tertentu, variabel global biasanya diletakkan pada awal program (atau sebut saja super block ). Variabel ini disebut global karena bisa ditunjuk atau dipakai di manapun di dalam program. Variabel j berikut ini adalah contohnya: int j=10; main ( ) { .............tubuh program............ }
1.11 pointer Banyak para siswa/siswi yang menghindari diskusi tentang pointer karena dianggap sulit. Tetapi mitos itu tidaklah benar. Untuk memahami pointer sangatlah mudah jika kita belajar dengan cara yang benar. Pointer justru bisa
35 membuat program berjalan cepat, mudah dan efisien di dalam memanfaatkan memori komputer. Pointer dipakai bahasa C untuk memberikan alamat secara tak langsung. Sebuah pointer menyimpan alamat lokasi memori tertentu. Dua operator diperlukan dengan pointer: operator “*” untuk nama pointer dan operator “&” untuk alamat. Berikut ini adalah contoh deklarasi pointer yang benar: int *nama_pointer1; char *pointer2; float *inipointer3 Setelah pointer dideklarasikan, pointer itu bisa langsung dipakai. Inilah contohnya: /*program 1.19*/ main ( ) { int *nama_pointer; int nilai = 10; nama_pointer = &nilai; /*di sini simbol & menyuruh Turbo C++ memberikan ALAMAT */ /* variabel nilai bukan ISI variabel nilai */ printf (“nilai = %d, *nama_pointer =%d”,nilai, *nama_pointer); } Di program itu pada waktu kita menulis nama_pointer sebagai address nilai. Jadi jelas bahwa: . nama_pointer adalah address (alamat) di mana nilai disimpan . *nama_pointer adalah nilai integernya
36 Cara pemberian alamat nama_pointer di atas seringkali disebut cara pemberian alamat tak langsung. Jadi simbol seperti *ptr1 merupakan referen tak langsung dengan memakai address dimana ptr1 berada. Urutan Ptr2 =&val2; Ptr3 = &val3; Menempatkan alamat val2 dan val3 pada variabel pointer ptr2 dan ptr3. perintah val1 =*ptr2 + *ptr3; menunjuk variabel val2 dan val3 melalui pointer mereka. Dalam contoh ini nilai val1 akan sama dengan nilai yang terdapat pada alamat ptr2 ditambah yang ada di alamat ptr3. Coba pelajarilah contoh program berikut ini /*program 1.20*/ /* contoh pemakaian pointer dan referen tak langsung*/ #include <stdio.h> Main ( ) { Int nil1,nil2,*ptr1; /*semua ditetapkan sebagai integer*/ Nil1 = 1000; /* secara LANGSUNG menetapkan nilai variabel nil1 = 1000 */ Ptr1 = &nil1; /*menetapkan address nil1 ke dalam pointer ptr1. Dengan kata lain, secara TAK LANGSUNG menetapkan nilai *ptr1 dengan memakai address yang diisikan di pointer ptr1*/ nil2 = *ptr1; /*secara LANGSUNG menetapkan nilai variabel nil2 = nilai *ptr1*/ printf (“variable 1= %d\n”,nil1);
37 printf (“variable 2= %d\n”,nil2); printf (“pointer
= %d\n”,ptr1);
} Program tersebut akan memberikan output sebagai berikut:
Pemahaman pointer sangat penting untuk pemrograman database dan array. Pada tingkat pemrograman yang lebih advanced, kita akan banyak menemukan cara pemakaian pointer.
1.12 Keunggulan dan Kelemahan Bahasa C 1.1
Keunggulan bahasa C 1. Bahasa yang terstruktur Bahasa C mencakup semua struktur kendali yang kita harapkan dari sebuah bahasa moderen
saat ini. Bahasa C menyediakan peng-
kompartementalisasi-an kode dan data dengan mengelola scope-nya. Misalnya, bahasa C menyediakan variabel lokal untuk tujuan ini dan panggilan
berdasarkan
nilai
(calls-by-value)
untuk
privasi
data
subroutine. 2. Bahasa yang memiliki struktur yang luwes Semua
array
dalam
bahasa
C
berdimensi
satu.
Pengaturan
multidimensi dibuat dari paduan array-array satu dimensi ini. Array
38 dan struktur(record) dapat dipadukan dengan sembarang cara yang diinginkan untuk menghasilkan organisasi database yang hanya dibatasi oleh kemampuan pemrogram. 3. Berukuran kecil dan berkecepatan tinggi Aturan sintaks dalam bahasa C lebih sedikit dibandingkan dengan yang ada pada banyak bahasa lain. Bahasa C memungkinkan penulisan compiler C berkualitas tinggi yang akan beroperasi hanya dengan memori total 256K. Kode bahasa C yang dihasilkan oleh sebagian besar compiler akan sangat efisien. Paduan tiga faktor bahasa yang berukuran kecil, sistem run-time yang kecil dan kedekatan bahasa ini dengan hardware, memungkinkan bahasa C untuk dijalankan dengan kecepatan yang mendekati bahasa assembly ekivalennya. 4. Efisiensi memori Dengan banyak alasan yang sama, bahasa C yang cenderung cepat juga
cenderung
menggunakan
memori
secara
efisien.
Tidak
tersedianya fungsi-fungsi built-in mengamankan program dari proses pelibatan dukungan fungsi yang tidak dibutuhkan oleh suatu aplikasi. 5. Struktur perintah yang “bebas” Bahasa C mempunyai struktur yang bebas yang memungkinkan kita me-recode fungsi-fungsi yang ada dengan mudah. 6. Dukungan pemrograman modular Bahasa C mendukung apa yang disebut dengan pemrograman modular. Pemrograman ini merupakan konsep kompilasi dan penyambungan (linking) yang terpisah. Pemrograman ini memungkinkan kita untuk meng-compile ulang bagian-bagian program yang telah berubah saja. Cara seperti ini akan sangat bermanfaat ketika kita menangani program-program yang berukuran besar atau berukuran sedang yang dijalankan pada sistem yang lambat. Tanpa dukungan pemrograman modular, waktu yang dibutuhkan untuk pembuatan suatu program bisa cukup lama. 7. Portabilitas Portabilitas
adalah
ukuran
kemudahan
pengkonversian
sebuah
program yang dijalankan pada suatu jenis komputer atau sistem
39 operasi yang lain. Program-program yang ditulis dengan bahasa C merupakan yang paling portabel saat ini. 8. Kemudahan interface Kemudahan interface yang dimaksudkan disini adalah yang terkait dengan interface dengan routine-routine bahasa assembly. Sebagian besar compiler C menyediakan metode pemanggilan routine-routine bahasa
assembly.
pengcompile-an
Bila
hal
ini
dipadukan
dengan
keterpisahan
dan linking, maka C dapat menghasilkan suatu
aplikasi yang membutuhkan pencampuran routine-routine bahasa high-level dan bahasa assembly. 7. Manipulasi bit Dalam
pemrograman sistem
seringkali
dilakukan pemanipulasian
obyek pada level bit. Karena asal mula C yang terkait cukup erat dengan sistem operasi UNIX, bahasa ini banyak menyediakan banyak operator manipulasi bit. 8. Variabel pointer Salah satu kemampuan bahasa yang dibutuhkan oleh sebuah sistem operasi adalah kemampuan meng-address daerah memori tertentu. Kemampuan ini juga menambah kecepatan eksekusi dari sebuah program. Dengan menggunakan pointer, bahasa C dapat memenuhi kebutuhan ini.
1.2
Kelemahan bahasa C 1. Tidak tersedianya pemeriksaan run-time Ketiadaan sarana pemeriksaan run-time ini dapat menyebabkan banyak persoalan aneh yang tak terpantau dan liar. Memang inilah harga yang harus dibayar demi efisiensi dan kecepatan. 2. Bukan merupakan bahasa yang ‘strongly typed’ Sebelum menyimak point ini, baiklah kita kenali terlebih dahulu apa yang dimaksud dengan typing. Typing adalah ukuran keharusan sebuah bahasa dalam menggunakan jenis-jenis variabel. Dalam beberapa bahasa, penunjukkan satu jenis data ke satu jenis data yang lain tidak diperkenankan tanpa melibatkan fungsi konversi (ini untuk mencegah proses pembulatan yang bisa saja terjadi).
40 Meskipun sifat bahasa C yang bukan merupakan bahasa yang ‘strongly typed’ mempunyai keuntungan yang memungkinkan kita untuk melihat data dengan cara
yang
berbeda-beda,
namun
sifat
ini
juga
merugikan.
Fleksibilitas
pemanipulasian data yang menguntungkan data bisa juga menghasilkan efek sampingan merugikan seperti proses pengubahan suatu jenis variabel ke jenis lain yang tidak diharapkan, dan bisa jadi ini tidak disadari dan berada di luar kontrol kita. Para siswa/siswi tentu pernah mendengar bahwa bahasa C adalah suatu bahasa pemrograman yang sangat sulit dikuasai. Kenyataannya sungguh tidaklah demikian. Mungkin yang agak asing bagi kita adalah yang menyangkut sintaks, struktur dan identasi-nya. Mula-mula baiklah kita mencoba mengenali terlebih dahulu mengenali terlebih dahulu mengenai lima komponen dasar dari sebuah program, yaitu: - Program harus berisi informasi dari suatu sumber masukan (input source); - Program harus memutuskan bagaimana suatu input diatur dan disimpan; - Program menggunakan sekumpulan instruksi untuk memanipulasi input. instruksi-instruksi ini dapat dipilah menjadi empat kategori utama: statemen tunggal, statemen bersyarat dan (kondisional) , loop dan subroutine; - Program harus melaporkan hasil manipulasi data; - Program aplikasi yang ditulis dengan baik menggabungkan semua hal penting ini, menyatakannya dengan menggunakan desain modular dan kode dokumentasi sendiri yang baik, serta identitas yang baik.
41
SOAL LATIHAN (Pilihan yang dicetak tebal adalah jawaban yang BENAR!)
1. Dari pilihan berikut ini, yang harus diketahui hal-hal tentang kerangka program dari bahasa C adalah: d. Komentar
a. Fungsi main () b. pernyataan
di
tubuh
program C ditutup dengan
ditulis
dengan
diawali tanda */ dan diakhiri tanda /*
tanda “;” c. Biasanya punya satu atau lebih file header 2. File header yang digunakan untuk
d. iostream.h
parameter routine floating point adalah: a. Alloc.h
5. operator tertentu yang digunakan untuk
menetapkan
nilai
b. float.h
variabel adalah:
c. stdio.h
a. assignment operators
d. iostream.h
b. standard operators
suatu
c. array 3. File header yang digunakan untuk manajemen memori adalah: a. Alloc.h b. float.h c. stdio.h d. iostream.h
d. floating-point 6. proses pengumpulan data yang memiliki bermacam-macam tipe k edalam satu kelompok disebut: a. struktur b. array c. operator
4. File header yang digunakan untuk routine I/O basic di C++ adalah: a. Alloc.h b. float.h c. conio.h
d. fungsi 7. pernyataan
kondisional
dipergunakan menunjukkan
yang untuk
kondisi
di
mana
arus program harus bercabang disebut:
42 a. If..else dan Switch b. If..else c. For..end d. If..then 8. yang diperlukan untuk membuat arus
putaran
(loop)
dalam
bahasa C adalah : a. for b. while c. do...while d. if..else 9. Area di dalam memori komputer yang perlu diketahui yaitu : a. Code Area b. Data Area c. Stack Area d. Heap Area e. Urban Area
9
BAB II BASIS DATA Tujuan Instruksional Umum : 1. Mengenal konsep Basis data 2. Mengenal operasi dalam basis data 3. Mengenal perintah akses basis data Tujuan Instruksional khusus : 1. Programmer memahami konsep dalam basis data 2. Programmer dapat mengakses, menambah, menghapus dan mengubah data dalam basis data Materi yang dibahas dalam bab ini memenuhi : 1. TIK.PR02.021.01 Menerapkan basis data Berikut ini adalah gambaran umum dari materi yang akan dibahas pada bab ini :
10
1.1 Terminologi Berikut ini adalah terminologi yang umum digunakan dalam basis data : •
Basis Data : Kumpulan data yang terorganisir
•
DBMS
(Database
Management
System)
:
Program
komputer yang
menangani basis data •
Query : Cara mengakses basis data
•
Table : Tempat penyimpanan data contoh : Tabel 1.1 : Data Mahasiswa
NIP
Nama
Jurusan
0912457
Budi Santoso
Akuntansi
0958745
Andi Wiryawan
Ekonomi
0987856
Susi Widyaningsih
Sastra
0996545
Karina Putri
Psikologi
•
Record / Tuple : data dalam table
•
Primary Key : himpunan data dalam table yang digunakan untuk membedakan baris. Contoh : pada table diatas NIP dapat dijadikan primary key karena nilainya unik sehingga data-data dalam satu baris tidak ada yang persis sama.
•
Foreign Key : data di sebuah table dimana data tersebut manjadi primary key di table lain.
•
Data
Manipulation
Language
:
bahasa
yang
digunakan
untuk
memasukkan, mengubah dan mengakses data dari/ke basis data. Bahasa yang populer dari DML adalah SQL (Structured Quey Language). •
Data Definition Language : bahasa yang digunakan untuk mendefinisikan table, contoh perintah ddl adalah create, alter, drop, dan lainnya.
1.2
Memanipulasi Data dari Tabel
Pada subbab ini akan dibahas mengenai perintah SQL yang meliputi perintah SELECT, INSERT, UPDATE dan DELETE.
11 1. SELECT Perintah ini digunakan untuk memperoleh nol atau lebih baris dari satu atau lebih table di basis data. Umumnya keyword yang menyertai perintah SELECT adalah :
FROM Keyword untuk memberitahukan asal table yang datanya diakses juga cara table di gabungkan.
WHERE Keyword
ini
digunakan
untuk
menentukan
baris
yang
akan
ditampilkan berdasarkan kriteria yang tertera di klausa ini. Dalam klausa WHERE dapat digunakan oprator logika. Berikut ini adalah tabel dari operator logika SQL : Tabel 1.2 : Operator Logika dalam SQL
= <> or != (see manual)
Equal Not Equal
<
Less Than
>
Greater Than
<=
Less Than or Equal To
>=
Greater Than or Equal To
GROUP BY Keyword ini digunakan untuk mengkombinasikan baris dengan dengan nilai yang berkaitan.
HAVING Keyword ini digunakan untuk mencari bagian dari kombinasi baris (kombinasi baris dihasilkan ketika query menggunakan keyword GROUP BY atau ketika dalam perintah SELECT mengandung agregasi ) yang dihasilkan.
ORDER BY Keyword ini digunakan untuk menentukan kolom yang digunakan untuk mengurutkan data yang dihasilkan.
Contoh penggunaan query SELECT : Contoh 1 : SELECT * FROM buku WHERE harga > 100.00 ORDER BY judul
12 Query ini akan menghasilkan semua baris dari table buku yang memiliki harga
100.00
dollars.
Baris-baris
yang
dihasilkan
akan
diurutkan
berdasarkan judul buku. Simbol (*) berarti menampilkan semua kolom dari table yang bersangkutan. Contoh 2 : SELECT bk.judul, count(*) AS Pengarang FROM buku AS bk, pengarang_buku AS ba WHERE bk.nomor_buku = ba.nomor_buku GROUP BY bk.judul Perintah ini menggunakan beberapa table yang digabungkan (join). Setiap table menggunakan alias yaitu “bk” dan “ba” dengan tujuan menghindari ambigu ketika melakukan penggabungan table. Selain itu, kolom yang ditampilkan adalah judul buku dan jumlah pengarang yang diberi alias Pengarang. Data dari kolom
Pengarang
diperoleh dengan perintah
agregasi COUNT. Perintah ini akan menampilkan jumlah pengarang untuk setiap buku. Berikut ini adalah contoh hasil keluarannya : Judul
Pengarang
SQL Examples and Guide
3
The Joy of SQL
1
How to use Wikipedia
2
Pitfalls of SQL
1
How SQL Saved my Dog
1
Contoh 3 : Perhatikan table di bawah ini : TabelKaryawan NoKaryawan
Gaji
Bonus
Jabatan
010
75000
15000
Manager
105
65000
15000
Manager
152
60000
15000
Manager
215
60000
12500
Manager
244
50000
12000
Staff
300
45000
10000
Staff
13 335
40000
10000
Staff
400
32000
7500
Entry-Level
441
28000
7500
Entry-Level
SELECT NoKaryawan FROM TabelKaryawan WHERE Gaji >= 50000 Perintah di atas akan menampilkan EmployeeIDNo yang memiliki gaji sama atau melebihi 50000. NoKaryawan -----------------------010 105 152 215 244 Klausa gaji >= 50000 dinamakan kondisi. Kondisi juga bisa diterapkan kepada kolom dengan tipe data teks. SELECT EmployeeIDNo FROM EmployeeStatisicsTable WHERE Jabatan = ‘Manager’ Query ini akan menampilkan semua nomor karyawan dari manager. Yang perlu diperhatikan adalah penulisan string dalam klausa WHERE diawali dan diakhiri dengan symbol (‘). Contoh 4 : Operator AND digunakan untuk menggabungkan kondisi. Baris yang memenuhi semua kondisi yang akan ditampilkan. Sebagai contoh, untuk menampilkan nomor karyawan staf yang memiliki gaji melebihi 40000 dengan query : SELECT NoKaryawan FROM TabelKaryawan WHERE Gaji > 40000 AND Jabatan = ‘Staf’
14 Operator OR digunakan untuk menggabungkan 2 (dua) atau lebih kondisi. Baris yang memenuhi salah satu kondisi atau keduanya yang akan ditampilkan. Sebagai contoh, untuk menampilkan nomor karyawan yang memiliki gaji kurang dari 40000 dan bonus kurang dari 10000 dengan query : SELECT NoKaryawan FROM TabelKaryawan WHERE Gaji < 40000 OR Bonus < 10000 Operator AND dan OR dapat dikombinasikan, contoh : SELECT NoKaryawan FROM TabelKaryawan WHERE Jabatan = ‘Staf’ AND Gaji > 60000 OR Bonus > 12000 Awalnya SQL mencari baris-baris yang memenuhi kondisi gaji > 60000 atau bonus > 12000. Kemudian, dari baris-baris yang dihasilkan dicari lagi yang memenuhi kondisi jabatan = ‘Staf’. SQL akan mencari baris-baris yang
memenuhi
kondisi
OR
terlebih
dahulu
kemudian
baris
yang
memenuhi kondisi AND. Agar kondisi AND dapat diproses terlebih dahulu, gunakan symbol ( dan ) di awal dan di akhir kondisi, contoh : SELECT NoKaryawan FROM TabelKaryawan WHERE Jabatan = ‘Staf’ OR (Gaji > 50000 AND Bonus > 10000) Query di atas akan menampilkan daftar manager atau siapapun yang memiliki gaji > 50000 dan keuntungan > 10000. Contoh 5 : Operator IN, contoh : SELECT NoKaryawan FROM TabelKaryawan WHERE Jabatan IN (‘Manager’, ‘Staf’) Query di atas akan menampilkan data-data nomor karyawan dari manager dan staf.
15 Operator
BETWEEN
dapat
digunakan
untuk
menampilkan
data-data
yang
memenuhi kisaran nilai tertentu, contoh : SELECT NoKaryawan FROM TabelKaryawan WHERE Gaji BETWEEN 30000 AND 50000 Query diatas akan menampilkan baris-baris yang memiliki gaji lebih besar atau sama dengan 30000 tetapi lebih kecil atau sama dengan 50000. Untuk memperoleh data-data yang tidak berada dalam kisaran nilai tertentu, gunakan operator NOT. Contoh : SELECT NoKaryawan FROM TabelKaryawan WHERE Gaji NOT BETWEEN 30000 AND 50000 Opeator NOT IN dapat digunakan untuk mendapatkan baris yang tidak berada dalam daftar IN. Contoh 6 : Perhatikan TabelKaryawan, seandainya kita ingin mendapatkan daftar orang-orang dengan nama belakang yang diawali dengan huruf L, maka query yang bisa digunakan : SELECT NoKaryawan FROM TabelKaryawan WHERE NamaAkhir LIKE ‘L%’ Simbol (%) melambangkan kemungkinan karakter (angka, huruf dan tanda baca) atau sekumpulan karakter yang muncul setelah huruf “L”. Untuk menampilkan nama yang diakhiri dengan huruf “L”, gunakan ‘%L’ atau jika kita ingin huruf “L” berada ditengah nama, dapat digunakan ‘%L%’.
2. Perintah INSERT Perintah ini digunakan untuk memasukkan nol atau lebih baris ke table yang telah tersedia. Contoh :
16 INSERT INTO tabelSaya (kolomA, kolomB, kolomC) values (‘nilaiA’, ‘nilaiB’, ‘nilaiC’) 3. Perintah UPDATE Perintah ini digunakan untuk mengubah nilai sekumpulan baris dari table yang tersedia. Contoh : UPDATE tabelSaya set kolomA = ‘updateA’, kolomB = ‘updateB’ WHERE kolomC = ‘C’ 4. Perintah DELETE Perintah ini digunakan untuk menghapus nol atau lebih baris yang ada dari table. Contoh : DELETE tabelSaya WHERE kolomA = ‘A’
1.3 Menggabungkan Tabel Umumnya semua data yang ingin diperoleh tidak berada dalam 1 (satu) table, untuk memperoleh data-data yang berada dalam table yang berbeda, kita dapat melakukan penggabungan table (join) terlebih dahulu. Perhatikan table-tabel di bawah ini :
PemilikBrgAntik NoPem NmAkhirPem NmAwalPem 01
Jones
Bill
02
Smith
Bob
15
Lawson
Patricia
21
Akins
Jane
50
Fowler
Sam
BarangAntik NoPenj NoPemb Barang 01
50
Tempat Tidur
02
15
Meja
15
02
Kursi
21
50
Cermin
17 50
01
Meja Kecil
21
Lemari
NoPem Pes_Pem
02
21
Meja kopi
02
Meja
15
50
Kursi
02
Meja Kecil
01
15
Kotak Perhiasan
21
Kursi
02
21
Keramik
15
Cermin
21
02
Tempat Buku
50
01
Pot
01
Pesanan
Seandainya kita ingin mendapatkan nama-nama orang yang membeli kursi dengan
cara
menghubungkan
orang-orang
yang
membeli
kursi
di
table
BarangAntiks dengan nama di table PemilikBrgAntik melalui kolom NoPem yang menghubungkan kedua tabel. Contoh query: SELECT FROM
NmAkhirPem,
NmAwalPem
PemilikBrgAntik,
BarangAntiks
WHERE NoPenj = NoPem AND Barang= 'Kursi' Klausa FROM berisi table-tabel yang akan digabungkan. Klausa Barang= 'Kursi' untuk mendapatkan pembeli kursi, sedangkan klausa NoPenj= NoPem merupakan kriteria
penggabungan
yang
menyatakan
bahwa
baris-baris
yang
akan
digabungkan memiliki nilai NoPenj dan NoPem yang sama. Untuk menghilangkan ambiguitas dari nama table- nama kolom dapat digunakan symbol (.). Contoh query : SELECT FROM WHERE
PemilikBrgAntik
.NmAkhirPem,
PemilikBrgAntik
PemilikBrgAntik, BarangAntiks.NoPenj=
.NmAwalPem BarangAntiks
PemilikBrgAntik.NoPem
AND
BarangaAntiks.Barang= 'Kursi'
1.4 Menghilangkan Record yang Sama Seandainya kita ingin mendaftarkan ID dan nama dari orang-orang yang telah menjual barang antik. Tentunya kita menginginkan daftar dimana nama penjual tidak muncul lebih dari sekali (kita tidak perlu tahu jumlah barang antik yang
18 dijualnya hanya fakta bahwa orang tersebut telah menjual barang). Dengan demikian SQL harus menghilangkan baris-baris yang sama, dan hanya perlu mendaftar
setiap
orang
hanya
sekali.
Untuk
melakukan
hal
ini
dengan
menggunakan keyword DISTINCT. Pertama, kita perlu melakukan penggabungan dengan table PemilikBrgAntik untuk
memperoleh
data
nama
awal
dan
nama
akhir,
kemudian
untuk
menghilangkan baris yang sama kita gunakan keyword DISTINCT. Contoh query : SELECT DISTINCT NoPenj, NmAkhirPem, NmAwalPem FROM BarangAntiks, PemilikBrgAntik WHERE NoPenj = NoPem ORDER BY NmAkhirPem, NmAwalPem, NoPem Karena tiap penjual telah berhasil menjual sebuah barang maka kita akan mendapatkan daftar semua pemilik yang terurut berdasarkan nama akhir.
1.5
Subquery
Perhatikan query di bawah ini yang akan menampilkan daftar pemilik yang telah membuat pesanan serta pesanannya. SELECT Own.NmAkhirPem Nama Akhir, Ord.Pes_Pem Barang Pesanan FROM Pesanan ord, PemilikBrgAntik own WHERE Ord.NoPem= own.NoPem AND Ord.Pes_pem in (SELECT Barang FROM BarangAntik); Hasil keluarannya adalah : Nama Akhir
Barang Pesanan
---------
------------
Smith
Meja
Smith
Meja kecil
Akins
Kursi
Lawson
Cermin
19 Ada beberapa hal yang harus diperhatikan dari query di atas :
“Nama Akhir” dan “Barang Pesanan” akan menjadi judul kolom
OWN dan ORD
adalah
alias
dari table di
klausa
FROM.
Dengan
menggunakan symbol (.) maka SQL diberitahukan bahwa kolom NoPem tidak dari table yang sama.
Subquery dijalankan terlebih dahulu dan menghasilkan daftar Barang yang ada di table BarangAntik kemudian table Pesanam dan PemilikBrgAntik digabungkan dan dari table hasil penggabungan dicari nilai Pes_Pem berupa daftar Barang dari table BarangAntik.
1.6
Data Definition Language (DDL)
DDL merupakan perintah untuk memanipulasi tabel. Perintah dari DDL terdiri dari: •
CREATE
: Membuat tabel dalam basis data
•
DROP
: Menghapus tabel dalam basis data
•
ALTER
: Memodifikasi tabel yang telah ada
Contoh perintah CREATE : CREATE TABLE tabelSaya ( kolom1 INT UNSIGNED, kolom2 VARCHAR (50), PRIMARY KEY (kolom1, kolom2) ) kolom1 dan kolom2 adalah nama kolom dari data yang akan disimpan. Int dan Varchar adalah tipe data. Primary Key digunakan untuk menentukan kolom yang menjadi primary key di tabel tersebut. Sebelum membuat tabel, kita harus menentukan nama tabel, data-data (kolom) apa saja yang akan disimpan dalam tabel tersebut beserta tipe data. Misalnya kita hendak menyimpan data transaksi penjualan, maka data-data yang diperlukan adalah nomor transaksi dengan tipe data int, tanggal transaksi dengan tipe data date, besar transaksi dengan tipe data int dan lainnya. Kemudian datadata tersebut disimpan dalam tabel yang dinamakan transaksi.
20
1.7
View
Data-data hasil query dapat disimpan ke sebuah tabel virtual yaitu view, yang selanjutnya dapat digunakan di query yang lain serta diberi nama sesuai dengan nama view. Contoh : CREATE VIEW ANTVIEW AS SELECT Pes_Pem FROM Pesanan; Hasil query “Select Pes_Pem From Pesanan” disimpan ke sebuah view yang bernama ANTVIEW. Perhatikan kode berikut ini : SELECT NoPenj FROM BarangAntik, ANTVIEW WHERE Pes_Pem = Barang; Query di atas akan menampilkan nomor pernjual dari tabel BarangAntik dimana pada tabel ini ada barang yang sama seperti barang yang ada di ANTVIEW. Ketika view diakses maka query dari
view tersebut akan dijalankan kembali.
View dapat digunakan untuk menyederhanakan query.
1.8
Stored Procedure dan Trigger
Kadangkala ada query-query yang sering digunakan dan hanya mengganti nilai yang ada di klausa WHERE. Contoh, untuk mendapatkan data tagihan akhir bulan, query yang digunakan akan sama hanya berbeda di nilai bulan saja. Untuk memenuhi keperluan tersebut maka DBMS menyediakan stored procedures yang adalah sekumpulan query yang disimpan ke sebuah file yang kemudian dapat dipanggil kembali dengan perintah tertentu. Contoh : EXECUTE TopikSama @id_ta = '31005', @login = '1202000745' Perintah diatas akan menjalankan stored procedure yang bernama “TopikSama” dengan masukan nilai id_ta dan login yang telah ditentukan. Jenis lain dari stored procedure adalah trigger. Trigger akan dijalankan oleh DBMS jika kondisi yang ditentukan telah terpenuhi. Contohnya trigger dijalankan ketika jumlah barang_tersedia lebih kecil dari barang_pesanan. Berikut ini contoh trigger dalam basis data SQL Server 2000 :
21
Gambar 2.8.1 Trigger di SQL Server 2000
1.9 Fungsi Aggregasi Fungsi Aggregasi yang umum digunakan adalah : •
SUM() Fungsi untuk menjumlahkan nilai dari baris yang ditentukan
•
AVG() Fungsi untuk mencari rata-rata dari kolom tertentu
•
MAX() Fungsi untuk mencari nilai maksimum dari kolom yang ditentukan
•
MIN() Fungsi untuk mencari nilai minimum dari kolom yang ditentukan
•
COUNT() Menghitung jumlah baris yang memenuhi kondisi tertentu
Berikut ini adalah contoh-contoh query dengan fungsi agregasi : 1. Query untuk mencari jumlah dan rata-rata gaji seluruh karyawan SELECT SUM(Gaji), AVG(Gaji) FROM TabelKaryawan; 2. Query untuk mencari nilai bonus manajer yang paling kecil
22 SELECT MIN(Bonus) FROM TabelKaryawan WHERE Jabatan = 'Manager'; 3. Query untuk menghitung jumlah staf SELECT COUNT(*) FROM TabelKaryawan WHERE Jabatan = 'Staff';
Soal Latihan : 1. Keyword dalam klausa WHERE untuk mengurutkan adalah a. Having b. Order By c. Subquery d. Insert 2. Keyword untuk menghilangkan baris yang sama adalah a. Group By b. Select c. View d. Distinct
Soal Praktek Untuk soal nomor 3 hingga 5, perhatikan tabel dibawah ini : Nama Tabel : DEPT
Nama Tabel : EMP
23
3. Buatlah query yang menampilkan nama, NIP dan gaji yang memiliki gaji diantara 1200 hingga 1400 . 4. Buatlah query yang menampilkan daftar gaji tahunan dari manager 5. Buatlah query untuk menampilkan NIP yang memiliki gaji paling tinggi dan paling rendah. 6. Installah program Ms. Sql Server 2005 dan Oracle 10g.
24
DAFTAR PUSTAKA
1) www.htmlcodetutorial.com 2) www.w3schools.com/html 3) www.javascript.com 4) www.javascript.internet.com 5) www.java.sun.com 6) www.microsoft.com 7) www.php.org 8) www.widodo.com 28) Campbell, Marc. 2005. WEB DESIGN GARAGE. Prentice Hall PTR. 29) Herrington, Jack. 2005. PHP Hacks. O'Reilly. 30) msdn.microsoft.com 31) http://www.geocities.com/SiliconValley/Vista/2207/sql1.html 32) http://www.c-sharpcorner.com/asp/Articles/CachingInASPDPL.asp 33) http://www.webgecko.com/community/articles/ach_bestpract.htm 34) http://platinum.intersystems.com/wld/wd_timesessions.html 35) http://www.tips-tricks.com/automa.asp 36) www.ilmukomputer.com