Selasa, 21 Oktober 2014

Hai hai Sobat..
Yuk kita belajar Basis Data lagi. Laporan Desain Basis Data ke-5 ini, bakal ngebahas tentang Agregasi dan View.

Dasar Teori

Agregasi itu apaan yah?
Agregasi dalam SQL merupakan proses untuk mendapatkan nilai dari sekumpulan data yang telah dikelompokkan. Pengelompokan data didasarkan pada kolom atau kombinasi kolom yang dipilih.
Berikut beberapa fungsi untuk agregasi:
MAX       : Mencari data terbesar dari sekelompok data.
MIN        : Mencari data terkecil dari sekelompok data.
COUNT   : Mencari cacah data.
SUM       : Mencari jumlah dari sekumpulan data numerik.
AVG       : Mencari nilai rata-rata dari sekumpulan data numerik.
Fungsi AVG dan SUM hanya berlaku untuk data bertipe numerik, tidak bisa untuk karakter atau date.
Sintaks SQL untuk melakukan pengelompokan adalah
SELECT fungsi_agregasi(nama_field) FROM nama_tabel;

GROUP BY

GROUP BY ini digunakan dalam pengelompokan data Sob. Biasa dipake untuk fungsi-fungsi agregasi. Berikut nih sintaksnye:
SELECT nama_kolom FROM nama_tabel GROUP BY nama_kolom;
Jika menggunakan GROUP BY, semua field yang ingin ditampilkan dalam SELECT harus tercantum di GROUP BY (kecuali aggregate functions).
GROUP BY sangat cocok untuk aggregate functions. Dengan menggunakan GROUP BY, kita bisa mengelompokkan record-record dan menghitung MIN, MAX, COUNT, SUM dan AVG untuk masing-masing kelompok.

HAVING

Having = pembatasan
Penggunaan HAVING terkait dengan GROUP BY, kegunaanya adalah untuk menentukan kondisi bagi GROUP BY, dimana kelompok yang memenuhi kondisi saja yang akan di hasilkan. Nih.. langsung ana kasi contohna:
Contoh :


SELECT nama, sum(total) FROM transaksi
GROUP BY nama HAVING sum(total)<150000;
Jika menggunakan HAVING, maka pembatasan dilakukan setelah hasil dikelompokkan dalam GROUP BY.
SELECT nama, tglbeli FROM transaksi
WHERE total=150000 GROUP BY nama,tglbeli;
Jika menggunakan WHERE, maka pembatasan dilakukan sebelum hasil dikelompokkan dalam GROUP BY.

CASE

Perintah CASE sering digunakan untuk menampilkan nilai tertentu dari beberapa barisan data dengan syarat-syarat atau kondisi yang kita berikan. Berikut sintaks case didalam SELECT:
...CASE WHEN condition THEN result [WHEN ...] [ELSE result] END

VIEW

View ini mirip dengan tabel, namun SQL Server tidak menyimpan data di dalamnya melainkan definisi (query) suatu tabel. Untuk mudahnya, view adalah (seperti) "virtual tabel".
Trus, buat apa pake VIEW??
Untuk membagi beban resource yang terpakai saat aplikasi di jalankan. Karena view dijalan/dieksekusi di sisi server. Maka resource di PC clients akan lebih hemat.
Untuk mempermudah dalam menampilkan data. Kadang struktur database yang kita buat agak mempersulit kita dalam proses query untuk ditampilkan di report. Untuk mempermudah maintain aplikasi, apabila ada proses query yang sama dan berulang maka akan lebih simple dalam proses pembuatan aplikasi.
Untuk mengimplementasikan security. User tidak bisa melihat colom colom tabel sebenarnya.
Kekuragannya, View tidak bisa menerima parameter sebagaimana Stored Procedured (SP). Berikut sintaks view:

CREATE VIEW nama_tabel_view AS query;

Hasil Praktikum

