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/

Selasa, 14 Oktober 2014


Yuhuuu.. Hai hai Sobat. Waktunya lapor lagi nih. Laporan Praktikum Desain Basis Data yang ke-4 ini, membahas tentang “Pengenalan Operator Dasar”. Are you redy?? Langsung aja yah, cekidot..

Dasar Teori

Operator AS

Operator ini, biasa digunakan untuk nampilin label kolom dengan nama lain yang kita inginkan sehingga yang akan muncul dalam hasil query bukan nama asli kolom. Berikut sintaksnya: 
SELECT nama­_kolom AS namaKolom_pengganti FROM nama_tabel;

Operator AND

Operator ini dipake buat nampilin data yang lebih akurat . Dengan operator AND, data yang ditampilin Cuma data yang memenuhi kedua syarat yang ditentukan. Nih sintaksnya :
SELECT * FROM nama_tabel WHERE nama_kolom1= kata_kunci1 AND nama_kolom2 = kata_kunci2;

Operator OR

Fungsi operator OR mirip dengan operator AND, kalau operator AND nampilin data yang harus memenuhi kedua syarat yang ditentukan, operator OR bisa nampilin data yang hanya memenuhi salah satu dari kedua syarat yang ditentukan. Sintaksnya:
SELECT * FROM nama_tabel WHERE nama_kolom1= kata_kunci1 OR nama_kolom2 = kata_kunci2;

Operator BETWEEN

Dalam operator ini, terjadi pembatasan pada data yang mau ditampilin. Data diberi batasan pada nilai terendah dan tertinggi. Berikut Sob, sintaksnya :
SELECT * FROM nama_tabel WHERE nama_kolom BETWEEN nilai_awal AND nilai_akhir;

Operator IN 


Operator IN berguna melakukan pencocokan dengan salah satu yang ada pada suatu daftar nilai. Berikut Struktur yang digunakan:
SELECT * FROM nama_tabel WHERE nama_kolom IN (kata_kunci1, kata_kunci2, ....);

Operator LIKE

Operator LIKE menggunakan mode pencarian berdasarkan huruf awal atau huruf akhir atau kombinasi dari keduanya dari data yang ingin ditampilin. Neh sintaksnya:
SELECT * FROM nama_tabel WHERE nama_kolom LIKE ‘operator’;

Operator DISTINCT

Operator DISTINCT ini digunakan buat nampilin data tanpa duplikasi pada suatu kolom. Jika terdapat duplikasi data maka yang ditampilin cuma satu data saja Sob. Sintaknya adalah:
SELECT DISTINCT nama_kolom FROM nama_tabel;

Operator LIMIT

Kegunaan operator LIMIT terletak pada pembatasan jumlah data yang mau ditampilin. Contoh nih, kalau kita cuma pingin nampilin 3 data pada suatu tabel, maka hanya 3 data terataslah yang bakal ditampilin. Sintaksnya seperti ini nih:
SELECT * FROM nama_tabel ORDER BY nama_kolom LIMIT jumlah_data;

Operator OFFSET

Kalau operator LIMIT membatasi jumlah data yang ditampilkan, operator OFFSET ini adalah kebalikannya Sob. Dia akan menghilangkan jumlah data yang akan ditampilkan dan menampilkan sisa dari data yang dihilangkan (hahah.. bingung dah loh). Kayak gini nih sintaksnya:
SELECT * FROM nama_tabel ORDER BY nama_kolom OFFSET jumlah_data;

REGEXP


Regular Expression atau Regex, merupakan sebuah teknik atau cara untuk mencari persamaan-persamaan string atau data dan memanipulasinya. Biasanya lebih sering digunakan untuk string. Didalam PostgreSQL disimbolkan dengan “~”.

Berikut struktur SQL untuk pencarian data menggunakan REGEXP :

SELECT * FROM nama_tabel WHERE nama_kolom ~ ‘operator_regexp dan patern’;


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;

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 INTERSECT SELECT nama_kolom FROM nama_tabel;
Biar lebih paham lagi, Sobat bisa liat langsung contoh materi ini pada hasil praktikum berikut.

