Selasa, 14 Oktober 2014

PRAKTIKUM DESAIN BASIS DATA 4



Praktikum Desain Basis data 4
Pengenalan Operator Dasar
SQL Shell Vs CMD mysql Pada XAMPP

Landasan Teori

Pada minggu ini, saya akan membahas tentang opertor dasar. Saya ingin mengingatkan kembali kembali tentang PostgreSQL.
PostgreSQL, sering kita sebut "Postgres", adalah sebuah sistem manajemen database object-relational (ORDBMS) dengan penekanan pada diperpanjang dan standar-kepatuhan. Sebagai server database, fungsi utamanya adalah untuk menyimpan data, aman dan mendukung praktik terbaik, dan mengambilnya kemudian, seperti yang diminta oleh aplikasi perangkat lunak lain, baik itu orang-orang di komputer yang sama atau yang berjalan di komputer lain melalui jaringan (termasuk Internet).
(http://en.wikipedia.org/wiki/PostgreSQL)

Ada beberapa cara untuk query data dari tabel dengan menggunakan SELECT statement. saya akan mulai dengan data dasar seperti memilih kolom, penyaringan baris, dan menyortir hasil set. Selain itu, kita akan membahas beberapa teknik seleksi data canggih seperti inner join, left join, union, dan subquery.
# Pilih pernyataan - memilih data dari tabel.
# Order By - macam set hasil yang dikembalikan oleh SELECT pernyataan.
# Select distinct - menyembunyikan duplikat baris dalam hasil set.
# Where - menyaring baris berdasarkan kondisi.
# In - memilih data yang sesuai dengan nilai dalam daftar nilai.
# Between - memilih data yang rentang nilai.
# As - Data memilih berdasarkan pencocokan pola.
# Union - menggabungkan set hasil yang dikembalikan oleh beberapa query ke dalam hasil set.
# Inner join - memilih baris dari satu tabel yang memiliki baris yang sesuai dalam tabel lainnya.
# left join - memilih baris dari satu tabel yang mungkin atau mungkin tidak memiliki baris yang sesuai dalam tabel lainnya.
# Grup by - membagi baris ke dalam kelompok dan menerapkan fungsi agregat pada masing-masing kelompok.
# Having - berlaku kondisi untuk kelompok dibagi dengan GROUP BY klausa.
# Subquery - menulis query bersarang di dalam permintaan yang lain.
(http://www.postgresqltutorial.com/)

Dari data yang di atas, ada beberapa operator relasi yang di gunakan atau di butuhkan untuk menampilkan data, yaitu :
ada juga operator logika yang sering digunakan adalah AND, OR dan NOT.
(dasarSQL.pdf)

Regular  Expression  atau  Regex,  merupakan  sebuah  teknik  atau  cara  untuk mencari  persamaan - presamaan string  atau  data  dan memanipulasinya.  Biasanya  lebih sering  digunakan  untuk  string. Didalam PostgreSQL disimbolkan dengan “~”. Pada operator regexp ini, ada beberapa variasi operator, yaitu :

- ~ attempts a case sensitive match
- ~* attempts a case insensitive match
- !~ attempts a case sensitive match, and returns true if the regex does not match any part of the subject string
- !~* attempts a case insensitive match, and returns true if the regex does not match any part of the subject string
(http://www.regular-expressions.info/postgresql.html)

Hasil praktikum
Menggunakan SQL Shell (PSQL)

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.

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 mahasiswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_tlp    | gender
---------+----------+------------+--------+-------------+--------
      14 | luki     | ponorogo   |      2 | 08257656879 | L
(1 row)

ayu13650039=> alter table mahasiswa add column gender varchar (20);
ERROR:  column "gender" of relation "mahasiswa" already exists
ayu13650039=> Select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | Psikologi
      3 | humaniora
(2 rows)

ayu13650039=> insert into fakultas values (1, 'SAINTEK'), (4, 'Tarbiyah'), (5, '
Ekonomi');
INSERT 0 3
ayu13650039=> Select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | Psikologi
      3 | humaniora
      1 | SAINTEK
      4 | Tarbiyah
      5 | Ekonomi
(5 rows)

ayu13650039=> insert into mahasiswa values (11, 'Sinta', 'malang', 1, '085678901
2', 'P'), (12, 'Binta', 'mojokerto', 3, '985245678213', 'P'), (13, 'Wana', 'kedi
ri', 4, '085345673645', 'P'), (15, 'adi', 'malang', 1, '089873654353', 'L'), (16
, 'Egi', 'mojokerto', 1, '085765432123', 'P'), (17, 'runi', 'bali', 1, '0857789012',
 'P');
INSERT 0 6
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
      12 | Binta    | mojokerto  |      3 | 985245678213 | 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
(7 rows)

1.  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.

ayu13650039=> Select nim_mah as nomor_identitas, nama_mah as nama, alamat_mah as
 alamat, id_fak as nama_fakultas from mahasiswa;
 nomor_identitas | nama  |  alamat   | nama_fakultas
-----------------+-------+-----------+---------------
              14 | luki  | ponorogo  |             2
              11 | Sinta | malang    |             1
              12 | Binta | mojokerto |             3
              13 | Wana  | kediri    |             4
              15 | adi   | malang    |             1
              16 | Egi   | mojokerto |             1
              17 | runi  | bali      |             1
(7 rows)

2.  Tampilkan  nama  mahasiswa  fakultas  saintek  yang  berjenis  kelamin  laki-laki.
Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki.

ayu13650039=> select * from mahasiswa where id_fak=1 and gender='L';
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      15 | adi      | malang     |      1 | 089873654353 | L
(1 row)


ayu13650039=> select * from mahasiswa where id_fak=1 or gender='L';
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      14 | luki     | ponorogo   |      2 | 08257656879  | L
      11 | Sinta    | malang     |      1 | 0856789012   | P
      15 | adi      | malang     |      1 | 089873654353 | L
      16 | Egi      | mojokerto  |      1 | 085765432123 | P
      17 | runi     | bali       |      1 | 0857789012   | P
(5 rows)

3.  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.

Menggunakan Between dan tanpa menggunakan Between
ayu13650039=> select * from mahasiswa where nim_mah between 13 and 15;
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      13 | Wana     | kediri     |      4 | 085345673645 | P
      14 | luki     | ponorogo   |      2 | 08257656879  | L
      15 | adi      | malang     |      1 | 089873654353 | L
(3 rows)


ayu13650039=> select * from mahasiswa where nim_mah >=13 and nim_mah <= 15;
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      13 | Wana     | kediri     |      4 | 085345673645 | P
      14 | luki     | ponorogo   |      2 | 08257656879  | L
      15 | adi      | malang     |      1 | 089873654353 | L
(3 rows)

Menggunakan Not Between dan tanpa menggunakan Not Between
ayu13650039=> select * from mahasiswa where nim_mah not between 13 and 15;
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      11 | Sinta    | malang     |      1 | 0856789012   | P
      12 | Binta    | mojokerto  |      3 | 985245678213 | P
      16 | Egi      | mojokerto  |      1 | 085765432123 | P
      17 | runi     | bali       |      1 | 0857789012   | P
(4 rows)


ayu13650039=> select * from mahasiswa where nim_mah <13 or nim_mah >15;
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      11 | Sinta    | malang     |      1 | 0856789012   | P
      12 | Binta    | mojokerto  |      3 | 985245678213 | P
      16 | Egi      | mojokerto  |      1 | 085765432123 | P
      17 | runi     | bali       |      1 | 0857789012   | P
(4 rows)

4.  Tampilkan mahasiswa dengan nomor 2,3,5 menggunakan operator IN.
ayu13650039=> select * from mahasiswa where nim_mah in (12, 13, 15);
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      12 | Binta    | mojokerto  |      3 | 985245678213 | P
      13 | Wana     | kediri     |      4 | 085345673645 | P
      15 | adi      | malang     |      1 | 089873654353 | L
(3 rows)

5.  Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf “a”.
ayu13650039=> select * from mahasiswa where nama_mah like 'a%';
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      15 | adi      | malang     |      1 | 089873654353 | L
(1 row)

6.  Tampilkan  semua  data  mahasiswa  yang namanya mempunyai akhiran “a” dan huruf
ke-3 dari nama tersebut terdapat huruf “n”.

ayu13650039=> select * from mahasiswa where nama_mah like '__n%%a';
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      11 | Sinta    | malang     |      1 | 0856789012   | P
      12 | Binta    | mojokerto  |      3 | 985245678213 | P
      13 | Wana     | kediri     |      4 | 085345673645 | P
(3 rows)

7.  Tampilkan  nomor  fakultas  di  tabel  mahasiswa  dengan  nomor  harus  tidak  ada  yang
sama dari baris pertama sampai akhir.

ayu13650039=> select distinct id_fak from mahasiswa;
 id_fak
--------
      4
      1
      3
      2
(4 rows)

8.  Tampilkan data mahasiswa 3 baris saja.
ayu13650039=> select * from mahasiswa limit 3;
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      14 | luki     | ponorogo   |      2 | 08257656879  | L
      11 | Sinta    | malang     |      1 | 0856789012   | P
      12 | Binta    | mojokerto  |      3 | 985245678213 | P
(3 rows)

9.  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.

ayu13650039=> select * from mahasiswa where nama_mah ~ 'a[rtd]';
 nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      15 | adi      | malang     |      1 | 089873654353 | L
(1 row)

10. Buatlah tabel dengan nama organ_dalam dan organ_luar sebagai berikut :




ayu13650039=> create table organ_dalam (nomor integer not null primary key, nama
 varchar (20));
CREATE TABLE
ayu13650039=> insert into organ_dalam values (1, 'jantung'), (2, 'paru-paru'), (
3, 'tenggorokkan');
INSERT 0 3
ayu13650039=> select * from organ_dalam;
 nomor |     nama
-------+--------------
     1 | jantung
     2 | paru-paru
     3 | tenggorokkan
(3 rows)

ayu13650039=> create table organ_luar (nomor integer not null primary key, nama
varchar (20));
CREATE TABLE
ayu13650039=> insert into organ_luar values (1, 'hidung'), (2, 'mata'), (3, 'ten
ggorokkan');
INSERT 0 3
ayu13650039=> select * from organ_luar;
 nomor |     nama
-------+--------------
     1 | hidung
     2 | mata
     3 | tenggorokkan
(3 rows)

Tampilkan  data dari  kedua  tabel  tersebut  menggunakan  UNION,  EXCEPT  dan INTERSECT

ayu13650039=> select *from organ_dalam union select *from organ_luar;
 nomor |     nama
-------+--------------
     2 | paru-paru
     1 | jantung
     2 | mata
     1 | hidung
     3 | tenggorokkan
(5 rows)


ayu13650039=> select *from organ_dalam except select *from organ_luar;
 nomor |   nama
-------+-----------
     2 | paru-paru
     1 | jantung
(2 rows)


ayu13650039=> select *from organ_dalam intersect select *from organ_luar;
 nomor |     nama
-------+--------------
     3 | tenggorokkan
(1 row)


ayu13650039=>

Pekerjaan rumah
Menggunakan CMD mysql pada XAMPP

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.
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  |
+--------+-----------+
|      2 | Psikologi |
|      3 | Humaniora |
+--------+-----------+
2 rows in set (0.10 sec)

mysql> insert into fakultas values (1, 'SAINTEK'), (4, 'Tarbiyah'), (5, 'Ekonomi');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> Select * from fakultas;
+--------+-----------+
| id_fak | nama_fak  |
+--------+-----------+
|      1 | SAINTEK   |
|      2 | Psikologi |
|      3 | Humaniora |
|      4 | Tarbiyah  |
|      5 | Ekonomi   |
+--------+-----------+
5 rows in set (0.00 sec)

mysql> Select * from mahasiswa;
+---------+----------+------------+--------+-------------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp      |
+---------+----------+------------+--------+-------------+
|      14 | luki     | ponorogo   |      2 | 08257656879 |
+---------+----------+------------+--------+-------------+
1 row in set (0.03 sec)

mysql> alter table mahasiswa add column gender varchar (2);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> update mahasiswa set gender = 'L' where nim_mah=14;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> Select * from mahasiswa;
+---------+----------+------------+--------+-------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp      | gender |
+---------+----------+------------+--------+-------------+--------+
|      14 | luki     | ponorogo   |      2 | 08257656879 | L      |
+---------+----------+------------+--------+-------------+--------+
1 row in set (0.00 sec)

mysql> insert into mahasiswa values (11, 'Sinta', 'malang', 1, '085672837462', '
P'), (12, 'binta', 'mojokerto', 3, '092837480912', 'P'), (13, 'wana', 'kediri',
4, '098765432123', 'P'), (15, 'adi', 'malang', 1, '053647586978', 'L'), (16, 'Eg
i', 'mojokerto', 1, '085726354766', 'P'), (17, 'runi', 'bali', 1, '087736452623'
, 'L');
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> Select * from mahasiswa;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | 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.00 sec)


1.  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.
mysql> Select nim_mah as nomor_identitas, nama_mah as nama, alamat_mah as alamat
, id_fak as nama_fakultas from mahasiswa;
+-----------------+-------+-----------+---------------+
| nomor_identitas | nama  | alamat    | nama_fakultas |
+-----------------+-------+-----------+---------------+
|              11 | Sinta | malang    |             1 |
|              12 | binta | mojokerto |             3 |
|              13 | wana  | kediri    |             4 |
|              14 | luki  | ponorogo  |             2 |
|              15 | adi   | malang    |             1 |
|              16 | Egi   | mojokerto |             1 |
|              17 | runi  | bali      |             1 |
+-----------------+-------+-----------+---------------+
7 rows in set (0.00 sec)


2.  Tampilkan  nama  mahasiswa  fakultas  saintek  yang  berjenis  kelamin  laki-laki.
Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki
mysql> select * from mahasiswa where id_fak=1 and gender='L';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      15 | adi      | malang     |      1 | 053647586978 | L      |
|      17 | runi     | bali       |      1 | 087736452623 | L      |
+---------+----------+------------+--------+--------------+--------+
2 rows in set (0.00 sec)

mysql> select * from mahasiswa where id_fak=1 or gender='L';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | 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      |
+---------+----------+------------+--------+--------------+--------+
5 rows in set (0.00 sec)


3.  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.
Menggunakan Between dan tanpa menggunakan Between
mysql> select * from mahasiswa where nim_mah between 13 and 15;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      13 | wana     | kediri     |      4 | 098765432123 | P      |
|      14 | luki     | ponorogo   |      2 | 08257656879  | L      |
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
3 rows in set (0.00 sec)

mysql> select * from mahasiswa where nim_mah >= 13 and nim_mah <= 15;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      13 | wana     | kediri     |      4 | 098765432123 | P      |
|      14 | luki     | ponorogo   |      2 | 08257656879  | L      |
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
3 rows in set (0.00 sec)

Menggunakan Not Between dan tanpa menggunakan Not Between
mysql> select * from mahasiswa where nim_mah not between 13 and 15;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | mojokerto  |      3 | 092837480912 | P      |
|      16 | Egi      | mojokerto  |      1 | 085726354766 | P      |
|      17 | runi     | bali       |      1 | 087736452623 | L      |
+---------+----------+------------+--------+--------------+--------+
4 rows in set (0.00 sec)

mysql> select * from mahasiswa where nim_mah < 13 or nim_mah > 15;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | mojokerto  |      3 | 092837480912 | P      |
|      16 | Egi      | mojokerto  |      1 | 085726354766 | P      |
|      17 | runi     | bali       |      1 | 087736452623 | L      |
+---------+----------+------------+--------+--------------+--------+
4 rows in set (0.00 sec)


4.  Tampilkan mahasiswa dengan nomor 2,3,5 menggunakan operator IN.

mysql> select * from mahasiswa where nim_mah in (12,13,15);
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      12 | binta    | mojokerto  |      3 | 092837480912 | P      |
|      13 | wana     | kediri     |      4 | 098765432123 | P      |
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
3 rows in set (0.00 sec)

5.  Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf “a”.

mysql> select * from mahasiswa where nama_mah like 'a%';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
1 row in set (0.00 sec)

6.  Tampilkan  semua  data  mahasiswa  yang namanya mempunyai akhiran “a” dan huruf
ke-3 dari nama tersebut terdapat huruf “n”.

mysql> select * from mahasiswa where nama_mah like '__n%%a';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | mojokerto  |      3 | 092837480912 | P      |
|      13 | wana     | kediri     |      4 | 098765432123 | P      |
+---------+----------+------------+--------+--------------+--------+
3 rows in set (0.00 sec)

7.  Tampilkan  nomor  fakultas  di  tabel  mahasiswa  dengan  nomor  harus  tidak  ada  yang
sama dari baris pertama sampai akhir.

mysql> select distinct id_fak from mahasiswa;
+--------+
| id_fak |
+--------+
|      1 |
|      3 |
|      4 |
|      2 |
+--------+
4 rows in set (0.00 sec)

8.  Tampilkan data mahasiswa 3 baris saja.

mysql> select * from mahasiswa limit 3;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | mojokerto  |      3 | 092837480912 | P      |
|      13 | wana     | kediri     |      4 | 098765432123 | P      |
+---------+----------+------------+--------+--------------+--------+
3 rows in set (0.00 sec)

9.  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.

mysql> select * from mahasiswa;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | 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.05 sec)

mysql> select * from mahasiswa where nama_mah ~ 'a [rtd]';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '~ 'a
[rtd]'' at line 1
mysql> select * from mahasiswa where nama_mah regexp 'a[rtd]';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
1 row in set (0.09 sec)

10. Buatlah tabel dengan nama organ_dalam dan organ_luar sebagai berikut :




mysql>create table organ_dalam ( nomor integer not null primary key, nama varchar (20));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into organ_dalam values (1, 'jantung'), (2, 'paru-paru'), (3, 'tenggorokan');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> Select * from organ_dalam;
+-------+-------------+
| nomor | nama        |
+-------+-------------+
|     1 | jantung     |
|     2 | paru-paru   |
|     3 | tenggorokan |
+-------+-------------+
3 rows in set (0.00 sec)

mysql> create table organ_luar ( nomor integer not null primary key, nama varchar (20));
Query OK, 0 rows affected (0.08 sec)


mysql> insert into organ_luar values (1, 'hidung'), (2, 'mata'), (3, 'tenggorokan');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> Select * from organ_luar;
+-------+-------------+
| nomor | nama        |
+-------+-------------+
|     1 | hidung      |
|     2 | mata        |
|     3 | tenggorokan |
+-------+-------------+
3 rows in set (0.00 sec)

Tampilkan  data dari  kedua  tabel  tersebut  menggunakan  UNION,  EXCEPT  dan INTERSECT

mysql> select * from organ_dalam union select * from organ_luar;
+-------+-------------+
| nomor | nama        |
+-------+-------------+
|     1 | jantung     |
|     2 | paru-paru   |
|     3 | tenggorokan |
|     1 | hidung      |
|     2 | mata        |
+-------+-------------+
5 rows in set (0.01 sec)

mysql> select * from organ_dalam except select * from organ_luar;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'select * from organ_luar' at line 1
mysql> Select nama from organ_dalam where nama not in (Select nama from organ_luar);
+-----------+
| nama      |
+-----------+
| jantung   |
| paru-paru |
+-----------+
2 rows in set (0.02 sec)

mysql> Select * from organ_dalam intersect select * from organ_luar;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'select * from organ_luar' at line 1
mysql> Select nama from organ_dalam where nama in (Select nama from organ_luar);

+-------------+
| nama        |
+-------------+
| tenggorokan |
+-------------+
1 row in set (0.12 sec)

mysql>


Perbandingan  Antara SQL Shell (psql) dan CMD mysql pada XAMPP
(evaluasi  meliputi  perbedaan  atau  kesamaan,  kelebihan  atau kekurangan, tambahan dari penulis)

Setelah melihat dari hasil praktikum menggunakan Postgress SQL dan pada hasil pekerjaan rumah menggunakan CMD mysql pada XAMPP, ada beberapa query yang memiliki kesamaan, yaitu pada query AS, AND, OR, BETWEEN, NOT BETWEEN, IN, NOT  IN, LIKE, DISTINCT, LIMIT dan trakhir yaitu UNION.
Selain ada kesamaan, juga ada beberapa query yang berbeda. Yaitu sebagai berikut :

1.       Perbedaan pertama

ayu13650039=> select * from mahasiswa where nama_mah ~ 'a[rtd]';
nim_mah | nama_mah | alamat_mah | id_fak |    no_tlp    | gender
---------+----------+------------+--------+--------------+--------
      15 | adi      | malang     |      1 | 089873654353 | L
(1 row)

( Perbedaan pertama yaitu pada query Regular Expression  atau regexp. Jika menggunakan psql, regexp bisa di simbolkan dengan ‘ ~ ’ (perhatikan query di atas). Tetapi pada CMD mysql, jika memakai simbol  itu (~), maka akan Error. Sehingga pada CMD mysql, regexp tidak boleh di simbolkan dan tetap menggunakan ‘regexp’(Perhatikan query di bawah ini). )

mysql> select * from mahasiswa where nama_mah ~ 'a [rtd]';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '~ 'a
[rtd]'' at line 1
mysql> select * from mahasiswa where nama_mah regexp 'a[rtd]';
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      15 | adi      | malang     |      1 | 053647586978 | L      |
+---------+----------+------------+--------+--------------+--------+
1 row in set (0.09 sec)


2.       Perbedaan ke-2

ayu13650039=> select *from organ_dalam except select *from organ_luar;
nomor |   nama
-------+-----------
     2 | paru-paru
     1 | jantung
(2 rows)

( Perbedaan kedua yaitu pada query except. Pada psql, except di gunakan untuk menampilkan query pertama saja, sedangkan
hasil query kedua dan yang sama dengan hasil query kedua tidak akan ditampilkan. Tetapi pada CMD mysql except tidak bisa digunakan atau akan Error jika digunakan, melainkan menggunakan ‘NOT IN’. Maka hasilnya juga akan sama. )

mysql> select * from organ_dalam except select * from organ_luar;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'select * from organ_luar' at line 1
mysql> Select nama from organ_dalam where nama not in (Select nama from organ_luar);
+-----------+
| nama      |
+-----------+
| jantung   |
| paru-paru |
+-----------+
2 rows in set (0.02 sec)


3.       Perbedaan ke-3

ayu13650039=> select *from organ_dalam intersect select *from organ_luar;
nomor |     nama
-------+--------------
     3 | tenggorokkan
(1 row)

( Perbedaan ketiga yaitu pada query intersect. Pada psql, intersect digunakan untuk menampilkan  semua  isi  dari  data yang memiliki  kesamaan diantara kedua hasil query  tersebut. Tetapi pada CMD mysql jika menggunakan intersect, maka akan Error. Sehingga pada CMD mysql menggunakan ‘IN’ maka hasilnya juga akan sama. )

mysql> Select * from organ_dalam intersect select * from organ_luar;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'select * from organ_luar' at line 1
mysql> Select nama from organ_dalam where nama in (Select nama from organ_luar);
+-------------+
| nama        |
+-------------+
| tenggorokan |
+-------------+
1 row in set (0.12 sec)


4.       Perbedaanke-4

Pada perbedaan ke empat, saya tidak membicarakan tentang query yang berbeda, tetapi tentang tampilan hasil antara 2 DBMS tersebut (Postgress SQL dan CMD mysql pada XAMPP).

Pada PSQL, hasil tampilannya itu menurut data yang di inputkan dan tidak bisa langsung berurutan. Bisa dilihat di tabel mahasiswa pada urutan nim_mah sebelum di inputkan dan setelah di inputkan. Dan juga pada tabel fakultas pada id_fak nya. Berikut querynya :

Sebelum di inputkan :
ayu13650039=> Select * from mahasiswa;
 nim_mah | nama_mah | alamat_mah | id_fak |   no_tlp    | gender
---------+----------+------------+--------+-------------+--------
      14 | luki     | ponorogo   |      2 | 08257656879 | L
(1 row)

Sesudah di inputkan :
ayu13650039=> insert into mahasiswa values (11, 'Sinta', 'malang', 1, '0856789012', 'P'), (12, 'Binta', 'mojokerto', 3, '985245678213', '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');
INSERT 0 6
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
      12 | Binta    | mojokerto  |      3 | 985245678213 | 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
(7 rows) (nim_mah 14 tetap di atas.)

Sebelum di inputkan :
ayu13650039=> Select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | Psikologi
      3 | humaniora
(2 rows)

Sesudah di inputkan :
ayu13650039=> insert into fakultas values (1, 'SAINTEK'), (4, 'Tarbiyah'), (5, 'Ekonomi');
INSERT 0 3
ayu13650039=> Select * from fakultas;
 id_fak | nama_fak
--------+-----------
      2 | Psikologi
      3 | humaniora
      1 | SAINTEK
      4 | Tarbiyah
      5 | Ekonomi
(5 rows) (id_fak 2 dan 3 tetap di atas)

Tidak seperti pada CMD mysql  yang langsung tertata berurutan. Berikut buktinya pada tabel mahasiswa dan tabel fakultas :

Sebelum di inputkan data :
mysql> Select * from mahasiswa;
+---------+----------+------------+--------+-------------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp      |
+---------+----------+------------+--------+-------------+
|      14 | luki     | ponorogo   |      2 | 08257656879 |
+---------+----------+------------+--------+-------------+
1 row in set (0.03 sec)

Sesudah di inputkan data :
mysql> insert into mahasiswa values (11, 'Sinta', 'malang', 1, '085672837462', 'P'), (12, 'binta', 'mojokerto', 3, '092837480912', 'P'), (13, 'wana', 'kediri', 4, '098765432123', 'P'), (15, 'adi', 'malang', 1, '053647586978', 'L'), (16, 'Egi', 'mojokerto', 1, '085726354766', 'P'), (17, 'runi', 'bali', 1, '087736452623', 'L');
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0
mysql> select * from mahasiswa;
+---------+----------+------------+--------+--------------+--------+
| nim_mah | nama_mah | alamat_mah | id_fak | no_tlp       | gender |
+---------+----------+------------+--------+--------------+--------+
|      11 | Sinta    | malang     |      1 | 085672837462 | P      |
|      12 | binta    | 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.05 sec)

Sebelum di inputkan data :
mysql> Select * from fakultas;
+--------+-----------+
| id_fak | nama_fak  |
+--------+-----------+
|      2 | Psikologi |
|      3 | Humaniora |
+--------+-----------+
2 rows in set (0.10 sec)

Sesudah di inputkan data :
mysql> insert into fakultas values (1, 'SAINTEK'), (4, 'Tarbiyah'), (5, 'Ekonomi');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> Select * from fakultas;
+--------+-----------+
| id_fak | nama_fak  |
+--------+-----------+
|      1 | SAINTEK   |
|      2 | Psikologi |
|      3 | Humaniora |
|      4 | Tarbiyah  |
|      5 | Ekonomi   |
+--------+-----------+
5 rows in set (0.00 sec)

Itulah salah satu kelebihan dari CMD mysql, yaitu tanpa harus di urutkan terlebih dulu, data yang di inputkan akan menyesuaikan sendiri.

Kesimpulan

Kesimpulan dari hasil praktikum menggunakan Postgress SQL, hasil pekerjaan rumah menggunakan CMD mysql XAMPP dan juga perbandingan antara kedua DBMS tersebut adalah pada dasarnya terdapat  :

# kesamaan query yaitu jika query ini dijalan pada PSQL dan CMD mysql maka tidak akan Error, yaitu pada query AS, AND, OR, BETWEEN, NOT BETWEEN, IN, NOT  IN, LIKE, DISTINCT, LIMIT dan trakhir yaitu UNION

# perbedaan query yaitu jika query pada PSQL di jalankan pada CMD mysql maka akan Error, yaitu pada query regexp, except dan intersect. Pada CMD mysql, except bisa di ganti dengan ‘NOT IN’ dan intersect bisa di ganti dengan ‘IN’.

# begitu juga tentang salah satu kelebihan CMD mysql yang tanpa di urutkan menurut primary keynya, maka akan urut sendiri (menyesuaikan sendiri).

# berarti salah satu kekurangan CMD mysql adalah harus di urutkan terlebih dahulu karena datanya setelah di inputkan itu tidak urut/tidak bisa menyesuikan sendiri.

Kritik /Saran

Tidak ada manusia yang terlahir sempurna, itulah sebuah nyanyian. Begitu juga tentang laporan ini yang hanya di buat oleh manusia biasa. Saya pribadi membutuhkan kritikan dari pembaca untuk membuat blog ini bisa sedikit lebih sempurna.
Saran saya, jika menginputkan banyak data dan harus urut nomor_idnya, maka gunakanlah CMD mysql. Tapi jika anda menginputkan data dan harus tidak urut melainkan sesuai dengan waktu/urutan data saat di inputkan, maka gunakanlah Postgress SQL. Tidak bosan saya mengingatkan lagi untuk selalu berdoa sebelum dan sesudah mengerjakannya.
Semoga bermanfaat untuk pembaca.. ^_^

Tidak ada komentar:

Posting Komentar