Masih bingung yaa sama teori-teori diatas?? Coba praktik langsung aja Sob.
Berikut hasil praktikum penggunaan agregasi dan view dengan MySQL.
Persiapan: Gunakan tabel mahasiswa dan fakultas pada pertemuan sebelumnya.
Tampilkan banyaknya data mahasiswa yang telah di inputkan.
Mencari nim mahasiswa yang paling kecil.
 
Mencari nim mahasiswa yang paling besar.
Mencari rata-rata nim mahasiswa.
Menampilkan rata-rata id atau nim mahasiswa yang data nimnya lebih dari 12
Menampilkan jumlah mahasiswa berdasarkan fakultas. Sehingga hasilnya seperti berikut:
Nama fakultas
Count(*)
Saintek
2
Psikolog
1
Menampilkan seperti nomor 3 dengan persyaratan jumlah mahasiswa yang lebih dari sama dengan 2 saja yang ditampilkan
Menampilkan data mahasiswa dengan persyaratan, jika jenis kelaminnya “L” maka tertulis laki-laki dan bila “P” maka tertulis perempuan. 
Membuat view untuk query penampilan data mahasiswa, fakultas berdasarkan nim, nama mahasiswa, nama fakultas.

Nih, ana tambah yang pake PostgeSQL. Coba aja Sob..
Server [localhost]:
Database [postgres]: permata13650083
Port [5432]:
Username [postgres]:
Password for user postgres:
psql (9.3.5)
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

permata13650083=# select * from mahasiswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       1 | Luki     | Ponorogo   |      2 | 082576568725 | L
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       3 | Melly    | Yogyakarta |      1 | 081233476588 | P
       4 | Hari     | Solo       |      2 | 085776889521 | L
       5 | Sinta    | Jakarta    |      1 | 085233456789 | P
       6 | Ana      | Malang     |      2 | 082547766543 | P
       7 | Fandi    | Jombang    |      1 | 081234576980 | L
(7 rows)

permata13650083=# select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | PSIKOLOGI
      1 | SAINTEK
(2 rows)

permata13650083=# select count(*) from mahasiswa;
 count
-------
     7
(1 row)

permata13650083=# select min(nim_mah) from mahasiswa;
 min
-----
   1
(1 row)

permata13650083=# select max(nim_mah) from mahasiswa;
 max
-----
   7
(1 row)

permata13650083=# select avg(nim_mah) from mahasiswa;
        avg
--------------------
 4.0000000000000000
(1 row)

permata13650083=# select avg(nim_mah) from mahasiswa where nim_mah>12;
 avg
-----

(1 row)

permata13650083=# select avg(nim_mah) from mahasiswa where nim_mah>3;
        avg
--------------------
 5.5000000000000000
(1 row)

permata13650083=# select nama_fak, count(*) from mahasiswa, fakultas where mahas
iswa.id_fak=fakultas.id_fak group by nama_fak;
 nama_fak  | count
-----------+-------
 PSIKOLOGI |     3
 SAINTEK   |     4
(2 rows)

permata13650083=# select nama_fak, count(*) from mahasiswa, fakultas where mahas
iswa.id_fak=fakultas.id_fak group by nama_fak having count(*)>=2;
 nama_fak  | count
-----------+-------
 PSIKOLOGI |     3
 SAINTEK   |     4
(2 rows)

permata13650083=# select nim_mah, nama_mah, alamat_mah, id_fak, no_telp, case wh
en gender='L' then 'Laki-laki' else 'Perempuan' end as jenis_kelaminn from mahas
iswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | jenis_kelaminn
---------+----------+------------+--------+--------------+----------------
       1 | Luki     | Ponorogo   |      2 | 082576568725 | Laki-laki
       2 | Affan    | Surabaya   |      1 | 085677854321 | Laki-laki
       3 | Melly    | Yogyakarta |      1 | 081233476588 | Perempuan
       4 | Hari     | Solo       |      2 | 085776889521 | Laki-laki
       5 | Sinta    | Jakarta    |      1 | 085233456789 | Perempuan
       6 | Ana      | Malang     |      2 | 082547766543 | Perempuan
       7 | Fandi    | Jombang    |      1 | 081234576980 | Laki-laki