Hasil Praktikum


Berikut Ini hasil praktikum yang pake PostgreSQL Sob. Boleh dicoba..
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
---------+----------+------------+--------+--------------
      14 | Luki     | Ponorogo   |      2 | 082576568725
(1 row)
permata13650083=# select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | PSIKOLOGI
(1 row)
permata13650083=# select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | PSIKOLOGI
      1 | SAINTEK
(2 rows)
permata13650083=# alter table mahasiswa add column gender char;
ALTER TABLE
permata13650083=# select * from mahasiswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
      14 | Luki     | Ponorogo   |      2 | 082576568725 |
(1 row)
permata13650083=# insert into fakultas values (1, 'SAINTEK');
INSERT 0 1
permata13650083=# update mahasiswa set gender='L', nim_mah=1 where nim_mah=14;
UPDATE 1
permata13650083=# select * from mahasiswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       1 | Luki     | Ponorogo   |      2 | 082576568725 | L
(1 row)
permata13650083=# insert into mahasiswa values (2, 'Affan', 'Surabaya', 1, '0856
77854321', '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, '081
234576980', 'L');
INSERT 0 6
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 nim_mah as nomor_identitas, nama_mah as nama, alamat_ma
h as alamat, nama_fak as nama_fakultas from mahasiswa, fakultas where mahasiswa.
id_fak=fakultas.id_fak;
 nomor_identitas | nama  |   alamat   | nama_fakultas
-----------------+-------+------------+---------------
               1 | Luki  | Ponorogo   | PSIKOLOGI
               2 | Affan | Surabaya   | SAINTEK
               3 | Melly | Yogyakarta | SAINTEK
               4 | Hari  | Solo       | PSIKOLOGI
               5 | Sinta | Jakarta    | SAINTEK
               6 | Ana   | Malang     | PSIKOLOGI
               7 | Fandi | Jombang    | SAINTEK
(7 rows)
permata13650083=# select * from mahasiswa where id_fak=1 and gender='L';
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       7 | Fandi    | Jombang    |      1 | 081234576980 | L
(2 rows)
permata13650083=# select * from mahasiswa where id_fak=1 or gender='L';
 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
       7 | Fandi    | Jombang    |      1 | 081234576980 | L
(6 rows)
permata13650083=# select * from mahasiswa where nim_mah between 3 and 5;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       3 | Melly    | Yogyakarta |      1 | 081233476588 | P
       4 | Hari     | Solo       |      2 | 085776889521 | L
       5 | Sinta    | Jakarta    |      1 | 085233456789 | P
(3 rows)
permata13650083=# select * from mahasiswa where nim_mah>= 3 and nim_mah<=5;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       3 | Melly    | Yogyakarta |      1 | 081233476588 | P
       4 | Hari     | Solo       |      2 | 085776889521 | L
       5 | Sinta    | Jakarta    |      1 | 085233456789 | P
(3 rows)
permata13650083=# select * from mahasiswa where nim_mah not between 3 and 5;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       1 | Luki     | Ponorogo   |      2 | 082576568725 | L
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       6 | Ana      | Malang     |      2 | 082547766543 | P
       7 | Fandi    | Jombang    |      1 | 081234576980 | L
(4 rows)
permata13650083=# select * from mahasiswa where nim_mah<3 or nim_mah>5;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       1 | Luki     | Ponorogo   |      2 | 082576568725 | L
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       6 | Ana      | Malang     |      2 | 082547766543 | P
       7 | Fandi    | Jombang    |      1 | 081234576980 | L
(4 rows)
permata13650083=# select * from mahasiswa where nim_mah in (2,3,5);
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       3 | Melly    | Yogyakarta |      1 | 081233476588 | P
       5 | Sinta    | Jakarta    |      1 | 085233456789 | P
(3 rows)
permata13650083=# select * from mahasiswa where nama_mah like 'A%';
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       6 | Ana      | Malang     |      2 | 082547766543 | P
(2 rows)
permata13650083=# select * from mahasiswa where nama_mah like 'A%' and nama_mah
like '__n';
 nim_mah | nama_mah | alamat_mah | id_fak | no_telp | gender
