Modul PostgreSQL
Modul PostgreSQL
1
BAB I
PENGENALAN DAN INSTALASI
2
Tabel merupakan tempat data disimpan. Tabel itu sendiri terdiri atas data rinci untuk
suatu entitas dan terdiri atas row dan column (pada software non-SQL dan software basis
data tertentu sering disebut record dan field).
Tabel itu sendiri jika digambarkan merupakan suatu baris serta kolom sebagai berikut:
mhs_no mhs_nama mhs_tgllahir mhs_alamat
002345 Zaky Yogyakarta, 3-3-2000 Griya Purwa Asri H304
002346 Ahmad Jakarta, 21-12-1978 Kenari II/37 Salemba
002347 Aditya Jakarta, 25-08-1972 Gedongkuning JG IV/16
3
#cd Documents
Lihat isi direktori Documents dengan mengetikkan perintah ls.
#ls
# ./postgresql-8.4.6-1-linux.bin
3. Berikut ini merupakan tampilan awal ketika installer dijalankan, lalu klik ‘Next >’.
4
5. Pilih lokasi penyimpanan data, defaultnya adalah C:\Program
Files\PostgreSQL\8.4\data, lalu klik ‘Next >’.
6. Isikan password, lalu klik ‘Next >’. Catatan : kata kunci ini harus diingat oleh
pengguna.
7. Password tersebut wajib diisi, jika tidak akan muncul pesan kesalahan berikut.
8. Isikan nomor port yang digunakan untuk komunikasi dengan server, defaultnya adalah
port 5432, lalu klik ‘Next >’.
5
9. Pilih locale sesuai defaultnya, centang pl/pgsql untuk menginstal prosedural language
(procedure, function, dan trigger), lalu klik ‘Next >’.
6
12. Hilangkan tanda centang pada ‘Launch Stack Builder’ karena belum diperlukan, lalu
klik ‘Finish’ untuk mengakhiri instalasi.
Secara umum PostgreSQL menyediakan dua interface, yaitu pgAdmin III sebagai Graphical
User Interface (GUI) dan SQL Shell (psql) sebagai Command Line Interface (CLI). Untuk
menggunakan perintah dasar database kita bisa menggunakan keduanya, seperti membuat atau
menghapus database dan query buffer. Untuk lebih jelasnya sebagai berikut :
1.5.1 Membuat database
- Apabila melalui promt psql sebelumnya kita perlu login terlebih dahulu :
1. Berikut ini tampilan awal psql. Tekan ‘Enter’ jika servernya adalah ‘localhost’.
7
2. Isikan nama database, ‘template1’ (default database), lalu tekan ‘Enter’.
3. Tekan ‘Enter’ jika nomor port-nya 5432 lalu tekan ‘Enter’ atau langsung tekan ‘Enter’.
4. Tekan ‘Enter’ isi username-nya ‘postgres’ lalu tekan ‘Enter’ atau langsung tekan
‘Enter’.
5. Isikan password seperti yang telah diisikan pada saat instalasi, lalu tekan ‘Enter’.
8
Kemudian masukkan parameter yang diperlukan seperti nama database, pemilik / username
maupun privileges.
9
Bila ingin mengetahui waktu maka kita menggunakan perintah select
current_timestamp; maka tanggal beserta jam akan ditampilkan secara bersamaan. Berikut
untuk lebih lengkapnya :
select current_timestamp;
timestamp
--------------------------------
2005-12-16 14:07:16.099+07
(1 row)
Berikut query untuk menampilkan tanggal.
select current_date;
date
------------
2005-12-16
(1 row)
Query untuk menampilkan waktu.
select current_time;
time
----------
14:07:18
(1 row)
Mengetik pada query buffer sebenarnya mirip saat kita menlis perintah pada Dos
promt di sistem operasi Windows. Namun dalam psql terdapat (;) untuk mengakhiri
eksekusi, (\p) untuk menampilkan query buffer dan (\r) untuk menghapus query buffer.
Sebagai contoh kita akan menuliskan perintah pembagian, penambahan, pengurangan atau
perkalian. Sebagai berikut :
db_personal=> SELECT
db_personal-> 2+9
db_personal-> ;
?column?
----------
11
(1 row)
*Cttn : untuk melakukan reset query sebelum kita eksekusi atau sebelum mengetikkan
tanda “;” dapat mengetikkan perintah \r
Selain menggunakan SQL Shell, psql ini juga bisa dijalankan menggunakan
Command Promt apabila menggunakan Sistem Operasi Windows. Untuk langkah –
langkahnya sebagai berikut :
10
2. Jalankan perintah ‘psql –U postgres namadatabase’, huruf ‘U’ harus kapital karena psql itu
case sensitive, lalu isikan password.
Jika ingin menjalankan psql melalui Command Prompt pada OS Windows pada
direktori manapun (tidak harus pindah dulu ke C:\Program Files\PostgreSQL\8.4\bin),
maka ikuti langkah-langkah berikut :
1. Klik kanan pada ‘My Computer’ lalu klik ‘Properties’ atau tekan
‘WinKey+PauseBreak’ pada keyboard, kemudian pilih tab ‘Advanced’.
4. Buka lagi Command Prompt, lalu jalankan perintah ‘psql –U postgres sia’ pada direktori
manapun.
12
13
BAB II
PEMBUATAN DAN MANAJEMEN TABEL
14
Struktur query yang digunakan membuat tabel dengan dua kolom:
create table namatabel (namakolom tipedata keterangan, namakolom tipedata
keterangan);
*Cttn : Untuk melihat struktur tabel yang telah dibuat ketikkan perintah \d dan melihat
semua tabel menggunakan \z.
Struktur query yang digunakan menghapus tabel :
drop table namatabel;
2.2.2 Manipulasi Tabel
Dalam pembuatan tabel sebaiknya direncanakan field dan tipe datanya untuk
meminimalisir kesalahan saat tabel telah berisi data. Namun meskipun begitu bukan
berarti tabel tidak bisa diubah dan dihapus. PostgreSQL telah menyediakan utilitas untuk
manipulasi ini dan perlu diingat hal ini bukan manipulasi data melainkan manipulasi
struktur tabelnya.
Struktur query yang digunakan untuk menghapus kolom :
alter table namatabel drop column “namakolom”;
Struktur query yang digunakan untuk menambah kolom:
alter table namatabel add column “namakolom” tipe data;
Struktur query yang digunakan untuk mengubah nama tabel :
alter table namatabelasal rename to namatabelbaru;
Struktur query yang digunakan untuk mengubah nama kolom :
alter table namatable rename column “namakolom asal” to namakolombaru;
Struktur query yang digunakan untuk menambahkan primary key pada tabel :
alter table namatabel add primary key (namakolom);
2.2.3 Temporary Tabel
Temporary tabel sifatnya hanya sementara artinya akan aktif hanya ketika kita
sedang berada atau login ke database namun ketika kita logout dari psql database maka
secara otomatis temporary tabel akan terhapus.
Struktur query yang digunakan membuat tabel dengan dua kolom:
create temporary table namatabel (namakolom tipedata keterangan ,
namakolom tipedata keterangan);
2.2.4 GRANT dan REVOKE
15
Pada saat membuat tabel pada user tertentu maka hanya user tersebut dan user
postgres yang dapat mengakses tabel itu. Namun jika kita ingin agar tabel yang telah
dibuat pada user kita dapat diakses oleh user tertentu atau semua user yang berada pada
PostgreSQL, maka semua itu dapat dilakukan dengan perintah GRANT. Jika ingin
mencabut hak akses kita bisa menggunakan perintah REVOKE.
Berikut struktur penggunaan GRANT untuk semua hak akses :
grant all on table namatabel to namauser;
Berikut struktur penggunaan REVOKE untuk semua hak akses :
revoke all on table namatabel from namauser;
Struktur query untuk menghapus salah satu hak akses, misalnya UPDATE :
revoke update on tabel namatabel from namauser;
Struktur query untuk memberi salah satu hak akses, misalnya DELETE :
grant delete on tabel namatabel to namauser;
2.2.5 Turunan (Inheritance)
INHERITANCE dipergunakan jika ingin membuat sebuah tabel baru yang
berhubungan dengan tabel yang ada, dengan kata lain turunan tabel pertama.
Struktur penggunaan query INHERITANCE :
create temporary table namatabel (namakolom tipedata keterangan ,
namakolom tipedata keterangan) inherits (namatabelinduk);
Contoh :
Terdapat tabel kabupaten, kemudian dibuatlah turunan dari tabel kabupaten untuk
membuat tabel wisata querynya sebagai berikut :
Create table pariwisata (wisata character varying(20)) inherits (kabupaten) ;
Id_kab Nama_kab Desa_kab
1. Madiun Kebonsari
16
BAB III
PERINTAH DASAR SQL
Atau ketika kita lupa memberikan references pada tabel macam barang kita dapat
memberikan query sebagai berikut :
17
Barang
Id_bar Primary key
nama_bar
id_mac Foreign key
Macam_barang
id_mac Primary key
Nama_mac
Keterangan_mac
Jika ingin menampilkan keseluruhan kolom dan keseluruhan baris suatu tabel bisa
mengganti nama_kolom menggunakan tanda asterisk (*).
Contoh :
Atau
19
Apabila ingin menampilkan data dari lebih dari satu tabel, struktur SQL nya
terdapat sedikit perbedaan. Misalnya memakai tabel yang telah dibuat pada praktikum ke-
2 yaitu mahasiswa dan fakultas (Dengan syarat adanya relasi antara kedua tabel
tersebut). Berikut Struktur SQL nya :
select nama_kolom, nama_kolom, nama_kolom, nama_kolom from
nama_tabel_1, nama_tabel_2 where nama_tabel_1.nama_kolom =
nama_tabel_2.nama_kolom;
Contoh :
Perintah SQL diatas akan menampilkan nim mahasiswa, nama mahasiswa, nomor
fakultas, dan nama fakultas. Pada perintah setelah WHERE terdapat 2 nama kolom id_fk,
hal tersebut dimaksudkan penyamaan antara primary key milik dari tabel fakultas dengan
foreign key milik dari tabel mahasiswa.
3.2.3 Menghapus Data
Pada database PostgreSQL, DELETE digunakan untuk menghapus data pada
sebuah tabel. Berikut Struktur yang digunakan :
delete from namatabel ;
20
Arti dari struktur diatas yaitu menghapus semua baris data dari nama tabel yang
tertulis. Namun bisa juga digunakan penghapusan berdasarkan spesifikasi baris atau baris
tertentu saja. Berikut Strukturnya :
delete from nama tabel where namakolom = katakunci;
contoh :
21
3.2.5 Pengurutan Data
Maksud dari pengurutan data dengan perintah ORDER BY adalah jika data
sebuah tabel diurutkan dengan perintah tersebut, maka data tadi akan diurutkan dari atas
ke bawah berdasarkan abjad. Hal ini juga berlaku jika data yang ada dalam bentuk angka.
Berikut struktur perintah SQL untuk pengurutan berdasarkan kolom :
select * from nama_tabel order by nama_kolom;
Contoh : data fakultas diurutkan berdasarkan kolom nama fakultas secara ascending.
Berikut struktur perintah SQL untuk pengurutan berdasarkan kolom secara descending:
select * from nama_tabel order by nama_kolom desc;
Berikut struktur perintah SQL untuk pengurutan berdasarkan beberapa kolom :
select * from nama_tabel order by nama_kolom asc, nama_kolom desc;
Berikut struktur perintah SQL untuk pengurutan berdasarkan nomor kolom :
select * from nama_tabel order by nomor_kolom desc;
*catatan : nomor_kolom dimulai dari kiri, misal terdapat kolom nim, nama. Maka jika ingin
mengurutkan berdasarkan nama kita perlu mengganti nomor_kolom menjadi 2.
22
BAB IV
PENGENALAN OPERATOR DASAR
23
akan bekerja dengan baik dengan menggunakan kata AND dan OR. SQL menggunakan
standar logika boolean three-valued seperti pada tabel berikut ;
Kondisi A Kondisi B A AND B A OR B
True True True True
True False False True
True Null Null True
False False False False
False Null False Null
Null Null Null Null
A NOT A
True False
False True
Null Null
Berikut struktur SQL untuk penampilan data :
select * from namatabel where namakolom = ‘pencarian 1’ and namakolom
= ‘pencarian 2’;
Atau
select * from namatabel where namakolom = ‘pencarian 1’ or namakolom =
‘pencarian 2’;
Contoh :
24
4.2.3 BETWEEN
BETWEEN digunakan untuk menentukan lebar nilai dari nilai terendah dan nilai
tertinggi. Pada BETWEEN menggunakan operator pembanding seperti pada tabel berikut;
Operator Penjelasan
< Kurang dari
> Lebih dari
<= Kurang dari atau sama dengan
>= Lebih dari atau sama dengan
= Sama dengan
< > atau != Tidak sama dengan
Logika operator BETWEEN sebagai berikut :
Nilai a dalam formula “a BETWEEN x AND y” indentik dengan “a >= x AND a <= y“
“a NOT BETWEEN x AND y “ identik dengan “a < x OR a > y”
Berikut Struktur yang digunakan :
select * from nama_tabel where nama_kolom between ‘nilai_awal’ and
‘nilai_akhir’;
25
Contoh : Memunculkan data pegawai dimana tanggal lahirnya antara tanggal 9-9-1999
sampai 1-1-2001.
4.2.5 LIKE
26
LIKE digunakan ketika kita ingin mencari sebuah data yang hanya diwakili oleh
salah satu atau lebih hurufnya saja. Misalkan kita ingin mencari nama yang huruf
awalnya R, maka kita harus menggunakan LIKE. Berikut adalah tabel contoh kasus
penggunaan LIKE :
Kasus Operator
Diawali dengan huruf A LIKE ‘A%’
Diakhiri dengan huruf A LIKE ‘%D’
Huruf A pada posisi ke dua LIKE ‘_A%’
Diawali dengan huruf A dan mengandung LIKE ‘A%I%’
huruf I
Tidak diawali dengan huruf A NOT LIKE ‘A%’
4.2.6 REGEXP
Regular Expression atau Regex, merupakan sebuah teknik atau cara untuk
mencari persamaan - presamaan string atau data dan memanipulasinya. Biasanya lebih
sering digunakan untuk string. Didalam PostgreSQL disimbolkan dengan “~”. Berikut
tabel daftar simbol pada reguler expression :
Pola Penjelasan
[] Ekspresi kurung. cocok dengan satu karakter yang
berada dalam kurung, misal: pattern "a[bcd]i" cocok
dengan string "abi", "aci", dan "adi". Penggunaan range
27
huruf dalam kurung diperbolehkan, misal : pattern "[a-
z]" cocok dengan salah satu karakter diantara string "a"
sampai "z". pattern [0-9] cocok dengan salah satu angka.
jika ingin mencari karakter "-" juga, karakter tersebut
harus diletakkan di depan atau di belakang kelompok,
misal: "[abc-]".
[^ ] Cocok dengan sebuah karakter yang tidak ada dalam
kurung, berlawanan dengan yang diatas. misal: pattern
"[^abc]" cocok dengan satu karakter apa saja kecuali
"a", "b", "c".
? Cocok dengan nol atau satu karakter sebelumnya. misal:
pattern "died?" cocok dengan string "die" dan "died".
+ Cocok dengan satu atau lebih karakter sebelumnya.
misal: "yu+k" cocok dengan "yuk", "yuuk", "yuuuk",
dan seterusnya.
* Cocok dengan nol atau lebih karakter sebelumnya.
misal: pattern "hu*p" cocok dengan string "hp", "hup",
"huup" dan seterusnya.
{x} Cocok dengan karakter sebelumnya sejumlah x karakter.
misal: pattern "[0-9]{3}" cocok dengan bilangan berapa
saja yang berukuran 3 digit.
{x,y} Cocok dengan karakter sebelumnya sejumlah x hingga y
karakter. misal: pattern "[a-z]{3,5}" cocok dengan
semua susunan huruf kecil yang terdiri dari 3 sampai 5
huruf.
! Jika diletakkan di depan pattern, maka berarti "bukan".
misal pattern "!a.u" cocok dengan string apa saja kecuali
string "alu", "anu", "abu", "asu", "aiu", dan seterusnya .
^ Jika diletakkan di depan pattern, akan cocok dengan
awal sebuah string.
() Gruping. digunakan untuk mengelompokkan karakter -
karakter menjadi single unit. string yang cocok dalan
pattern yang berada dalam tanda kurung dapat
digunakan pada operasi berikutnya. semacam variable.
$ Jika diletakkan di belakang pattern, akan cocok dengan
akhir sebuah string.
28
4.2.7 DISTINCT
DISTINCT sering kali diperlukan untuk mengembalikan hasil dari sebuah query
dengan tidak terdapat duplikasi, artinya pada hasil outputnya tidak terjadi kesamaan data
meskipun pada data sesungguhnya sangat mungkin banyak duplikasi.. Hal ini juga
berlaku jika data yang ada dalam bentuk angka. Berikut struktur perintah dasar SQL :
select distinct nama_kolom from nama_tabel;
Contoh :
29
4.2.7 LIMIT
LIMIT dan OFFSET digunakan untuk membatasi jumlah output dari query
berdasarkan jumlah row bukan karena kondisi seperti WHERE. Bisa dikatakan LIMIT
adalah untuk menentukan jumlah baris yang akan ditampilkan yang dihitung dari baris
pertama, sedangkan OFFSET digunakan untuk menghilangkan baris sesuai dengan
jumlah yang diberikan pada OFFSET. Berikut struktur perintah dasar SQL :
select * from nama_tabel limit 2;
Atau
select * from nama_tabel offset 2;
Contoh :
30
4.2.8 UNION, EXCEPT dan INTERSECT
Hasil dari dua buah query dapat dikombinasikan dengan menggunakan UNION,
EXCEPT atau INTERSECT. UNION digunakan untuk menggabungkan hasil dua buah
query menjadi satu kolom. Berikut struktur query untuk UNION :
select nama_kolom from nama_tabel union select nama_kolom from
nama_tabel;
atau
select nama_kolom from nama_tabel union all select nama_kolom from
nama_tabel;
EXCEPT digunakan untuk menampilkan hanya query pertama saja, sedangkan
hasil query kedua dan yang sama dengan hasil query kedua tidak akan ditampilkan.
Berikut struktur query penggunaan EXCEPT :
select nama_kolom from nama_tabel except select nama_kolom from
nama_tabel;
Perintah INTERSECT hanya akan menampilkan seluruh isi dari data
yangmemiliki kesaman diantara hasil kedua query tersebut. Berikut struktur query
penggunaan INTERSECT :
select nama_kolom from nama_tabel except select nama_kolom from
nama_tabel;
Dari uraian materi tentang UNION, EXCEPT dan INTERSECT dapat
digambarkan sebagai berikut :
Gambar diatas menyatakan UNION yaitu gabungan dari kedua buah object.
31
Sedangan gambar kedua menyatakan EXCEPT dimana object yang diambil hanya
yang kuning. Sehingga object yang merah atau object kuning yang sama dengan object
merah tidak diambil.
32
BAB V
NORMALISASI
33
Bentuk ini didapat dari dokumen yang ada dilapangan atau manual dengan atribut
bukan nilai sederhana.
2. First Normal Form (1NF)
Suatu tabel dianggap normal ke satu (1NF) jika :
- Tidak terdapat baris yang bernilai ganda atau duplikat.
- Masing - masing baris bernilai tunggal dan tidak bernilai null.
Langkah – langkah :
- Isikan setiap data bernilai tunggal dan tidak null
- Membuang perulangan data dalam satu baris dengan baris yang lain.
3. Second Normal Form (2NF)
Bentuk normal kedua (2NF) terpenuhi jika :
- Harus telah berbentuk normal pertama (1NF).
- pada sebuah tabel semua atribut yang tidak termasuk dalam primary key memiliki
ketergantungan fungsional pada primary key secara utuh. Suatu atribut dikatakan
ketergantungan fungsional jika harga pada atribut tersebut menentukan harga dari
atribut yang lain. Misalnya, nim → mhs_nama.
Langkah – langkah :
- Jika terdapat atribut yang bergantung terhadap atribut bukan kunci utama dan
merupakan atribut kunci maka pecah menjadi table baru.
4. Third Normal Form (3NF)
Bentuk normal ketiga (3NF) terpenuhi jika :
- Harus telah berbentuk normal kedua (2NF).
- Tidak terdapat anomali – anomali hasil dari ketergantungan transitif.
ketergantungan transitif adalah ketergantungan fungsional antara 2 atau lebih
atribut bukan kunci.
Langkah – langkah :
- Pastikan semua atribut non kunci bergantung penuh terhadap atribut kunci.
- Pisahkan menjadi tabel baru jika menemukan ketergantungan transitif dalam tabel
tersebut.
35
KARTU HASIL STUDI
Nomor Induk : 057 Jurusan : Teknik Informatika
Nama : Neneng Fakultas : SAINTEK
No. Kode Nama Matakuliah Kode Dosen Ruang Nilai
1. 021 Pemrograman D01 B201 A
2. 022 Basis Data D02 B305 C
3. 026 Prak. Digital D05 B307 B
055 Fuad Sistem Informasi SAINTEK 022 Basis Data D02 B304 A
057 Neneng Teknik Informatika SAINTEK 022 Basis data D02 B305 C
057 Neneng Teknik Informatika SAINTEK 026 Prak. Digital D05 B307 B
36
055 Fuad Sistem Informasi SAINTEK
Tabel Dosen
Dos_kode* Dosen
Biasanya ketika mencapai pada tahap Third Normal Form (3NF) sudah
memenuhi syarat untuk digunakan dalam pembuatan aplikasi database. Namun apabila
masih terdapat anomali maka bisa dilanjutkan ke tahap berikutnya sampai tidak terdapat
anomali.
37
NIM* Mah_nama Jurusan Fakultas
055 Fuad Sistem Informasi SAINTEK
057 Neneng Teknik Informatika SAINTEK
Tabel Nilai
NIM (fk) Mat_kode (fk) Ruang Nilai
055 021 B202 B
055 022 B304 A
057 021 B201 A
057 022 B305 C
057 026 B307 B
# Salah satu contoh lagi untuk sistem informasi jual beli barang
38
5 3 biti Malang 6 Rinso 07/09/2011 200 2000 400000 890000
5 3 biti Malang 7 genteng 07/09/2011 130 3000 390000 890000
6 4 rodi nganjuk 9 Paku 09/10/2013 100 100 10000 10000
Transaksi
No_faktur
Jatuh_tempo
Jml
Satuan
Total
kode_supp**
kode_brg**
39
Setiap atribut yang bukan kunci harus bergantung hanya pada atribut kunci (primary
key) secara menyeluruh. Hilangkan juga anomali – anomali yang masih mempunyai
ketergantungan fungsional. Pada tabel supplier terdapat kolom kota, perubahan kota milik
supplier dapat menyebabkan data tidak konsisten sekiranya hanya satu baris yang diubah
sementara seharusnya ada beberapa baris. Relasi tersebut juga terkena anomaly penyisipan
dan penghapusan.
Kota
Kode_kota*
Nama_kota
Supplier Barang
kode_supp* kode_brg*
nama_supp nama_brg
Kode_kota**
Transaksi
No_faktur
Jatuh_tempo
Jml
Satuan
Total
kode_supp**
kode_brg**
40
BAB VI
AGREGASI SQL DAN VIEW
41
Untuk pencarian banyaknya pegawai kita bisa menggunakan query berikut :
select count(*) from pegawai;
hasil : 4
untuk pencarian nilai terbesar berdasarkan ID :
select max(Id_peg) from pegawai;
hasi : 4
untuk pencarian nilai terkecil :
select min(Id_peg) from pegawai;
hasil : 1
untuk pencarian rata-rata :
select avg(Id_peg) from pegawai;
hasil : 2.5000
6.2.2 GROUP BY
Group By merupakan fungsi yang digunakan untuk melakukan pengelompokan
dari perintah SELECT. Group by seringkali diperlukan untuk menjalankan agregate
menjadi sebuah kelompok dari hasil Query. Berikut struktur SQL untuk penampilan data:
select nama_kolom from nama_tabel group by nama_kolom;
Contoh :
Kode_bu Judul_buk Pengarang_bu Penerbit_bu Tahun_bu Resensi_bu Harga_bu
k k k k k k
11 Harry Potter JK Rowling British 2002 Fiksi 50000
12 Sistem Basis Abdul Kadir Andi 2002 Teks 30000
Data
13 Pemrograma Abdul Kadir Andi 2004 Teks 60000
n
- Untuk menampilkan informasi nama pengarang :
Select pengarang_buk from buku group by pengarang_buk;
Hasil :
Pengarang
JK Rowling
Abdul Kadir
42
Pada hasil query terlihat pengarang muncul hanya sekali.
- Untuk menampilkan informasi nama pengarang beserta jumlah buku yang dikarang :
Select pengarang_buk, count(*) from buku group by pengarang_buk;
Hasil :
Pengarang Count(*)
JK Rowling 1
Abdul Kadir 2
6.2.3 HAVING
Pemakaian HAVING terkait dengan GROUP BY, kegunaanya adalah untuk
menentukan kondisi bagi GROUP BY, dimana kelompok yang memenuhi kondisi saja
yang akan di hasilkan.
Berikut Struktur yang digunakan :
Kita akan menggunakan tabel “pesanan”
No Tanggal Order Harga Order Pelanggan
1 2011/11/12 1000 Ratih
43
2 2011/10/23 1600 Anita
3 2011/09/02 700 Ratih
4 2011/09/03 300 Ratih
5 2011/08/30 2000 Teguh
6 2011/10/04 100 Anita
- Sekarang jika kita ingin mencari pelanggan yang memiliki total order kurang dari
2000.
Maka, kita dapat menggunakan statement :
select pelanggan, sum (hargaorder) from pesanan group by pelanggan having
sum (hargaorder) <2000;
Maka, hasilnya :
Pelanggan SUM(HargaOrder)
Anita 1700
6.2.4 CASE
Meskipun SQL bukan merupakan sebuah prosedur bahasa perograman, namun
dalam prosesnya dapat dengan bebas mengontrol data yang kembali dari query. Kata
WHERE menggunakan perbandingan untuk mengontrol pemilihan data, sedangkan CASE
perbandingan dalam bentuk output kolom. Jadi intinya penggunaan CASE akan
membentuk output tersendiri berupa sebuah kolom baru dengan data dari operasi yang di
dalamnya.Struktur didalam select seperti berikut :
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result] END
Berikut contoh query penggunaan case, penentuan umur jika umurnya dibawah
1986-01-01 dianggap dewasa dan lebih dari itu dianggap remaja :
select txt_namadepan, txt_namaakhir, dt_tgllahir, case when dt_tgllahir <
'1986-01-01' then 'dewasa' else 'balita' end as umur from pegawai ;
Hasil :
txt_NamaDepan txt_NamaAkhir dt_TglLahir Umur
Andhie Lala 1960-08-08 Dewasa
Ade Fajar 1986-11-01 Balita
Panuju Sasongko 1970-09-12 Dewasa
44
Dudy Rudianto 1973-12-11 Dewasa
Ana Hidayati 1988-10-01 Balita
6.2.5 VIEW
Views dapat juga disebut tabel bayangan tetapi bukan temporary table, bukan
juga merupakan sebuah tabel yang asli. Suatu view adalah suatu relasi virtual yang tidak
perlu ada database tetapi dapat diproduksi atas permintaan oleh pemakai tertentu, pada
ketika permintaan. Satu lagi kelebihan yang dimiliki oleh view yaitu dapat menyimpan
perintah query, dan dapat mewakili sebuah subset dari tabel asli dan memilih kolom atau
row tertentu dari tabel biasa.
create view nama_tabel_view as query;
Catatan : Query diatas merupakan query untuk menampilkan data menggunakan
query sql select.
Berikut adalah tabel contoh kasus penggunaan VIEW :
Kita akan menggunakan tabel “pesanan”
No Tanggal Order Harga Order Pelanggan
1 2011/11/12 1000 Ratih
2 2011/10/23 1600 Anita
3 2011/09/02 700 Ratih
4 2011/09/03 300 Ratih
5 2011/08/30 2000 Teguh
6 2011/10/04 100 Anita
- Kita akan membuat view dari tabel diatas dengan ketentuan harga dikumpulkan
berdasarkan nama pelanggannya. Sebagai berikut :
create view total_pelanggan as select pelanggan, sum (hargaorder) from pesanan
group by pelanggan;
Untuk melihat hasil kita bisa melakukan query select sebagai berikut :
Select * from total_pelanggan;
Hasil :
Pelanggan SUM(HargaOrder)
Anita 1700
Ratih 2000
45
Teguh 2000
46
BAB VII
SUB QUERY DAN INDEKS
47
Hasil :
NAMA JABATAN
Hendro Teknisi
Dodi Teknisi
- Mencari nama pegawai yang gajinya lebih besar dari pegawai dengan nama Dodi bisa
menggunakan query sebagai berikut :
select nama_peg,gaji_peg from pegawai where gaji_peg > any (select gaji_peg
from pegawai where nama_peg =’Dodi’);
Hasil :
NAMA Gaji
Tika 2000000
Wijaya 3000000
- Mencari nama pegawai yang gajinya lebih besar dari 950000 dan jabatannya bukan
seperti jabatan pak hendro bisa menggunakan query sebagai berikut :
select nama_peg, jabatan_peg, gaji_peg from pegawai where gaji_peg >= 950000
and jabatan_peg <> (select jabatan_peg from pegawai where
nama_peg=’Hendro’);
Hasil :
NAMA JABATAN Gaji
Tika Sekretaris 2000000
Wijaya Kepala 3000000
7.2.2 INDEKS
Indeks disini berguna dalam suatu pencarian nilai atau data dalam database.
Dalam suatu kasus ketika mengakses sebuah tabel biasanya DBMS akan membaca
seluruh tabel baris perbaris hingga selesai. Ketika baris sangat banyak dan hasil dari
query hanya sedikit, maka hal ini sangat tidak efisien. Seperti halnya ketika kita membaca
sebuah buku dan ingin mencari kata atau istilah tertentu dalam buku maka biasanya akan
di cari dengan membuka setiap halaman dari awal sampai akhir. Dengan adanya indeks
buku maka kita cukup dengan membuka indeks, sehingga akan cepat dalam pencarian
kata tersebut. PostgreSQL tidak bisa membuat indeks dengan otomatis, sehingga user
48
dapat membuat indeks tersebut untuk sering kali digunakan kolom, biasanya dalam
clause WHERE. Berikut struktur SQL :
CREATE INDEX nama_index ON nama_tabel (nama kolom);
Contoh :
- Pada tabel pegawai kita berikan index pada kolom gaji untuk query sebagai berikut :
Create index gaji_index on pegawai(gaji_peg);
Hasil :
indeks sebaiknya jangan digunakan pada tabel atau kolom yang sangat jarang atau
tidak pernah diakses. Selain untuk perintah SELECT Indeks juga bermanfaat untuk
UPDATE dan DELETE yang menggunakan kondisi pencarian. Sedangkan Unique index
mirip dengan indeks tetapi lebih digunakan untuk mencegah duplikasi nilai yang terdapat
dalam tabel. Jadi dengan adanya unique index berarti pembaca tidak dapat meng-insert
nilai yang sama dalam sebuah tabel. Berikut struktur SQL nya :
CREATE UNIQUE INDEX nama_index ON nama_tabel (nama kolom);
Untuk menghapus index berikut strukturnya :
DROP INDEX Nama_index;
Contoh :
- Pada tabel pegawai kita berikan index yang bersifat unik pada kolom nama, untuk query
sebagai berikut :
Create unique index unama_index on pegawai(nama_peg);
Hasil :
49
Apabila kita memasukkan dengan nama yang sudah terdapat pada data terdahulu
akan terdapat error.
7.2.3 KOLOM UNIK
Unique berfungsi untuk menjaga agar tidak terjadinya duplikasi nilai (kesamaan
data) dalam sebuah kolom, hal ini dapat ditangani dengan membuat sebuah indeks unik
atau fungsi unik sendiri pada kolom yang dimaksud. Unique ini sering digunakan dalam
pembuatan bukan primary key namun membutuhkan cek dupikasi agar tidak ada yang
sama, karena dalam primary key sudah otomatis mempunyai sifat unik. Berikut Struktur
SQL saat pembuatan tabel baru :
CREATE TABLE nama_tabel (nama_kolom tipe_data unique);
Ketika tabel sudah ada kita bisa menggunakan cara seperti pada BAB. 2 berikut
struktur SQL nya :
ALTER TABLE nama_tabel ADD UNIQUE (nama_kolom);
Untuk menghapus unique berikut caranya :
ALTER TABLE nama_table DROP CONSTRAINT NAMA_CONSTRAIN
50
Contoh :
7.2.4 Check
Check berfungsi untuk melakukan pembatasan nilai masukan dalam sebuah
kolom, sebagai contoh misalkan kita ingin agar kolom gender yang terdiri dari satu
karakter hanya memiliki dua pilihan karakter yaitu M (male) atau F (Fimale) ini dapat
kita seting dengan menggunakan CHECK. Dengan menggunakan CHECK maka sebuah
kolom hanya bisa diisi dengan data yang memenuhi kriteria dalam CHECK. Berikut
query contoh pengunaan check :
db_contoh=> CREATE TABLE pelanggan (
db_contoh(> nama varchar(35),
51
db_contoh(> kode_area CHAR(10) CHECK
(length(trim(kode_area)) = 2),
db_contoh(> umur INTEGER CHECK (umur >= 0),
db_contoh(> gender CHAR(1) CHECK (gender IN ('L', 'P')),
db_contoh(> ttl DATE CHECK (ttl BETWEEN '1998-01-01' AND
CURRENT_DATE),
db_contoh(> CHECK (upper(trim(nama)) != 'nita' OR
db_contoh(> upper(trim(nama)) != 'jeki')
db_contoh(> );
CREATE
7.2.5 Penggunaan TRIM
Suatu ketika pasti akan memiliki data yang di dalamnya terdapat spasi kosong
yang tidak diperlukan, misalnya spasi ganda. Jika ada masalah seperti ini, kita dapat
membersihkan spasi-spasi kosong yang tidak diperlukan menggunakan fungsi TRIM,
RTRIM, dan LTRIM. Ketiga fungsi ini memiliki bentuk penggunaan sebagai berikut :
- RTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kanan
(Right) String.
- LTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri (Left)
String.
- TRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri, kanan,
maupun tengah String
Berikut Struktur SQL nya :
Select trim(nama_kolom) from nama_tabel;
Dalam penggunaannya, fungsi TRIM memiliki tiga opsi. Ketiga opsi ini dapat
digunakan untuk menentukan karakter apa yang akan dihapus dari suatu String. Jadi,
fungsi TRIM juga dapat menghilangkan karakter tertentu (bukan spasi kosong saja) dari
suatu string. Opsinya sebagai berikut :
- LEADING : merupakan opsi untuk menghilangkan karakter terpilih yang ada di
sebelah kiri. Parameter Leading diartikan sebagai sufik dari karakter yang ada.
- TRAILING : merupakan opsi untuk menghilangkan karakter terpilih yang ada di
sebelah kanan String. Parameter Trailing diartikan sebagai sufik dari karakter yang
ada.
- BOTH : merupakan opsi yang dapat menangani parameter Leading maupun Trailing.
Berikut Struktur SQL nya :
Select trim(LEADING ‘karakter, misal : -’ from nama_kolom) from nama_tabel;
52
BAB VIII
FUNGSI dan PL/PGSQL
8.2.2 Fungsi
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan
panjang yang dibungkus menjadi satu dan disimpan dalam database dan kemudian
apabila diperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail.
Ada beberapa konsep yang menarik dari fungsi antara lain:
• Bahasa yang dipakai dapat didefenisikan sendiri dengan tersedianya parameter
LANGUAGE, tanpa harus mengkompilasi ulang PostgreSQL.
• Kita dapat membuat dua buah fungsi dengan nama yang sama namun
parametermasukkannya yang berbeda, baik tipe data maupun jumlahnya.
53
Ada beberapa faktor yang perlu diperhatikan dalam membuat fungsi antara lain:
• Nama Fungsi
• Nomor dari fungsi argument
• Tipe data dari setiap argument
• Tipe dari hasil fungsi
• Fungsi action
• Bahasa yang digunakan oleh fungsi action.
Berikut contoh sederhana pembuatan fungsi SQL untuk perkalian dari tiga inputan :
db_personal=> CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
db_personal-> RETURNS FLOAT
db_personal-> AS 'SELECT ($1 + $2) * $3;'
db_personal-> LANGUAGE 'sql';
CREATE
55
Berikut ini implementasi dari contoh penggunaan fungsi dengan bahasa PL/PGSQL:
db_personal=> CREATE FUNCTION pl_caripegawai (integer)
db_personal-> RETURNS text
db_personal-> AS 'DECLARE hasil TEXT;
db_personal'> BEGIN
db_personal'> SELECT INTO hasil nama as nama_mahasiswa
db_personal'> FROM pegawai
db_personal'> WHERE id = $1;
db_personal'> RETURN hasil;
db_personal'> END;'
db_personal-> LANGUAGE 'plpgsql';
CREATE
56
Contoh berikut menunjukkan query perulangan yang akan menampilkan akumulasi dari
jumlah perulangan :
Create function perulangan (a integer,b integer)
Returns integer
As ‘ declare nilai_awal integer default a;
Hasil integer default 0;
Begin
Loop
End loop;
Return hasil;
End;’
Language ‘plpgsql’;
Hasilnya sebagai berikut :
Select perulangan (1,5);
Perulangan
----------------
15
1 (row)
57
BAB IX
KONEKSI POSTGRESQL PADA JAVA (Netbeans)
58
Adapun listing untuk mengimpor package java.sql adalah sebagai berikut :
Import java.sql.*;
Listing ini dituliskan sebelum Anda menulis kelas.
59
Berikut ini adalah daftar nama-nama driver dari beberapa database server yang sering
digunakan.
Database Server Nama Driver
JDBC-ODBC sun.jdbc.odbc.JdbcOdbcDriver
MySQL com.mysql.jdbc.Driver
PostgreSQL org.postgresql.Driver
Microsoft SQLServer com.microsoft.jdbc.sqlserver.SQLServerDriver
Oracle oracle.jdbc.driver.OracleDriver
IBM DB2 COM.ibm.db2.jdbc.app.DB2Driver
3. Membangun Koneksi
Setelah melakukan pemanggilan terhadap driver JDBC, langkah selanjutnya
adalah membangun koneksi dengan menggunakan interface Connection. Object
Connection yang dibuat untuk membangun koneksi dengan database server tidak
dengan cara membuat object baru dari interface Connection melainkan dari class
DriverManager dengan menggunakan methode getConnection().
Connection koneksi = DriverManager.getConnection(<argumen>);
Untuk menangani error yang mungkin terjadi pada proses melakukan koneksi
dengan database maka ditambahkan try-catch. Exception yang akan dihasilkan pada
proses ini adalah berupa SQLException. Adapun cara penulisan listingnya adalah
sebagai berikut :
try {
... koneksi database
} catch (SQLException sqle){
... penanganan error koneksi
}
Ada beberapa macam argumen yang berbeda dari methode getConnection() yang
dipanggil dari DriverManager, yaitu :
getConnection(String url)
Pada methode diatas hanya memerlukan argumen URL, sedangkan untuk
data user dan password sudah diikutkan secara langsung. Adapun penulisan nilai
sebagai berikut :
60
jdbc:<DBServer>://[Host][:Port]/<namaDB>?<user=User>&<password=Pa
sword>
Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc: postgresql://localhost:3306/Dbase? User = adi & password
= pas”;
Connection koneksi = DriverManager.getConnection(url);
System.out.prinln(“Proses apabila koneksi sukses”);
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}
getConnection(String url, Properties info)
Pada methode ini memerlukan URL dan sebuah object Properties.
Sebelum menggunakan methode ini, Anda harus melakukan import package
berupa java.util.*, ini dikarenakan object Properties terdapat pada package
tersebut. Object Properties berisikan spesifikasi dari setiap parameter database
misalnya user name, password, autocommit, dan sebagainya.
Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc: postgresql://localhost:5432/praktikumdbd”;
Properties prop = new java.util.Properties(); // tidak mengimpor kelas
prop.put(“user”,”NamaUser”);
prop.put(“password”,”datapassword”);
Connection koneksi = DriverManager.getConnection(url, prop);
System.out.prinln(“Proses apabila koneksi sukses”);
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}
getConnection(String url, String user, String password)
Pada methode ini memerlukan argumen berupa URL, user name, dan
password. Methode ini secara langsung mendefinisikan nilai URL, user name
dan password.
Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc: postgresql://localhost:5432/ praktikumdbd”;
String user = “adi”
String password “ternate”
Connection koneksi = DriverManager.getConnection(url, user, password);
System.out.prinln(“Proses apabila koneksi sukses”);
61
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}
Berikut ini adalah daftar penulisan URL dari beberapa database server yang
sering digunakan.
Database Nama URL Contoh penggunaan
Server
JDBC-ODBC jdbc:odbc:<NamaDatabase> jdbc:odbc:Dbase
MySQL jdbc:mysql://<nmHost>:<port>/<n jdbc:mysql://localhost:3306/Dbase
mDB>
PostgreSQL jdbc:postgresql://<nmHost>:<port> jdbc:postgresql://localhost:5432/Dbas
/<nmDB> e
Microsoft jdbc:microsoft:sqlserver://<nmHost jdbc:microsoft:sqlserver://localhost:14
SQLServer >:<port>; 33; DatabaseName=Dbase
DatabaseName=<namaDatabase>
Oracle jdbc:oracle:thin:@<nmHost>:<port jdbc:oracle:thin:@localhost:1521:Dba
>:<nmDB> se
IBM DB2 jdbc:db2:<NamaDatabase> jdbc:db2:Dbase
4. Membuat Statement
JDBC API menyediakan interface yang berfungsi untuk melakukan proses
pengiriman statement SQL yang terdapat pada package java.sql. Statement yang ada
secara umum digunakan terdiri dari berikut :
Statement
Interface ini dibuat oleh methode Connection.createStatement(). Object
Statement digunakan untuk pengiriman statement SQL tanpa parameter serta
Setiap SQL statement yang dieksekusi dikirim secara utuh ke database.
Statement stat = Connection.createStatement();
PreparedStatement
Interface ini dibuat oleh methode Connection.prepareStatement().
Object PreparedStatement digunakan untuk pengiriman statement SQL dengan
atau tanpa parameter. Interface ini memiliki performa lebih baik dibandingkan
dengan interface Statement karena dapat menjalankan beberapa proses dalam
sekali pengiriman perintah SQL, pengiriman selanjutnya hanya parametered
querynta saja.
PreparedStatement stat = Connection.prepareStatement();
62
5. Melakukan Query
Setelah kita memiliki object statement, kita dapat menggunakannya untuk
melakukan pengiriman perintah SQL dan mengeksekusinya. Methode eksekusi yang
digunakan untuk perintah SQL terbagi menjadi dua bagian yaitu untuk perintah
SELECT methode eksekusi yang digunakan adalah executeQery() dengan nilai
kembaliannya adalah ResultSet, dan untuk perintah INSERT, UPDATE, DELETE
methode eksekusi yang digunakan adalah executeUpdate().
Berikut ini adalah contoh melakukan eksekusi perintah SQL dan mengambil
hasilnya (ResultSet) dengan menggunakan perintah SELECT :
String sql = “SELECT kode, nama, alamat, kelas FROM dataSiswa”;
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String kode = set.getString("kode");
String nama = set.getString("nama");
String alamat = set.getString("alamat");
String kelas = set.getString("kelas");
}
Berikut ini adalah contoh melakukan eksekusi perintah SQL dengan
menggunakan perintah DELETE.
String sql = "DELETE FROM data_siswa WHERE kode = “1234”;
PreparedStatement stat = konek.prepareStatement(sql);
stat.executeUpdate();
6. Menutup Koneksi
Penutupan terhadap koneksi database perlu dilakukan agar sumber daya yang
digunakan oleh object Connection dapat digunakan lagi oleh proses atau program
yang lain. Sebelum kita menutup koneksi database, kita perlu melepas object
Statement dengan kode sebagai berikut :
statement.close();
Untuk menutup koneksi dengan database server dapat kita lakukan dengan
kode sebagai berikut :
connection.close();
63
9.2.2 Praktek Langkah-langkah Koneksi database dengan java di Netbeans
Materi kali ini akan sedikit membubuhkan tutorial untuk pengkoneksian dan
penyampaian contohnya. Seperti berikut langkah-langkahnya :
1. buatlah project baru pada netbeans
2. pada project tersebut, klik kanan – properties
3. pilih Libraries pada list Properties
4. add Library
7. add JAR/Folder
8. browse file konektor PostgreSQL
9. ambil file konektor, semisal :postgresql-9.0-801.jdbc4.jar atau versi yang lain.
10. kemudian open
11. Klik OK
12. coba lihat diproject netbeans - Libraries seperti gambar dibawah ini:
64
a. Koneksi
Berikut contoh kelas koneksi :
b. Insert Data
Berikut contoh kode program insert data pada tabel asisten yang berdiri sendiri :
65
c. Update Data
Berikut contoh kode program update data pada tabel asisten yang berdiri sendiri :
66
e. Memunculkan data (Select)
Untuk SQL insert, update, delete menggunakan statement.executeUpdate.
Tapi untuk SQL select menggunakan statement.executeQuery. hasil eksekusi dari
database sebenarnya disimpan perbaris oleh karena itu biasanya object result set di
looping menggunakan while berikut ini contoh penerapan object ResultSet :
67
BAB X
PEMBUATAN LAPORAN DENGAN IREPORT
68
3. Tahap Pertama silahkan pilih report wizard. Sebagai berikut :
4. Kemudian berikan nama file dan pilih dimana tempat file tersebut kita simpan.
69
5. Pada tahap ini kita akan mulai mengkoneksikan ireport dengan dbms PostgreeSQL.
Klik tombol view kemudian pilih ”Database JDBC Conection”.
setelah diisi semuanya klik tombol Test untuk mengecek apakah setingan yang kita buat
berhasil,setelah berhasil klik tombol Save.
70
7. Setelah koneksi berhasil,jalankan Query dibawah ini untuk mencetak Field yang ingin
digunakan dalam pelaporan hasil pemeriksaan,setelah itu klik tombol Next :
8. Setelah itu muncul semua Field yang mau kita cetak,klik tombol ”>>” untuk
memindahkan Field yang mau kita cetak ke area kanan.
71
9. Field yang mau kita cetak, Setelah itu klik tombol Next :
10. Pada tahap ini kita pilih Field mana yang kita buat Group kemudian Klik tombol Next
untuk mengikuti tahap selanjutnya.
72
11. Pilih jenis report ”Tabular Layout ”untuk membuat report seperti Tabel,lalu klik
tombol Next :
12. Hasil Report secara kasarnya adalah seperti dibawah ini, rubah title menjadi seperti
dibawah ini :
73
13. Klik View untuk melihat hasilnyadan mengecek apakah ada kesalahan dalam
pembuatan report :
Setelah selesai maka bisa dilanjutkan membuat kelas java untuk memanggil file
yang telah dibuat. Untuk mempermudah gambaran kode programnya disini terdapat
contoh listingdimana file ireport dipanggil berdasarkan tombol “print”sebagai berikut:
import javax.swing.JOptionPane;
import java.io.File;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
76