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)
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