Praktikum Desain Basis data 7
SubQuery dan Index
SQL Shell Vs CMD mysql Pada XAMPP
Landasan Teori
SUB QUERY
Sebuah subquery adalah query nested di dalam query
yang lain seperti SELECT, INSERT, DELETE dan UPDATE. Sebuah subquery, juga
disebut subselect, dapat mengganti konstanta dalam query. Subquery dapat
mewakili nilai tetap, nilai berkorelasi, atau daftar nilai. Kalian dapat
menggunakan sejumlah subqueries. Kalian juga dapat nested subqueries dalam
subqueries lainnya.
Dalam beberapa kasus, subqueries hanya menyediakan
cara alternatif untuk frase query. Di lain, subquery adalah satu-satunya cara
untuk menghasilkan hasil yang diinginkan.
Sebuah subquery digunakan untuk mengembalikan data yang akan digunakan
dalam query utama sebagai syarat untuk lebih membatasi data yang akan diambil.
Seperti pengertian diatas, subqueries dapat
digunakan dengan SELECT, INSERT, UPDATE dan DELETE laporan bersama dengan
operator seperti =, <,>,> =, <=, IN, dll.
Ada beberapa aturan yang subqueries harus
mengikuti:
· - Subqueries harus tertutup
dalam tanda kurung.
· - Sebuah subquery hanya dapat
memiliki satu kolom dalam klausa SELECT, kecuali beberapa kolom dalam query
utama untuk subquery untuk membandingkan kolom yang dipilih.
· -ORDER BY tidak dapat
digunakan dalam subquery, meskipun permintaan utama dapat menggunakan ORDER BY.
GROUP BY dapat digunakan untuk melakukan fungsi yang sama seperti ORDER BY
dalam subquery.
· -Subqueries yang kembali
lebih dari satu baris hanya dapat digunakan dengan beberapa operator nilai,
seperti IN, EXISTS, NOT IN, ANY / SOME, operator ALL.
· -Operator between tidak
dapat digunakan dengan subquery; Namun, between dapat digunakan dalam subquery.
Subqueries dengan Pernyataan SELECT
Subqueries yang paling sering digunakan dengan pernyataan SELECT.
Sintaks dasar adalah sebagai berikut:
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [,
column_name ]
FROM table1 [, table2 ]
[WHERE])
Subqueries dengan Pernyataan INSERT:
Subqueries juga dapat digunakan dengan pernyataan
INSERT. Pernyataan INSERT menggunakan data kembali dari subquery untuk
memasukkan ke meja lain. Data yang dipilih dalam subquery dapat dimodifikasi
dengan salah satu fungsi karakter, tanggal, atau nomor. Sintaks dasar adalah
sebagai berikut:
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [,
column2 ]
FROM table1 [, table2
]
[ WHERE VALUE OPERATOR
]
Subqueries dengan Pernyataan UPDATE:
Subquery dapat digunakan dalam hubungannya dengan
pernyataan UPDATE. Kolom tunggal atau ganda dalam sebuah tabel dapat diperbarui
bila menggunakan subquery dengan pernyataan UPDATE.Sintaks dasar adalah sebagai
berikut:
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
Subqueries dengan Pernyataan DELETE:
Subquery dapat digunakan bersama dengan pernyataan
DELETE seperti dengan pernyataan lainnya yang disebutkan di atas. Sintaks dasar
adalah sebagai berikut:
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
Subqueries dengan Pernyataan IN:
Sebuah subquery dapat kembali nol atau lebih baris.
Untuk menggunakan subquery ini, Anda menggunakan IN operator di WHERE klausa.
contohnya yaitu sebagai berikut :
SELECT
film_id,
title
FROM
film
WHERE
film_id IN (
SELECT
inventory.film_id
FROM
rental
INNER JOIN inventory ON
inventory.inventory_id = rental.inventory_id
WHERE
return_date BETWEEN
'2005-05-29'
AND '2005-05-30'
);
Subqueries operator ALL
Operator ALL membandingkan nilai setiap nilai yang
dikembalikan oleh subquery. Sisi kanan adalah subquery kurung, yang harus
kembali tepat satu kolom. Ekspresi kiri dievaluasi dan dibandingkan dengan
setiap baris dari hasil subquery menggunakan operator tertentu, yang harus
menghasilkan hasil Boolean.
·
-Hasil ALL benar jika semua
baris menghasilkan benar (termasuk kasus di mana kembali subquery tidak ada
baris).
·
Hasilnya adalah palsu jika
ada hasil palsu ditemukan.
·
Hasilnya adalah NULL jika
perbandingan tidak kembali palsu untuk setiap baris, dan ia mengembalikan NULL
untuk setidaknya satu baris.
Subqueries dengan ANY / operator SOME
ANY Operator membandingkan nilai untuk setiap nilai
yang dikembalikan oleh subquery. Oleh karena itu kata kunci ANY (yang harus
mengikuti operator perbandingan) mengembalikan TRUE jika perbandingan itu BENAR
untuk APAPUN dari nilai-nilai dalam kolom yang kembali subquery.
SOME adalah sinonim untuk ANY. IN setara dengan =
ANY.
Row Subquery
Sebuah subquery baris adalah subquery yang
mengembalikan satu baris dan lebih dari satu nilai kolom. Anda dapat
menggunakan =,>, <,> =, <=, <>,! =, <=> Operator
perbandingan.
INDEX
Indeks adalah struktur khusus yang mengatur
referensi untuk data Anda yang membuatnya lebih mudah untuk mencari. Dalam
Postgres itu adalah salinan dari item yang Anda ingin indeks dikombinasikan
dengan referensi ke lokasi data aktual. Ketika mengakses data, Postgres akan
baik menggunakan beberapa bentuk indeks jika ada atau scan sekuensial. Sebuah
scan sekuensial adalah ketika mencari melalui semua data sebelum kembali hasil.
Berikut syntak umum index :
CREATE INDEX name ON table(column);
Indeks yang besar untuk mengakses data lebih cepat.
Dan kalian dapat membuat indeks pada satu atau banyak kolom pada suatu
waktu. Dalam kebanyakan kasus
menambahkan indeks kolom akan memungkinkan Anda untuk query data lebih cepat.
Namun, kerugiannya adalah bahwa untuk setiap indeks yang Anda miliki, Anda akan
memasukkan data pada kecepatan yang lebih lambat.
PostgreSQL menyediakan beberapa jenis index:
B-tree, Hash, GIST dan GIN. Setiap jenis indeks menggunakan algoritma yang
berbeda yang paling cocok untuk berbagai jenis pertanyaan. Secara default,
perintah CREATE INDEX membuat indeks B-pohon, yang sesuai dengan situasi yang
paling umum.
Indeks B-tree juga dapat digunakan untuk mengambil
data untuk disortir. Indeks hash hanya dapat menangani perbandingan kesetaraan
sederhana. Indeks GIST bukan jenis tunggal indeks, melainkan infrastruktur di
mana banyak strategi pengindeksan yang berbeda dapat diimplementasikan. Dengan
demikian, operator tertentu dengan yang indeks inti dapat digunakan bervariasi
tergantung pada strategi pengindeksan (kelas operator). Indeks GIST juga mampu
mengoptimalkan "terdekat-tetangga" pencarian. Indeks GIN terbalik
indeks yang dapat menangani nilai-nilai yang mengandung lebih dari satu kunci,
array misalnya. Seperti Intisari, GIN dapat mendukung banyak strategi
pengindeksan yang ditetapkan pengguna yang berbeda dan operator tertentu dengan
yang indeks GIN dapat digunakan bervariasi tergantung pada strategi
pengindeksan.
FUNGSI STRING
PostgreSQL fungsi trim digunakan untuk menghapus
semua karakter yang ditentukan baik dari awal atau akhir dari string.
PostgreSQL fungsi string dapat digunakan untuk memanipulasi dan memeriksa
berbagai jenis query secara independen atau dalam tabel. Salah satu dari daftar
10 fungsi string yaitu trim. Berikut sintaks fungsi trim PostgreSQL adalah:
trim( [ leading | trailing | both ] [
trim_character ] from string )
keterangan Parameter :
-
leading = menghapus
trim_character dari depan string.
-
trailing = menghapus
trim_character dari akhir string.
-
both = menghapus
trim_character dari bagian depan dan akhir dari string.
-
trim_character adalah
serangkaian karakter yang akan dihapus dari string. Jika parameter ini
dihilangkan, fungsi trim akan menghapus ruang karakter dari string.
Hasil praktikum
Menggunakan SQL Shell (PSQL)
Server
[localhost]:
Database
[postgres]:
Port [5432]:
Username
[postgres]: ayu
Password for
user ayu:
psql (9.3.5)
WARNING: Console
code page (850) 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
ayu13650039
WARNING: Console
code page (850) differs from Windows code page (1252)
8-bit characters might not work
correctly. See psql reference
page "Notes for Windows
users" for details.
You are now
connected to database "ayu13650039" as user "ayu".
ayu13650039=>
select * from fakultas;
id_fak | nama_fak
--------+-----------
2 | Psikologi
3 | humaniora
1 | SAINTEK
4 | Tarbiyah
5 | Ekonomi
(5 rows)
ayu13650039=>
select * from mahasiswa;
nim_mah | nama_mah | alamat_mah | id_fak
| no_tlp | gender
---------+----------+------------+--------+--------------+--------
14 | luki | ponorogo |
2 | 08257656879 | L
11 | Sinta | malang
| 1 | 0856789012 | P
13 | Wana | kediri |
4 | 085345673645 | P
15 | adi | malang |
1 | 089873654353 | L
16 | Egi | mojokerto | 1 | 085765432123 | P
17 | runi | bali |
1 | 0857789012 | P
12 | edi | mojokerto |
3 | 985245678213 | P
(7 rows)
1. Tampilkan nama fakultas
dan jumlah mahasiswa
yang mampunyai ketentuan nama fakultas yang dimunculkan
dengan jumlah mahasiswanya terkecil!
ayu13650039=>
select nama_fak, count(*) as jumlah_mah from mahasiswa m, fakultas
f where m.id_fak=f.id_fak group by nama_fak
order by jumlah_mah asc limit 1;
nama_fak
| jumlah_mah
-----------+------------
Psikologi | 1
(1 row)
2. Tampilkan nama mahasiswa,
nama fakultas, alamat
dengan syarat nama
fakultas sama dengan edi dan
alamatnya tidak sama dengan luki!
ayu13650039=> select nama_mah, nama_fak,
alamat_mah from mahasiswa m, fakultas f
where
m.id_fak=f.id_fak and nama_fak in (select nama_fak from mahasiswa m, faku
ltas f where m.id_fak=f.id_fak and nama_mah= 'adi'
and alamat_mah <> (select ala
mat_mah from mahasiswa where nama_mah = 'luki'));
nama_mah |
nama_fak | alamat_mah
----------+----------+------------
Sinta | SAINTEK
| malang
adi | SAINTEK
| malang
Egi | SAINTEK
| mojokerto
runi | SAINTEK
| bali
(4 rows)
3. 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!
ayu13650039=> create index alamat_index on
mahasiswa (alamat_mah);
CREATE INDEX
ayu13650039=> \d mahasiswa
Table "public.mahasiswa"
Column |
Type | Modifiers
------------+-----------------------+-----------
nim_mah | integer | not null
nama_mah | character varying(25) |
alamat_mah |
character varying(30) |
id_fak | integer | not null
no_tlp | character varying(12) |
gender | character varying(15) |
Indexes:
"mahasiswa_pkey" PRIMARY KEY, btree (nim_mah, id_fak)
"alamat_index" btree (alamat_mah)
Foreign-key constraints:
"mahasiswa_id_fak_fkey" FOREIGN KEY (id_fak) REFERENCES
fakultas(id_fak)
ayu13650039=> create unique index namaFak_index
on fakultas (nama_fak);
CREATE INDEX
ayu13650039=> \d fakultas
Table "public.fakultas"
Column |
Type | Modifiers
----------+-----------------------+-----------
id_fak | integer | not null
nama_fak |
character varying(20) |
Indexes:
"fakultas_pkey" PRIMARY KEY, btree (id_fak)
"namafak_index" UNIQUE, btree (nama_fak)
Referenced by:
TABLE
"mahasiswa" CONSTRAINT "mahasiswa_id_fak_fkey" FOREIGN KEY
(id_fak) RE
FERENCES fakultas(id_fak)
4. Buat kolom nama di
mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati
perbedaannya !
ayu13650039=> alter table mahasiswa add unique
(nama_mah);
ALTER TABLE
ayu13650039=> \d mahasiswa
Table "public.mahasiswa"
Column |
Type | Modifiers
------------+-----------------------+-----------
nim_mah | integer | not null
nama_mah | character varying(25) |
alamat_mah |
character varying(30) |
id_fak |
integer | not null
no_tlp | character varying(12) |
gender | character varying(15) |
Indexes:
"mahasiswa_pkey" PRIMARY KEY, btree (nim_mah, id_fak)
"mahasiswa_nama_mah_key" UNIQUE CONSTRAINT, btree (nama_mah)
"alamat_index" btree (alamat_mah)
Foreign-key constraints:
"mahasiswa_id_fak_fkey" FOREIGN KEY (id_fak) REFERENCES
fakultas(id_fak)
ayu13650039=> insert into mahasiswa values (100,
'ayu', 'mojokerto',1,'085787654
321', 'P'), (103, 'ayu', 'malang', 3, '085789049876',
'P');
ERROR:
duplicate key value violates unique constraint
"mahasiswa_nama_mah_key"
DETAIL: Key
(nama_mah)=(ayu) already exists.
5. Pindahkan data
dari tabel mahasiswa,
fakultas ambil kolom
nim, nama mahasiswa, alamat, nama fakultas ke tabel
baru yang dinamai „tabel identitas‟.
ayu13650039=> select nim_mah, nama_mah,
alamat_mah, nama_fak into identitas from
mahasiswa m,
fakultas f where m.id_fak=f.id_fak;
SELECT 7
ayu13650039=> select * from identitas;
nim_mah |
nama_mah | alamat_mah | nama_fak
---------+----------+------------+-----------
14 |
luki | ponorogo | Psikologi
11 |
Sinta | malang | SAINTEK
13 |
Wana | kediri | Tarbiyah
15 |
adi | malang | SAINTEK
16 |
Egi | mojokerto | SAINTEK
17 |
runi | bali | SAINTEK
12 |
edi | mojokerto | humaniora
(7 rows)
6. Buatlah contoh
penggunaan check pada
sub bab pembahasan
CHECK. Kemudian masukkan beberapa
data baik yang sesuai dengan criteria check maupun yang bukan dan amati
perbedaannya.
ayu13650039=> alter table mahasiswa add check
(gender in ('L','P'));
ALTER TABLE
ayu13650039=> insert into mahasiswa values (28,
'ayu', 'mojokerto',3,'0857876543
21', 'B');
ERROR: new
row for relation "mahasiswa" violates check constraint
"mahasiswa_ge
nder_check"
DETAIL:
Failing row contains (28, ayu, mojokerto, 3, 085787654321, B).
7. 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!
ayu13650039=> insert into mahasiswa values (44,
' ayu+++', 'malang',1,'0857876
54321', 'P');
INSERT 0 1
ayu13650039=> select * from mahasiswa;
nim_mah |
nama_mah | alamat_mah | id_fak | no_tlp
| gender
---------+-----------+------------+--------+--------------+--------
14 |
luki | ponorogo |
2 | 08257656879 | L
11 |
Sinta | malang |
1 | 0856789012 | P
13 |
Wana | kediri |
4 | 085345673645 | P
15 |
adi | malang |
1 | 089873654353 | L
16 |
Egi | mojokerto |
1 | 085765432123 | P
17 |
runi | bali |
1 | 0857789012 | P
12 |
edi | mojokerto |
3 | 985245678213 | P
44
| ayu+++ | malang |
1 | 085787654321 | P
(8 rows)
ayu13650039=> select trim (both '+, ' from
nama_mah) from mahasiswa;
btrim
-------
luki
Sinta
Wana
adi
Egi
runi
edi
ayu
(8 rows)
8. Munculkan data mahasiswa dengan hilangkan karakter “+” di
akhir data dan karakter “a” di awal kata pada kolom nama!
ayu13650039=> select trim (both ' a,+' from nama_mah) from
mahasiswa;
btrim
-------
luki
Sint
Wan
di
Egi
runi
edi
yu
(8 rows)
ayu13650039=>
Pekerjaan rumah
Menggunakan
CMD mysql pada XAMPP
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Ayu>cd..
C:\Users>cd..
C:\>cd xampp\x\mysql\bin
C:\xampp\x\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> use ayu13650039;
Database changed
mysql> select * from fakultas;
+--------+-----------+
| id_fak | nama_fak |
+--------+-----------+
| 1 | SAINTEK |
| 2 | Psikologi |
| 3 | Humaniora |
| 4 | Tarbiyah |
| 5 | Ekonomi |
+--------+-----------+
5 rows in set (0.08 sec)
mysql> select * from mahasiswa;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp | gender |
+---------+----------+------------+--------+--------------+--------+
| 11 | Sinta | malang
| 1 | 085672837462 | P |
| 12 | edi | mojokerto |
3 | 092837480912 | P |
| 13 | wana | kediri |
4 | 098765432123 | P |
| 14 | luki | ponorogo |
2 | 08257656879 | L |
| 15 | adi | malang |
1 | 053647586978 | L |
| 16 | Egi | mojokerto |
1 | 085726354766 | P |
| 17 | runi | bali |
1 | 087736452623 | L |
+---------+----------+------------+--------+--------------+--------+
7 rows in set (0.12 sec)
1.
Tampilkan nama
fakultas dan jumlah
mahasiswa yang mampunyai
ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya
terkecil!
mysql> select
nama_fak, count(*) as jumlah_mah from mahasiswa m, fakultas f wher
e
m.id_fak=f.id_fak group by nama_fak order by jumlah_mah asc limit 1;
+-----------+------------+
| nama_fak | jumlah_mah |
+-----------+------------+
| Psikologi
| 1 |
+-----------+------------+
1 row in set (0.27
sec)
2.
Tampilkan nama
mahasiswa, nama fakultas,
alamat dengan syarat
nama fakultas sama dengan edi dan alamatnya tidak sama
dengan luki!
mysql> select nama_mah, nama_fak, alamat_mah from
mahasiswa m, fakultas f where
m.id_fak=f.id_fak and nama_fak in (select nama_fak
from mahasiswa m, fakultas f
where m.id_fak=f.id_fak and nama_mah='adi' and
alamat_mah <> (select alamat_mah
from mahasiswa where nama_mah = 'luki'));
+----------+----------+------------+
| nama_mah | nama_fak | alamat_mah |
+----------+----------+------------+
| Sinta |
SAINTEK | malang |
| adi |
SAINTEK | malang |
| Egi |
SAINTEK | mojokerto |
| runi |
SAINTEK | bali |
+----------+----------+------------+
4 rows in set (0.04 sec)
3. 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!
mysql> create
index alamat_index on mahasiswa(alamat_mah);
Query OK, 0 rows
affected (0.24 sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql> desc
mahasiswa;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| nim_mah | int(11) | NO
| PRI | NULL | |
| nama_mah | varchar(25) | YES | |
NULL | |
| alamat_mah |
varchar(30) | YES | MUL | NULL |
|
| id_fak | int(11) | NO
| PRI | NULL | |
| no_tlp | varchar(12) | YES | |
NULL | |
| gender | varchar(2) | YES
| | NULL |
|
+------------+-------------+------+-----+---------+-------+
6 rows in set
(0.10 sec)
mysql> create
unique index namaFak_index on fakultas(nama_fak);
Query OK, 0 rows
affected (0.11 sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql> desc
fakultas;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id_fak | int(11)
| NO | PRI | NULL |
|
| nama_fak |
varchar(20) | YES | UNI | NULL |
|
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
4. Buat kolom nama di mahasiswa
menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya !
mysql> alter
table mahasiswa add unique(nama_mah);
Query OK, 0 rows
affected (0.12 sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql> desc
mahasiswa;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| nim_mah | int(11) | NO
| PRI | NULL | |
| nama_mah | varchar(25) | YES | UNI | NULL |
|
| alamat_mah |
varchar(30) | YES | MUL | NULL |
|
| id_fak | int(11) | NO
| PRI | NULL | |
| no_tlp | varchar(12) | YES | |
NULL | |
| gender | varchar(2) | YES
| | NULL | |
+------------+-------------+------+-----+---------+-------+
6 rows in set
(0.02 sec)
mysql> insert
into mahasiswa values(100, 'ayu', 'mojokerto', 3, '085676564213',
'P'), (103,
'ayu', 'malang', 2, '085671234123', 'P');
ERROR 1062 (23000): Duplicate entry
'ayu' for key 'nama_mah'
5. Pindahkan data
dari tabel mahasiswa,
fakultas ambil kolom
nim, nama mahasiswa, alamat, nama fakultas ke tabel
baru yang dinamai „tabel identitas‟.
mysql> select
nim_mah, nama_mah, alamat_mah, nama_fak into identitas from mahasi
swa m, fakultas
f where m.id_fak=f.id_fak;
ERROR 1327 (42000): Undeclared variable:
identitas
6. Buatlah contoh
penggunaan check pada
sub bab pembahasan
CHECK. Kemudian masukkan beberapa
data baik yang sesuai dengan criteria check maupun yang bukan dan amati
perbedaannya.
mysql> alter
table mahasiswa add check(gender in('L', 'P'));
Query OK, 0 rows
affected (0.01 sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql> insert
into mahasiswa values(500, 'ayu', 'mojokerto', 1, '085676564213',
'B');
Query OK, 1 row
affected (0.01 sec)
mysql> select
* from mahasiswa;
+---------+-----------+------------+--------+--------------+--------+
| nim_mah |
nama_mah | alamat_mah | id_fak |
no_tlp | gender |
+---------+-----------+------------+--------+--------------+--------+
| 11 | Sinta | malang |
1 | 085672837462 | P |
| 12 | edi | mojokerto |
3 | 092837480912 | P |
| 13 | wana | kediri |
4 | 098765432123 | P |
| 14 | luki | ponorogo |
2 | 08257656879 | L |
| 15 | adi | malang |
1 | 053647586978 | L |
| 16 | Egi | mojokerto |
1 | 085726354766 | P |
| 17 | runi | bali |
1 | 087736452623 | L |
| 500 | ayu | mojokerto |
1 | 085676564213 | B |
+---------+-----------+------------+--------+--------------+--------+
9 rows in set
(0.00 sec)
7. 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!
mysql> insert into mahasiswa
values(50, ' ayu+++', 'malang', 1,
'085676564213'
, 'P');
Query OK, 1 row affected (0.01
sec)
mysql> select * from
mahasiswa;
+---------+-----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp | gender |
+---------+-----------+------------+--------+--------------+--------+
| 11 | Sinta | malang |
1 | 085672837462 | P |
| 12 | edi | mojokerto |
3 | 092837480912 | P |
| 13 | wana | kediri |
4 | 098765432123 | P |
| 14 | luki | ponorogo |
2 | 08257656879 | L |
| 15 | adi | malang |
1 | 053647586978 | L |
| 16 | Egi | mojokerto |
1 | 085726354766 | P |
| 17 | runi | bali |
1 | 087736452623 | L |
| 50 |
ayu+++ | malang | 1 | 085676564213 | P |
| 500 | ayu | mojokerto |
1 | 085676564213 | B |
+---------+-----------+------------+--------+--------------+--------+
9 rows in set (0.00 sec)
mysql> select trim(both '+, '
from nama_mah)from mahasiswa;
+--------------------------------+
| trim(both '+, ' from nama_mah)
|
+--------------------------------+
| ayu+++ |
| adi |
| ayu |
| edi |
| Egi |
| luki |
| runi |
| Sinta |
| wana |
+--------------------------------+
9 rows in set (0.10 sec)
8. Munculkan data mahasiswa dengan hilangkan karakter “+” di
akhir data dan karakter “a” di awal kata pada kolom nama!
mysql> select
trim(both ' a,+' from nama_mah) from mahasiswa;
+---------------------------------+
| trim(both ' a,+'
from nama_mah) |
+---------------------------------+
| ayu+++ |
| adi |
| ayu |
| edi |
| Egi |
| luki |
| runi |
| Sinta |
| wana |
+---------------------------------+
9 rows in set
(0.20 sec)
Perbandingan Antara SQL
Shell (psql) dan CMD mysql pada XAMPP
Setelah melakukan
praktikum dan pekerjaan rumah, terdapat beberapa query POSTGRESQL dan CMD MySQL
yang sama yaitu pada soal nomor 1-4. Selain terdapat persamaan syntak, ada juga
perbedaan syntak yaitu sebagai berikut :
1.
Perbedaan Pertama
Perbedaan
pertama yaitu pada syntak soal no.5
yaitu tentang pengambilan sebagian data menjadi data permanen dari 2 tabel
berbeda ke suatu tabel tanpa menghapus
data. Pada posgreSQL, pengambilan data untuk satu tabel di lakukan secara
langsung dengan perintah ‘SELECT INTO’, sedangkan pada CMD MySQL akan error jika menggunakan syntak ‘SELECT
INTO’ karena pada CMD MySQL harus dibuat tabelnya dahulu. Berikut buktinya :
Pada
PostgreSQL :
ayu13650039=> select nim_mah, nama_mah, alamat_mah,
nama_fak into identitas from
mahasiswa m, fakultas f where m.id_fak=f.id_fak;
SELECT 7
Pada CMD mysql :
mysql> select nim_mah, nama_mah,
alamat_mah, nama_fak into identitas from mahasi
swa m, fakultas f where
m.id_fak=f.id_fak;
ERROR 1327 (42000): Undeclared variable: identitas
2.
Perbedaan ke Dua
Perbedaan kedua yaitu pada soal no.6, yaitu tentang fungsi ‘CHECK’. Pada postgreSQL, fungsi check
berfungsi untuk membatasi dan apabila telah di select kolom tertentu dan di
inputkan data baru dengan data yang selain di-check pada kolom tertentu
tersebut, maka akan terjadi Error. Berbeda pada CMD MySQL yang mana walaupun
syntak nya sudah ‘OK’, tetapi apabila dimasukkan data yang selain di-check pada
kolom tertentu tadi, datanya tetap masuk. Berikut pembuktiannya :
Pada PosgreSQL
:
ayu13650039=> alter table mahasiswa add check (gender in
('L','P'));
ALTER TABLE
ayu13650039=> insert into mahasiswa values (28, 'ayu',
'mojokerto',3,'085787654321', 'B');
ERROR: new row for
relation "mahasiswa" violates check constraint "mahasiswa_gender_check"
DETAIL: Failing row
contains (28, ayu, mojokerto, 3, 085787654321, B).
Pada CMD MySQL :
mysql> alter table mahasiswa add
check(gender in('L', 'P'));
Query OK, 0 rows affected (0.01
sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql> insert into mahasiswa
values(500, 'ayu', 'mojokerto', 1, '085676564213',
'B');
Query OK, 1 row affected (0.01 sec)
mysql> select * from mahasiswa;
+---------+-----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp | gender |
+---------+-----------+------------+--------+--------------+--------+
| 11 | Sinta | malang |
1 | 085672837462 | P |
| 12 | edi | mojokerto |
3 | 092837480912 | P |
| 13 | wana |
kediri | 4 | 098765432123 | P |
| 14 | luki | ponorogo |
2 | 08257656879 | L |
| 15 | adi | malang |
1 | 053647586978 | L |
| 16 | Egi | mojokerto |
1 | 085726354766 | P |
| 17 | runi | bali |
1 | 087736452623 | L |
| 500 | ayu | mojokerto |
1 | 085676564213 | B |
+---------+-----------+------------+--------+--------------+--------+
9 rows in set (0.00 sec)
3.
Perbedaan ke Tiga
Pada
perbedaan ketiga yaitu pada no 7 dan 8. Pada CMD MySQL, fungsi trim tidak
berfungsi karena penggunaan trim pada
MySQL harus di ikuti oleh nama String, bukan nama kolom seperti pada
PostgreSQL. Berikut buktinya :
Pada PosgreSQL
:
ayu13650039=> insert into mahasiswa values (44, ' ayu+++', 'malang',1,'0857876
54321', 'P');
INSERT 0 1
ayu13650039=> select trim (both '+, ' from nama_mah) from
mahasiswa;
btrim
-------
luki
Sinta
Wana
adi
Egi
runi
edi
ayu
(8 rows)
ayu13650039=>
select trim (both ' a,+' from nama_mah) from mahasiswa;
btrim
-------
luki
Sint
Wan
di
Egi
runi
edi
yu
(8 rows)
Pada CMD MySQL :
mysql> insert into mahasiswa values(50, ' ayu+++', 'malang', 1, '085676564213'
, 'P');
Query OK, 1 row affected (0.01 sec)
mysql> select trim(both '+, ' from nama_mah)from
mahasiswa;
+--------------------------------+
| trim(both '+, ' from nama_mah) |
+--------------------------------+
| ayu+++ |
| adi |
| ayu |
| edi |
| Egi |
| luki |
| runi |
| Sinta |
| wana |
+--------------------------------+
9 rows in set (0.10 sec)
mysql> select trim(both ' a,+'
from nama_mah) from mahasiswa;
+---------------------------------+
| trim(both ' a,+' from nama_mah) |
+---------------------------------+
| ayu+++ |
| adi |
| ayu |
| edi |
| Egi |
| luki |
| runi |
| Sinta |
| wana |
+---------------------------------+
9 rows in set (0.20 sec)
Kesimpulan
Pada kesimpulannya, subquery adalah sebuah query didalam
query yang mana bisa disebut dengan nested query. Setelah praktikum dan mengerjakan pekerjaan rumah, saya
menyimpulan bahwa syntak pada postgreSQL dan CMD MySQL tidak semua sama. Ada beberapa
syntak yang sama dan ada juga yang berbeda. Syntak yang berbeda yaitu pada
pengopian data ke sebuah tabel, fungsi check dan fungsi trim.
Kritik /Saran
pada praktikum kali ini, masih banyak juga kekurangan pada
laporan ini sehingga kritik dan saran para pembaca khususnya para senior yang
menguasai berbagai DBMS untuk meluruskan jika terjadi sedikit ketidak lurusan
pada postingan kali ini.
Semoga ilmu sedikit ini bisa bermanfaat untuk pembaca. Terima kasih. ^_^
DAFTAR PUSTAKA
Tidak ada komentar:
Posting Komentar