Selasa, 18 November 2014

PRAKTIKUM DESAIN BASIS DATA 7



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