(7 rows)

permata13650083=# create view data_mahasiswa as select nim_mah, nama_mah, nama_f
ak from mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak;
CREATE VIEW

permata13650083=# select * from data_mahasiswa;
 nim_mah | nama_mah | nama_fak
---------+----------+-----------
       1 | Luki     | PSIKOLOGI
       2 | Affan    | SAINTEK
       3 | Melly    | SAINTEK
       4 | Hari     | PSIKOLOGI
       5 | Sinta    | SAINTEK
       6 | Ana      | PSIKOLOGI
       7 | Fandi    | SAINTEK
(7 rows)

permata13650083=#

Evaluasi Perbedaan DBMS PostgreSQL dan MySQL

Dari hasil praktikum ini, ternyata semua sintaks agregasi dan view di PosgreSQL dan MySQL sama. Hanya saja beberapa tampilannya beda. Cek berikut:
Untuk bilangan desimal, Kalau di MySQL, angka nolnya ada 4 digit dibelakang koma. Sedangkan PostgreSQL nolnya 15 yang dibelakang koma. Busyeet.. alay bener yah.. hehe. (*ana keles, yang alay*)

 
Pada MySQL, jika data kosong maka tertulis “NULL”, kalo di PosgreSQL ga ada isi(tulisann)nya Sob.
 
 
Selain itu pada MySQL juga dicantumin nama kolom yang dicari nilai terendah (min), nilai tertinggi (max) atau rata-ratanya (avg). Kalau di PosgreSQL nggak ada. Cek aja deh!

Tugas Rumah

Tugas rumah kali ini adalah menjelaskan evaluasi dari DBMS MySQL dan PostgreSQL berdasarkan tugas praktikum yang meliputi perbedaan atau kesamaan, kelebihan atau kekurangan.
Perbedaan dari kedua DBMS (MySQL dan PosgreSQL) dari praktikum kali ini udah dijelasin diatas. Semua sintaks MySQL dan PosgreSQL meliputi agregasi dan view yang digunakan dalam praktikum ini sama. Hanya tampilannya aja yang beda. Kalo menurut ana sih, tampilan di MySQL lebih enak dipandang daripada tampilan PosgeSQL, sehingga lebih mudah dipahami.

Kesimpulan

Dari praktikum yang telah dilakukan, dapat disimpulkan bahwa
Agregasi dalam SQL merupakan proses untuk mendapatkan nilai dari sekumpulan data yang telah dikelompokkan. Sintaksnya adalah:
SELECT fungsi_agregasi(nama_field) FROM nama_tabel;
GROUP BY digunakan dalam pengelompokan data. Biasanya digunakan untuk fungsi-fungsi agregasi. Sintaksnya:
SELECT nama_kolom FROM nama_tabel GROUP BY nama_kolom;
HAVING digunakan untuk pembatasan dalam menampilkan data.
Perintah CASE digunakan untuk menampilkan nilai tertentu dari beberapa barisan data dengan syarat-syarat atau kondisi diberikan. Sintaks case didalam SELECT:
...CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
VIEW merupakan tabel bayangan (bukan tabel asli dan bukan temporary). Sintaksnya:
CREATE VIEW nama_tabel_view AS query;

Cukup sudah laporan praktikum kali ini. Semoga bisa bermanfaat bagi Sobat semua. Makasih yaa, udah baca-baca di blog ana. See you next laporan...


Referensi:
Modul Praktikum Desain Basis Data.
http://y4y4ne.blogspot.com/2010/04/penggunaan-view-di-sql-server.html.
http://pribadiwidianto.blogspot.com/2011/12/pengelompokan-data-dan-agregasi-fungsi.html.
http://m24klik.wordpress.com/2013/01/10/sql-functiongroup-by-having/

0 komentar:

Posting Komentar

Teman

Popular Posts

Text Widget