Selasa, 21 Oktober 2014

LAPORAN PRAKTIKUM DESAIN BASIS DATA

BAB V
AGREGASI SQL DAN VIEW
A.      LANDASAN TEORI
1.       AGGREGATE OPERATOR
Fungsi Aggregate adalah fungsi yang diterapkan terhadap sekumpulan data pada sebuah field dan menghasilkan nilai tunggal. Fungsi aggregate atau disebut fungsi ringkasan digunakan untuk melakukan penghitungan menjadi sebuah nilai dari beberapa nilai input. Aggregate dapat digabungkan dengan sebuah parameter seperti WHERE untuk menghasilkan suatu hasil yang lebih kompleks lagi. Beberapa fungsi aggregate adalah :
               
Fungsi
Keterangan
AVG(Nama_Kolom)
Fungsi ini digunakan untuk mencari nilai rata-rata pada sebuah field. Data yang ada pada field tersebut harus numerik.
MAX(Nama_Kolom)
Fungsi ini digunakan untuk mencari nilai terbesar diantara data yang ada pada suatu field. Fungsi ini dapat mencari nilai terbesar dari field numerik, string,dan datetime.
MIN(Nama_Kolom)
Fungsi ini gunanya hamper sama dengan fungsi MAX, namun fungsi ini mencari nilai terkecil pada field yang bersangkutan.
SUM(Nama_Kolom)
Fungsi ini digunakan untuk melakukan penjumlahan terhadap sebuah field yang tipe datanya numerik.
COUNT(*)
Fungsi ini menghitung semua nilai tertentu pada sebuah field. Fungsi ini akan mengembalikan nilai berupa jumlah baris yang memenuhi kriteria perhitungan tanpa terpengaruh nilai dari field tersebut ada yang NULL atau tidak.
COUNT_BIG(*)
Fungsi ini serupa dengan fungsi di atas, tetapi hasilnya bertipe data bigint.

Berikut contoh aggregate query dari suatu tabel pegawai :
Id_peg
Nama_peg
Alamat_peg
Telp_peg
Jabatan_peg
1
Hendro
Solo
08264783990
Teknisi
2
Tika
Semarang
08567283660
Sekretaris
3
Wijaya
Jogjakarta
09931888883
Kepala
4
Dodi
Banyuwangi
08999789883
Staf
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
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_buk
Judul_Buk
Pengarang_Buk
Penerbit_Buk
Tahun_buk
Resensi_Buk
Harga_Buk
11
Harry Potter
JK.Rowling
British
2002
Fiksi
50000
12
Sistem Basis Data
Abdul Kadir
Andi
2002
Teks
30000
13
Pemrograman
Abdul Kadir
Andi
2004
Teks
60000

-  Untuk menampilkan informasi nama pengarang :
Select pengarang_buk from buku group by pengarang_buk;
Hasil :
Pengarang
JK.Rowling
Abdul Kadir

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

-  Untuk menampilkan informasi buku tiap tahunnya :
Select tahun_buk, count(*) from buku group by tahun_buk;
Hasil :
Tahun
Count(*)
2004
1
2002
2

-  Untu menampilkan informasi jumlah total uang tiap tahunnya :
Select tahun_buk, sum(harga_buk) as total from buku group by tahun_buk;
Hasil :
Tahun
Total
2004
60000
2002
80000

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
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 (Harga Order)
Anita
1700



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
Dudy
Rudianto
1973-12-11
Dewasa
Ana
Hidayati
1988-10-01
Balita

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
Teguh
2000

B.      HASIL PRAKTIKUM
  •          MySQL
Dari table mahasiswa yang telah kita buat pada pertemuan sebelumnya, tambahkan beberapa data yang akan kita gunakan untuk pertemuan kali ini, tambahkan kolom gender kemudian update datanya. 
      Eitss jangan lupa ya,.. sebelum kita melakukan percobaan pada MySQL, kita harus masuk dulu ke MySQL_nya dengan mengetikkan “mysql –u root” dan memilih database yang akan kita pakai dengan “use nama_database”.  

1.       Tampilkan banyaknya data mahasiswa yang telah di inputkan. Kemudian cari nim atau id mahasiswa yang paling kecil, paling besar dan rata-ratanya.
Berikut Syntaxnya :
SELECT * from mahasiswa; // untuk menampilkan seluruh data mahasiswa
SELECT MAX(nim_mah) from mahasisswa; // untuk menampilkan nim_mahasiswa yang paling besar.
SELECT MIN(nim_mah) from mahasiswa; // untuk menampilkan nim_mahasiswa yang paling kecil.
SELECT AVG(nim_mah)from mahasiswa; // untuk menampilkan rata-rata nim_mahasiswa
                        
                       
 
                      


2.       Tampilkan rata-rata id atau nim mahasiswa yang data nimnya lebih dari 12.
Berikut Syntaksnya :

SELECT AVG(nim_mah) from mahasiswa where nim_mah>12;


3.       Tampilkan jumlah mahasiswa berdasarkan fakultas. Sehingga hasilnya adalah column nama fakultas & count(*).
Berikut syntaksnya :

SELECT nama_fak, COUNT(*) from mahasiswa m, fakultas f WHERE m.id_fak=f.id_fak GROUP BY nama_fak;

Catatan : ( mahasiswa m, fakultas f ) m dan f adalah sebuah inisialisasi dari table mahasiswa dan fakultas. dengan begitu, kita bisa menuliskan inisial m dan f untuk perintah selanjutnya.

4.       Tampilkan seperti nomor 3 dengan persyaratan jumlah mahasiswa yang lebih dari sama dengan 2 saja yang ditampilkan.
berikut Syntaksnya :