---------+----------+------------+--------+---------+--------
(0 rows)
permata13650083=# select distinct id_fak from mahasiswa;
 id_fak
--------
      2
      1
(2 rows)
permata13650083=# select * from mahasiswa limit 3;
 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
(3 rows)
permata13650083=# select * from mahasiswa where nama_mah ~ 'A[rtd]';
 nim_mah | nama_mah | alamat_mah | id_fak | no_telp | gender
---------+----------+------------+--------+---------+--------
(0 rows)
permata13650083=# select * from mahasiswa where nama_mah ~ 'A[rfn]';
 nim_mah | nama_mah | alamat_mah | id_fak |   no_telp    | gender
---------+----------+------------+--------+--------------+--------
       2 | Affan    | Surabaya   |      1 | 085677854321 | L
       6 | Ana      | Malang     |      2 | 082547766543 | P
(2 rows)
permata13650083=# create table organ_dalam (nomor integer not null, nama varchar
(20));
CREATE TABLE
permata13650083=# insert into organ_dalam values (1, 'Jantung'), (2, 'Paru-paru'
), (3, 'Tenggorokan');
INSERT 0 3
permata13650083=# select * from organ_dalam;
 nomor |    nama
-------+-------------
     1 | Jantung
     2 | Paru-paru
     3 | Tenggorokan
(3 rows)
permata13650083=# create table organ_luar (nomor integer not null, nama varchar(
20));
CREATE TABLE
permata13650083=# insert into organ_luar values (1, 'Hidung'), (2, 'Mata'), (3,
'Tenggorokan');
INSERT 0 3
permata13650083=# select * from organ_luar;
 nomor |    nama
-------+-------------
     1 | Hidung
     2 | Mata
     3 | Tenggorokan
(3 rows)
permata13650083=# select * from organ_dalam union select * from organ_luar;
 nomor |    nama
-------+-------------
     2 | Paru-paru
     3 | Tenggorokan
     1 | Hidung
     2 | Mata
     1 | Jantung
(5 rows)
permata13650083=# select * from organ_dalam except select * from organ_luar;
 nomor |   nama
-------+-----------
     1 | Jantung
     2 | Paru-paru
(2 rows)
permata13650083=# select * from organ_dalam intersect select * from organ_luar;
 nomor |    nama
-------+-------------
     3 | Tenggorokan
(1 row)
permata13650083=#


Nah, sekarang kita coba pake MySQL.

Persiapan praktek: Gunakan tabel mahasiswa dan fakultas pada pertemuan 3. Tambahkan kolom gender di tabel mahasiswa kemudian update data mahasiswa. Insert data mahasiswa hingga 7 baris.
>> Login dan konek dulu ke database yang akan digunakan.
>> Data tabel mahasiswa (pertemuan 3)

>> Data tabel fakultas (pertemuan 3)


>> Insert tabel fakultasnya dulu
>> Tambahkan kolom gender pada tabel mahasiswa

>> Update tabel mahasiswa
>> Insert tabel mahasiswa

Berdasarkan tabel sebelumnya yaitu bab 3, tampilkan data mahasiswa dengan nama dari kolomnya berubah menjadi nomor_identitas, nama, alamat,nama_fakultas tanpa harus merubah nama kolom secara permanen.
>> Mengubah tampilan nama kolom menggunakan AS
Tampilkan nama mahasiswa fakultas saintek yang berjenis kelamin laki-laki.
>> Menampilkan mahasiswa laki-laki fakultas saintek menggunakan AND
Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-lak
>>Menampilkan mahasiswa fakultas Saintek atau mahasiswa yang berjenis kelamin laki-laki menggunakan OR

