Rabu, 19 November 2014



Assalamu’alaikum Sob.
Kita akan membahas subquery, index, dan temennya yang laen pada laporan praktikum kali ini.

Dasar Teori

Subquery

Sub Query adalah suatu query yang menjadi bagian dari suatu query. Sub Query digunakan untuk menangani masalah yang kompleks yang mungkin sulit untuk dilakukan hanya dengan sebuah query. Subquery menyediakan cara alternatif untuk melakukan operasi yang membutuhkan join atau union yang rumit. Subquery dapat digunakan dengan pernyataan SQL bersama dengan operator perbandingan seperti =, <,>,> =, <= dll. Penggunaan sub query dapat diterapkan pada pernyataan SELECT, UPDATE, DELETE, dan INSERT. Berikut sintaknya secara umum:
Select nama_kolom from nama_tabel where nama_kolom operator (subquery);

Index

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. Berikut struktur SQLnya:
CREATE INDEX nama_index ON nama_tabel (nama kolom);

Unique
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);
 
Hasil Praktikum
Sebelumnya, kita siapkan database pertemuan yang lalu. Kita akan menggunakan tabel mahasiswa dan fakultas yang telah dibuat.
Tampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil!
Tampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan Ana dan alamatnya tidak sama dengan Luki!
 
Buatlah index di tabel mahasiswa(alamat). Kemudian buat lagi index yang bersifat unik pada tabel fakultas(fak_nama) kemudian amati perbedaannya ketika memasukkan data yang sama! 


Buat kolom nama di mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya !  
 
 
 Pindahkan data dari tabel mahasiswa, fakultas ambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai „tabel identitas.
 
Inputkan data di tabel mahasiswa dimana pada kolom nama sebelum inputkan karakter dahulukan dengan spasi dan di akhiri dengan tanda “+” seperti berikut : “ andi cahyono++++”. kemudian munculkan seluruh data dan hilangkan spasi didepan!
 


Gimana Sob?? nih ana tambahin lagi contohnya. Dengan persoalan yang sama seperti yang ada di atas, tapi yang berikut ini pake PostgreSQL.
Server [localhost]:
Database [postgres]:
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.

postgres=# \c permata13650083
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.


permata13650083=# select nama_fak, count(nama_mah) from mahasiswa m, fakultas f where m.id_fak=f.id_
fak group by nama_fak limit 1;
 nama_fak  | count
-----------+-------
 PSIKOLOGI |     3
(1 row)


permata13650083=# select nama_mah, nama_fak, alamat_mah from mahasiswa, fakultas where mahasiswa.id_
fak=fakultas.id_fak and nama_fak in (select nama_fak from fakultas, mahasiswa where mahasiswa.id_fak
=fakultas.id_fak and nama_mah='Hari') and alamat_mah <> (select alamat_mah from mahasiswa where nama
_mah='Luki');
 nama_mah | nama_fak  | alamat_mah
----------+-----------+------------
 Ana      | PSIKOLOGI | Malang
 Hari     | PSIKOLOGI | Solo
(2 rows)


permata13650083=# create index alamat on mahasiswa(alamat_mah);
CREATE INDEX


permata13650083=# create unique index namaFakultas on fakultas(nama_fak);
CREATE INDEX


permata13650083=# select alamat_mah from mahasiswa;
 alamat_mah
------------
 Ponorogo
 Surabaya
 Yogyakarta
 Jakarta
 Malang
 Jombang
 Solo
(7 rows)

permata13650083=# insert into fakultas values(4, 'SAINTEK');
ERROR:  duplicate key value violates unique constraint "namafakultas"
DETAIL:  Key (nama_fak)=(SAINTEK) already exists.


permata13650083=# insert into fakultas values(4, 'TARBIYAH');
INSERT 0 1


permata13650083=# insert into mahasiswa values(30, 'Randi', 'Malang', '085655084275', 4, 'L');
INSERT 0 1


permata13650083=# alter table mahasiswa add unique (nama_mah);
ALTER TABLE


permata13650083=# insert into mahasiswa values(31, 'Riko', 'Malang', '085655084275', 3, 'L');
INSERT 0 1


permata13650083=# insert into mahasiswa values(33, 'Riko', 'Jambi', '085655084275', 4, 'L');
ERROR:  duplicate key value violates unique constraint "mahasiswa_nama_mah_key"
DETAIL:  Key (nama_mah)=(Riko) already exists.
permata13650083=# select*from mahasiswa;
 nim_mah | nama_mah | alamat_mah |  notelp_mah  | id_fak | gender
---------+----------+------------+--------------+--------+--------
      14 | Luki     | Ponorogo   | 085655084275 |      2 | L
      15 | Affan    | Surabaya   | 085234589012 |      1 | L
      16 | Melly    | Yogyakarta | 085734558902 |      1 | P
      18 | Sinta    | Jakarta    | 081233655789 |      1 | P
      21 | Ana      | Malang     | 081233655789 |      2 | P
      23 | Fandi    | Jombang    | 081245765889 |      1 | L
      17 | Hari     | Solo       | 085730008902 |      2 |
      30 | Randi    | Malang     | 085655084275 |      4 | L
      31 | Riko     | Malang     | 085655084275 |      3 | L