SELECT nama_fak, COUNT(*) from mahasiswa m, fakultas f WHERE m.id_fak=f.id_fak GROUP BY nama_fak HAVING COUNT(*)>=2;


5.       Tampilkan data mahasiswa dengan persyaratan, jika jenis kelaminnya ‘L’ maka tertulis ‘Laki-laki’ dan sebaliknya.
Berikut Syntaksnya :

SELECT *, CASE WHEN gender = ‘L’ THEN ‘Laki-laki’ ELSE ‘Perempuan’ END AS ket from mahasiswa;



6.       Buatlah view untuk query penampilan data mahasiswa, fakultas. Ambil berdasarkan nim, nama mahasiswa, nama fakultas.
Berikut Syntaksnya :

CREATE VIEW Data_Mahasiswa AS SELECT nim_mah, nama_mah, nama_fak from mahasiswa, fakultas WHERE mahasiswa.id_fak=fakultas.id_fak; // untuk membuat VIEW
SELECT * from Data_Mahasiswa; // untuk menampilkan hasil VIEW


  • PostgreSQL
Dari table mahasiswa yang telah kita buat pada pertemuan sebelumnya, tambahkan beberapa data yang akan kita gunakan untuk pertemuan kali ini, tambahkan kolom gender kemudian update datanya. J
            1.   Tampilkan banyaknya data mahasiswa yang telah di inputkan. Kemudian cari nim atau id
                  mahasiswa yang paling kecil, paling besar dan rata-ratanya.
Berikut Syntaksnya :

SELECT * from mahasiswa; // untuk menampilkan seluruh data mahasiswa
SELECT MAX(nim_mah) from mahasiswa; // untuk menampilkan nim_mahasiswa yang paling besar.
SELECT MIN(nim_mah) from mahasiswa; // untuk menampilkan nim_mahasiswa yang paling kecil.
SELECT AVG(nim_mah)from mahasiswa; // untuk menampilkan rata-rata nim_mahasiswa

           


           



            2.   Tampilkan rata-rata id atau nim mahasiswa yang data nimnya lebih dari 12.
           Berikut Syntaksnya :

SELECT AVG(nim_mah) from mahasiswa where nim_mah>12;


            3.  Tampilkan jumlah mahasiswa berdasarkan fakultas. Sehingga hasilnya adalah column nama
                fakultas & count(*).
          Berikut syntaksnya :

SELECT nama_fak, COUNT(*) from mahasiswa m, fakultas f WHERE m.id_fak=f.id_fak GROUP BY nama_fak;

Catatan : ( mahasiswa m, fakultas f ) m dan f adalah sebuah inisialisasi dari table mahasiswa . Dengan begitu, kita bisa menuliskan inisial m dan f untuk perintah selanjutnya.

            4.  Tampilkan seperti nomor 3 dengan persyaratan jumlah mahasiswa yang lebih dari sama dengan
                2 saja yang ditampilkan.
          berikut Syntaksnya :

SELECT nama_fak, COUNT(*) from mahasiswa m, fakultas f WHERE m.id_fak=f.id_fak GROUP BY nama_fak HAVING COUNT(*)>=2;


            5.  Tampilkan data mahasiswa dengan persyaratan, jika jenis kelaminnya ‘L’ maka tertulis
                ‘Laki-laki’ dan sebaliknya.
           Berikut Syntaksnya : 

SELECT *, CASE WHEN gender = ‘L’ THEN ‘Laki-laki’ ELSE ‘Perempuan’ END AS ket from mahasiswa;



            6.  Buatlah view untuk query penampilan data mahasiswa, fakultas. Ambil berdasarkan nim, nama
                mahasiswa, nama fakultas.
          Berikut Syntaksnya :

CREATE VIEW Data_Mahasiswa AS SELECT nim_mah, nama_mah, nama_fak from mahasiswa, fakultas WHERE mahasiswa.id_fak=fakultas.id_fak; // untuk membuat VIEW
SELECT * from Data_Mahasiswa; // untuk menampilkan hasil VIEW


    C.      EVALUASI PERBANDINGAN  DBMS MySQL dengan DBMS PostgreSQL
Dari hasil praktikum dan percobaan yang telah dilakukan, dapat di lihat bahwa antara Postgre SQL dengan MySQL mempunyai sedikit perbandingan yang terletak pada operator “COUNT, MAX, MIN, dan AVG”. pada MySQL kita harus menuliskan operator tersebut TANPA SPASI, misalnya : “COUNT(*)”. Sedangkan pada PostgreSQL, adanya spasi atau tidak adanya spasi dalam penulisan operator tersebut tidaklah berpengaruh, misalnya : “COUNT (*)” atau “COUNT(*)”.

     D.      KESIMPULAN, KRITIK, SARAN, MANFAAT
berdasarkan dari hasil percobaan dan hasil praktikum, maka dapat disimpulkan bahwa fungsi agregasi pada kedua DBMS ini mempunyai banyak kesamaan walaupun ada sedikit perbedaan pada penggunaan ‘SPASI’ saat mengoperasikan fungsi “COUNT, MAX, MIN, dan AVG”. menurut saya, penggunaan fungsi agregasi yang sudah dilakukan pada saat praktikum sudah jelas, namun ada sedikit menurut saya yang harus lebih di perjelas lagi yaitu pada penggunaan HAVING, seharusnya pada modul yang dipakai bisa ditambah contohnya, tidak hanya penggunaan HAVING SUM saja  tapi ditambahkan penggunaan HAVING COUNT juga. Dan yang terakhir saya berharap semoga sedikit tulisan di blog saya ini bisa bermanfaat bagi pembaca. 

    E.       DAFTAR PUSTAKA

ANDI OFFSET, 2010, Shotcourse SQL SERVER 2008 Express, Yogyakarta


0 comments:

Posting Komentar