Suatu tabel mahasiswa terdapat 7 baris data mahasiswa. Tampilkan data mahasiswa dari nomor 3 sampai dengan 5, kemudian tampilkan juga data mahasiswa yang bukan dari nomor 3 sampai dengan 5 menggunakan between dan tanpa menggunakan between.
>> Menampilkan data mahasiswa dengan NIM 3 sampai 5 menggunakan BETWEEN dan menggunakan operator biasa.
 >> Menampilkan data mahasiswa selain NIM 3 sampai 5 menggunakan NOT BETWEEN dan menggunakan operator biasa.
Tampilkan mahasiswa dengan nomor 2,3,5 menggunakan operator IN.
>> Menampilkan mahasiswa yang mempunyai NIM 2, 3, dan 5 menggunakan IN
Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf “A”.
>> Menampilkan mahasiswa yang namanya diawali dengan huruf A menggunakan LIKE
Tampilkan semua data mahasiswa yang namanya mempunyai akhiran “a” dan huruf ke-3 dari nama tersebut terdapat huruf “n”.
>> Menampilkan mahasiswa yang namanya mempunyai akhiran “a” dan huruf ke-3 “n” dengan kombinasi operator AND dan LIKE.
Tampilkan nomor fakultas di tabel mahasiswa dengan nomor harus tidak ada yang sama dari baris pertama sampai akhir.
>> Menampilkan nomor fakultas di tabel mahasiswa tanpa pengulangan data menggunakan DISTINCT.


Tampilkan data mahasiswa 3 baris saja. 
>> Menampilkan data 3 baris mahasiswa dengan menggunakan LIMIT.


Tampilkan data mahasiswa dengan ciri-ciri memiliki nama awalan a kemudian kata selanjutnya boleh r atau boleh t atau boleh d. misalkan yang memenuhi kriteria ciri tersebut seperti adi, atik, arif, adam dll.

*Boleh dengan awalan dan ciri yang lain namun karakteristiknya harus sesuai soal 
>> Menampilkan data mahasiswa dengan yang namanya memilki awalan "A" dan huruf selanjutnya r, n, atau f menggunakan REGEXP.

Buatlah tabel dengan nama organ_dalam dan organ_luar sebagai berikut :

Tabel organ_dalam

Nomor
Nama
1
Jantung
2
Paru-paru
3
Tenggorokan

Tabel organ_luar

Nomor
Nama
1
Hidung
2
Mata
3
Tenggorokan
Tampilkan data dari kedua tabel tersebut menggunakan UNION, EXCEPT dan INTERSECT
>> Membuat tabel organ_dalam
>> Membuat tabel organ_luar
>> Menampilkan data (UNION)

>> Menampilkan data (INTERSECT)

>> Menampilkan data (EXCEPT)

Evaluasi Perbedaan DBMS PostgreSQL dan MySQL



Dari praktikum ini, didapatkan beberapa perbedaan dalam penggunaan DBMS PostgreSQL dan MySQL. Diantaranya adalah sebagai berikut:

Kategori Perbedaan
PostgreSQL
MySQL
REGEXP
SELECT * FROM nama_tabel WHERE nama_kolom ~ ‘operator_regexp dan patern’;
SELECT * FROM nama_tabel WHERE nama_kolom REGEXP ‘operator_regexp dan patern’;
Except
select nama_kolom from nama_tabel except select nama_kolom from nama_tabel;
Pada MySQL tidak terdapat operator EXCEPT namun sebagai gantinya dapat menggunakan operator NOT IN seperti contoh 2 pada bagian Nested Queries.
Intersect
select nama_kolom from nama_tabel intersect select nama_kolom from nama_tabel;
Tidak terdapat operator INTERSECT namun sebagai gantinya dapat menggunakan operator IN

Pekerjaan Rumah


Tugas rumah kali ini adalah menjelaskan evaluasi dari DBMS MySQL dan PostgreSQL berdasarkan tugas praktikum yang meliputi perbedaan atau kesamaan, kelebihan atau kekurangan.

Oke.. Ternyata ada beberapa perbedaan Sob, antara operator PostgreSQL dan MySQL, seperti yang udah dijelaskan diatas. Biar lebih jelas lagi, simak nih yang berikut:

REGEXP