(9 rows)


permata13650083=# select nim_mah, nama_mah, alamat_mah, nama_fak into tabel_identitas from mahasiswa
 m, fakultas f where m.id_fak=f.id_fak;
SELECT 9
permata13650083=# select*from tabel_identitas;
 nim_mah | nama_mah | alamat_mah | nama_fak
---------+----------+------------+-----------
      14 | Luki     | Ponorogo   | PSIKOLOGI
      15 | Affan    | Surabaya   | SAINTEK
      16 | Melly    | Yogyakarta | SAINTEK
      18 | Sinta    | Jakarta    | SAINTEK
      21 | Ana      | Malang     | PSIKOLOGI
      23 | Fandi    | Jombang    | SAINTEK
      17 | Hari     | Solo       | PSIKOLOGI
      30 | Randi    | Malang     | TARBIYAH
      31 | Riko     | Malang     | HUMANIORA
(9 rows)
                                                    

permata13650083=# create table pengunjung (id integer primary key, nama varchar(30), gender char(1)
check (gender in('L','P')));
CREATE TABLE


permata13650083=# insert into pengunjung values (1, 'Lili', 'P');
INSERT 0 1
permata13650083=# select*from pengunjung;
 id | nama | gender
----+------+--------
  1 | Lili | P
(1 row)


permata13650083=# insert into pengunjung values (2, 'Jeri', 'L');
INSERT 0 1
permata13650083=# select*from pengunjung;
 id | nama | gender
----+------+--------
  1 | Lili | P
  2 | Jeri | L
(2 rows)


permata13650083=# insert into pengunjung values (3, 'Eren', 'W');
ERROR:  new row for relation "pengunjung" violates check constraint "pengunjung_gender_check"
DETAIL:  Failing row contains (3, Eren, W).


permata13650083=# insert into mahasiswa values(37, ' Andi Cahyono++++', 'Jambi', '085655084275', 4,
'L');
INSERT 0 1


permata13650083=# select*from mahasiswa;
 nim_mah |     nama_mah      | alamat_mah |  notelp_mah  | id_fak | gender
---------+-------------------+------------+--------------+--------+--------
      14 | Luki              | Ponorogo   | 085655084275 |      2 | L
      15 | Affan             | Surabaya   | 085234589012 |      1 | L
      16 | Melly             | Yogyakarta | 085734558902 |      1 | P
      18 | Sinta             | Jakarta    | 081233655789 |      1 | P
      21 | Ana               | Malang     | 081233655789 |      2 | P
      23 | Fandi             | Jombang    | 081245765889 |      1 | L
      17 | Hari              | Solo       | 085730008902 |      2 |
      30 | Randi             | Malang     | 085655084275 |      4 | L
      31 | Riko              | Malang     | 085655084275 |      3 | L
      37 |  Andi Cahyono++++ | Jambi      | 085655084275 |      4 | L
(10 rows)


permata13650083=# select ltrim(nama_mah) from mahasiswa;
      ltrim
------------------
 Luki
 Affan
 Melly
 Sinta
 Ana
 Fandi
 Hari
 Randi
 Riko
 Andi Cahyono++++
(10 rows)


permata13650083=# select trim (both 'A,+, ' from nama_mah) from mahasiswa;
    btrim
-------------
 Luki
 ffan
 Melly
 Hari
 Sinta
 na
 Fandi
 Randi
 Riko
 ndi Cahyono

(10 rows)



Evaluasi Perbedaan DBMS PostgreSQL dan MySQL
Berikut adalah perbedaan yang terdapat antara PostgreSQL dan MySQL mengenai materi diatas.
Keterangan
PostgreSQL
MySQL
Menghapus index
drop index nama_index;
Drop index nama_kolom on nama_tabel;
Menyalin tabel
Select nama_kolom into nama_tabel_baru from nama_tabel;
Create table nama_tabel_baru select nama_kolom from nama_tabel;
Untuk selebihnya, query yang dipakai sama.

Kesimpulan
Sub Query adalah suatu query yang menjadi bagian dari suatu query.
Berikut sintak subquery secara umum:
Select nama_kolom from nama_tabel where nama_kolom operator (subquery);
Indeks berguna dalam suatu pencarian nilai atau data dalam database. Struktur SQL index:
CREATE INDEX nama_index ON nama_tabel (nama kolom);
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. Berikut sintaknya:
CREATE TABLE nama_tabel (nama_kolom tipe_data unique);




Referensi:
http://beginner-sql-tutorial.com/id/sql-subquery.html.
http://mysql.phi-integration.com/sql/membuat-index-pada-mysql
Modul Praktikum Desain Basis Data

0 komentar:

Posting Komentar

Teman

Popular Posts

Text Widget