Tampilkan data mahasiswa dengan ciri-ciri memiliki nama awalan A kemudian kata selanjutnya boleh r atau boleh t atau boleh d. misalkan yang memenuhi kriteria ciri tersebut seperti adi, atik, arif, adam dll.

*Boleh dengan awalan dan ciri yang lain namun karakteristiknya harus sesuai soal

REGEXP pada PostgreSQL
REGEXP padaMySQL
REGEXP pada PostgreSQL menggunakan simbol “~”, sedangkan pada MySQL tetap menggunakan istilah “REGEXP”. Selain itu, untuk mencari nama mahasiswa yang awalnya A, pada MySQL harus diawali dengan tanda “^” sedangkan pada PostgeSQL tidak.

Except

Tampilkan data dari dua tabel menggunakan EXCEPT.

EXCEPT pada PostgreSQL
EXCEPT pada MySQL

Except pada PostgreSQL menggunakan istilah “EXCEPT”, sedangkan pada MySQL tidak terdapat operator EXCEPT, tetapi dapat diganti dengan menggunakan “NOT IN”.

Intersect

Tampilkan data dari dua tabel menggunakan INTERSECT
INTERSECT pada PostgreSQL
INTERSECT pada MySQL
Intersect pada PostgreSQL menggunakan istilah “INTERSECT”, sedangkan pada MySQL tidak terdapat operator INTERSECT, tetapi dapat diganti dengan menggunakan “IN”.
Itu tadi adalah perbedaannya. Untuk selebihnya, sama. Mengenai kelebihan dan kekurangannya, ana rasa sama saja, bergantung si pemakai lebih suka pake PostgreSQL atau MySQL.

Kesimpulan

Dari hasil praktikum “Pengenalan Operator Dasar” ini dapa disimpulkan bahwa penggunaan operator pada SQL dapat mempermudah pengaksesan dan pencarian data. Berikut adalah macamnya:
AS
SELECT nama_kolom AS namaKolom_pengganti FROM nama_tabel;
AND
SELECT * FROM nama_tabel WHERE nama_kolom1= kata_kunci1 AND nama_kolom2 = kata_kunci2;
OR
SELECT * FROM nama_tabel WHERE nama_kolom1= kata_kunci1 OR nama_kolom2 = kata_kunci2;
BETWEEN
SELECT * FROM nama_tabel WHERE nama_kolom BETWEEN nilai_awal AND nilai_akhir;
IN
Select * from nama_tabel where nama_kolom in (kata_kunci1, kata_kunci2, kata_kunci13, kata_kunci14);
LIKE
SELECT * FROM nama_tabel WHERE nama_kolom LIKE ‘operator’;
DISTINCT
SELECT DISTINCT nama_kolom FROM nama_tabel;
LIMIT
SELECT * FROM nama_tabel ORDER BY nama_kolom LIMIT jumlah_data;
OFFSET
SELECT * FROM nama_tabel ORDER BY nama_kolom OFFSET jumlah_data;
REGEXP
SELECT * FROM nama_tabel WHERE nama_kolom ~ ‘operator_regexp dan patern’;
UNION
SELECT nama_kolom FROM nama_tabel UNION SELECT nama_kolom FROM nama_tabel;
EXCEPT
SELECT nama_kolom FROM nama_tabel EXCEPT SELECT nama_kolom FROM nama_tabel;
INTERSECT
SELECT nama_kolom FROM nama_tabel INTERSECT SELECT nama_kolom FROM nama_tabel;

Sekian dulu yaa, laporan praktikum Desain Basis Datanya. Semoga bermanfaat Sob.


Referensi:

Utami, Ema, Sukrisno. 2008. “Mengoptimalkan Query pada MYSQL Server: Creating Report Without Programing. Yogyakarta: ANDI.

Modul Praktikum Desain Basis Data.

http://lukluulmarjan.blogspot.com/2013/05/operator-dasar-sql.html.

http://uyunoshigoto.wordpress.com/2012/12/29/pengenalan-sql/html.

Teman

Popular Posts

Text Widget