Haiii, see you again at fourth meeting :D

A. LANDASAN TEORI


Di pertemuan ini, materinya ngupas tentang operator dasar sql secara umum. Operator dalam sql terdapat operator pembanding, operator logika, dan operator lainnya seperti BETWEEN, LIKE, UNION, EXCEPT, INTERSECT, IN, NOT IN, REGEXP, DISTINCT, LIMIT, OFFSET. (*Ngomong apa yaa ? o.O)

Oke, daripada kalian memendam rasa penasaran kalian, yuk kita bahas operator diatas.

AS.

biasa digunakan untuk menampilkan tabel kolom dengan nama lain sehingga yang akan muncul dalam hasil query bukan nama asli kolom, tetapi nama yang lebih mudah dimengerti dan simpel. AS digunakan setelah nama kolom yang akan diganti yang kemudian diikuti dengan nama penggantinya. Ini nih struktur query-nya:
SELECT nama_kolom AS nama_kolom_pengganti FROM nama_tabel;

Operator Precedence. 

Adalah  tingkatan hirarki dalam memproses serangkaian operator.
Tingkatan Hirarki
Jenis Operator
Paling Tinggi
BINARY
NOT
- (unary minus)
* / %
+ -
<< >>
&
|
<  <= = <=>!=<> >= > IN IS LIKE
REGEXP RLIKE
BETWEEN
AND &&
Paling Rendah
OR ||

Semakin keatas posisi operator, maka semakin tinggi tingkat hirarki operator tersebut. Begitu pula sebaliknya, semakin rendah posisinya maka akan semakin lemah hirarkinya.

LIKE. 

Operator LIKE ini digunakan untuk mencari data yang "menyerupai" atau "hampir sama" dengan kriteria tertentu. Biasanya untuk mencari data sring/teks. Simbol "%" digunakan untuk membantu pelaksanaan operator LIKE. Posisi "%" sangat berpengaruh dalam menentukan kriteria. Langsung saja, kita lihat contoh-contohnya:
Contoh Kasus
Operator
Diawali dengan huruf A
LIKE 'A%'
Diakhiri dengan huruf A
LIKE '%A'
Huruf A pada posisi kedua
LIKE '_A%'
Diawali dengan huruf A dan mengandung huruf I
LIKE 'A%I%'
Tidak diawali dengan huruf A
NOT LIKE 'A%'

REGEXP

Merupakan kepanjangan dari Regular Expression yang merupakan bentuk lain dari LIKE, dengan fungsi yang lebih disempurnakan lagi.Biasanya lebih sering digunakan untuk string. Dalam Postgre, biasa disimbolkan dengan " ~ ".
Contoh sintaksnya :
SELECT * FROM nama_tabel WHERE nama_kolom ~ 'operator_regexp ' ;

Operator Pembanding

Namanya saja sudah pembanding, berarti operator ini digunakan untuk membandingkan kedua tabel yang akan direlasikan. Berikut ini adalah beberapa operator pembanding beserta keterangannya.
Operator
Keterangannya
< 
Kurang dari
> 
Lebih dari
<=
Kurang dari atau sama dengan
>=
Lebih dari atau sama dengan
=
Sama dengan
<> atau !=
Tidak sama dengan

 Operator yang biasanya menggunakan operator pembanding adalah operator BETWEEN. Operator BETWEEN digunakan untuk menentukan lebar antara nilai terendah dan tertinggi.
Logika Operator BETWEEN dapat dituliskan sebagaimana query berikut ini :

·         SELECT*FROM nama_tabel WHERE nama_kolom BETWEEN 'nilai_Awal'  AND 'nilai_akhir'
atau
·          SELECT*FROM nama_tabel WHERE nama_kolom >= 'nilai_Awal'  AND nama_kolom <= 'nilai_akhir'

Logika Operator NOT BETWEEN (kebalikan dari BETWEEN) menampilkan data selain yang ditampilkan oleh fungsi BETWEEN
·         SELECT*FROM nama_tabel WHERE nama_kolom NOT BETWEEN 'nilai_Awal'  AND 'nilai_akhir'
·         SELECT*FROM nama_tabel WHERE nama_kolom < 'nilai_Awal'  OR nama_kolom > 'nilai_akhir'

Operator Logika. 

Operator ini mencakup tiga operator, yakni AND, OR, dan NOT. Penggunaan operator ini biasanya digunakan dalam sintaks WHERE yang lebih kompleks.

                AND. Digunakan untuk menampilkan data dengan dua atau lebih kondisi yang harus dipenuhi, apabila salah satu tidak terpenuhi atau bernilai false, maka pencarian tidak akan ada hasilnya.
                OR. Digunakan untuk menampilkan data dengan dua atau lebih kondisi. Pencarian akan ada hasilnya meskipun salah satu kondisinya bernilai  false.

IN dan NOT IN

Operator IN akan melakukan pencocokan dengan salah satu yang ada pada suatu daftar nilai. Berikut struktur yang digunakan:
SELECT*FROM nama_tabel WHERE nama_kolom IN('kata_kunci', 'kata_kunci1', 'kata_kunci2');

DISTINCT

Sebuah pengertian yang sederhana dari DISTINCT adalah untuk mencegah terjadinya duplikasi pada output sebuah tabel. DISTINCT sering kali diperlukan untuk mengembalikan hasil dari sebuah query dengan tidak terdapay duplikasi, artinya hasil outputnya tidak terjadi kesamaan data.
SELECT DISTINCT nama_kolom FROM nama_tabel;

LIMIT dan OFFSET

LIMIT dan OFFSET digunakan untuk membatasi jumlah output dari query berdasarkan jumlah row, tetapi berbeda loh sama klausa WHERE. Contohnya aja ya, kita mau nampilkan baris ke q-qo secara berurutan, nah kita bisa pake ni operator. Bisa dikatakan LIMIT adalah untuk menentukan jumlah baris yang akan ditampilkan dihitung dari baris pertama, sedangkan OFFSET digunakan untuk menghilangkan baris sesuai dengan jumlah yang diberikan, jadi nanti yang tampil adalah selain yang diOFFSET.
Perintah SQL nya kaya gini :
SELECT * FROM nama_tabel LIMIT 2;
                atau
SELECT * FROM nama_tabel OFFSET 2;

UNION, EXCEPT dan INTERSECT


UNION digunakan untuk menggabungkan hasil data suatu kolom dari dua tabel menjadi satu kolom saja.
SELECT nama_kolom FROM nama_tabel UNION SELECT nama_kolom1 FROM nama_tabel1;
atau
SELECT nama_kolom FROM nama_tabel UNION ALL SELECT nama_kolom1 FROM nama_tabel1;

EXCEPT digunakan untuk mengurangi data tabel pertama dengan tabel kedua, sehingga yang ditampilkan nanti hanya data yang ada pada tabel pertama saja yang tidak memiliki pengurang ditabel kedua.
SELECT nama_kolom FROM nama_tabel EXCEPT SELECT nama_kolom1 FROM nama_tabel1;

INTERSECT digunakan untuk menampilkan seluruh isi data dari dua tabel yang memiliki kesamaan diantara hasil kedua query tersebut.

SELECT nama_kolom FROM nama_tabel INTERSECT SELECT nama_kolom1 FROM nama_tabel1;

B. TUGAS PRAKTIKUM

Yaaap. Langsung saja kita cus mengupas satu persatu soal seperti di bawah ini.
Soal Tugas Praktikum dan Tugas Rumah

*eitts, don't shock kalo liat soalnya makin lama makin panjang:D

Seperti biasa sob, buka Postgre kamu.. Login, masukin database, password.
1. Sebelum mengarah ke nomor satu, lebih baik cek dulu deh sob, tabel yang ada didatabase (Lihat Modul 3.)

Naah loh ada empat tabel. Untuk persiapannya, kita pake tabel mahasiswa dan fakultas yang udah dibuat kemaren. Cek dulu data kedua tabel tersebut.

Tambahkan kolom gender pada tabel mahasiswa.
2. Tambahkan satu data pada tabel fakultas yaitu 'SAINTEK'

3. Masukkan 7 data pada tabel mahasiswa, (nim, nama, dll terserah kalian deh mau kalian isi apa). Karena faktanya ada satu data, maka cukup nambah 6 data lagi.

4. Kalo yang ini baru deh ngerjain nomer satu (*Fiuhhh, preparenya kudu mateng nih). Tampilkan data mahasiswa dengan nama kolomnya menjadi nomor_identitas, nama, alamat, nama_fakultas tanpa mengubahnya secara permanen.

5. Tampilkan nama mahasiswa yang berada di fakultas saintek yang berjenis kelamin laki-laki.

Next, tampilkan nama mahasiswa yang berada di fakultas saintek atau berjenis laki-laki.

In short, bedanya pake AND sama OR, ntar akan menampilkan data yang berbeda.  Dengan menggunakan AND, maka apa yang diinginkan oleh user pasti sama dengan hasilnya. Kalo pake OR, data nanti akan di silangkan terlebih dahulu antara data gender dengan data nama_fak. Sehingga, mengalami pengulangan data seperti diatas.

6. Tampilkan data mahasiswa dari nomor 3 sampai dengan 5 dengan menggunakan between dan tanpa between.

Kemudian, tampilkan data mahasiswa selain nomor 3 sampai dengan 5 dengan menggunakan between dan tanpa between.

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

8. Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf "a".
NOTE: Dalam Postgre, penulisan huruf pada data bersifat case sensitive, artinya, mereka membedakan huruf kapital dengan yang tidak.

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

10. Tunjukkan nomor fakultas dalam tabel mahasiswa dengan syarat tidak adanya redundansi dari baris pertama sampai terakhir.

11. Tampilkan data mahasiswa just 3 baris saja.

12. Tampilkan data mahasiswa dengan nama awalan a kemudian diikuti oleh huruf r,d dan t.Tampilkan juga data mahasiswa dengan huruf awalan r dan t kemudian diikuti oleh kata oni


13. Buat dua tabel dengan data seperti ini :
                a. Tabel organ_dalam
Nomor
Nama
1
Jantung
2
Paru-paru
3
Tenggorokan

                b. Tabel organ_luar
Nomor
Nama
1
Hidung
2
Mata
3
Tenggorokan




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


C. TUGAS RUMAH


Sekarang, move ke tugas rumah sob. Sekarang, pake DBMS mysql yapp. FIGHTING ! :D
1. Aktifkan xampp

2. Buka cmd, masuk ke direktori bin. Selanjutnya, login pake user root.

3. Aktifkan database yang kemaren udah dibuat pada modul sebelumnya sob. Sekalian cek tabel yang ada dalam database tersebut.

4. Tabel yang akan digunakan pada pertemuan kali ini cuma fakultas dan mahasiswa sob. Jadi, cek data dari kedua tabel tersebut.

Tambahkan kolom gender pada tabel mahasiswa.

5. Tambahkan satu data pada tabel fakultas yaitu 'SAINTEK'

6. Masukkan 7 data pada tabel mahasiswa, (nim, nama, dll terserah kalian deh mau kalian isi apa). Karena faktanya ada satu data, maka cukup nambah 6 data lagi.

Waaaitt !!! itu datanya masih ada yang NULL. UPDATE data pada kolom nim_mah=14

7. Kalo yang ini baru deh ngerjain nomer satu (*Fiuhhh, preparenya kudu mateng nih). Tampilkan data mahasiswa dengan nama kolomnya menjadi nomor_identitas, nama, alamat, nama_fakultas tanpa mengubahnya secara permanen.

8. Tampilkan nama mahasiswa yang berada di fakultas saintek yang berjenis kelamin laki-laki.

Next, tampilkan nama mahasiswa yang berada di fakultas saintek atau berjenis laki-laki.

9. Tampilkan data mahasiswa dari nomor 3 sampai dengan 5 dengan menggunakan between dan tanpa between.
Kemudian, tampilkan data mahasiswa selain nomor 3 sampai dengan 5 dengan menggunakan between dan tanpa between.

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

11. Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf "a".

Lihat !!! Pake huruf kapital maupun tidak, mysql tetep akan menampilkan hasilnya. Artinya, dia tidak case sensitive

12. Tampilkan semua data mahasiswa yang namanya mempunyai akhiran "a" dan huruf ke-3 dari nama tersebut terdapat huruf "n".
13. Tunjukkan nomor fakultas dalam tabel mahasiswa dengan syarat tidak adanya redundansi dari baris pertama sampai terakhir.

14. Tampilkan data mahasiswa just 3 baris saja.

Mysql nggak mengenal operator offset. So, alhasil, terjadi ERROR

15. Tampilkan data mahasiswa dengan nama awalan a kemudian diikuti oleh huruf r,d dan t.
Tampilkan juga data mahasiswa dengan huruf awalan r dan t kemudian diikuti oleh kata oni.

16. Buat dua tabel dengan data seperti ini :
                a. Tabel organ_dalam
Nomor
Nama
1
Jantung
2
Paru-paru
3
Tenggorokan

                b. Tabel organ_luar
Nomor
Nama
1
Hidung
2
Mata
3
Tenggorokan





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

Query UNION pada MySQL maupun Postgre, strukturnya sama saja. Seperti yang terlihat pada gambar, tidak terdapat perbedaan. Sedangkan untuk Intersect dan Except, MySQL tidak mengenali quey tersebut. MySQL bisa melakukan fungsi yang sama, tetapi struktur querynya. Dalam MySQL, digunakan IN untuk menghasilkan hasil query yang sama untuk INTERSECT. Sedangkan NOT IN sama seperti EXCEPT.

D. EVALUASI PERBANDINGAN MYSQL dengan POSTGRESQL

Okee, saatnya banding-membandingkan antara MySQL dengan Postgre...

1. Tentang REGEXP
   Postgre, kalo mau pake fungsi REGEXP, disimbolkan dengan (~)
   SELECT * FROM nama_tabel WHERE nama_kolom ~ 'karakteryangditampilkan' ;
   MySQL, ngga pake simbol sob, langsung aja ketik REGEXP
   SELECT * FROM nama_tabel WHERE nama_kolom REGEXP 'karakteryangditampilkan' ;

2. Tentang OFFSET
   Postgre, berlaku operator OFFSET
   MySQL, kayaknyaa ngga ada deh. soalnya pas aku lagi ngerjain pake OFFSET, hasilnya ERROR.

3. Tentang EXCEPT
   Postgre, untuk mengurangi data tabel pertama ke tabel kedua, bisa pake EXCEPT.
   SELECT nama_kolom FROM nama_tabel EXCEPT SELECT nama_kolom1 FROM nama_tabel1;
   MySQL, nggak bisa sob, dia bisanya pake NOT IN
   SELECT nama_kolom FROM nama_tabel WHERE nama_kolom NOT IN(SELECT nama_kolom1 FROM nama_tabel1);

4. Tentang INTERSECT
   Postgre, untuk menampilkan isi data yang sama dari dua tabel, bisa pake INTERSECT.
   SELECT nama_kolom FROM nama_tabel INTERSECT SELECT nama_kolom1 FROM nama_tabel1;
   MySQL, nggak bisa sob, dia bisanya pake IN
   SELECT nama_kolom FROM nama_tabel WHERE nama_kolom IN(SELECT nama_kolom1 FROM nama_tabel1);

5. Tentang CASE SENSITIVE
   Postgre, sifatnya kaya cewek sob. Dia sensitif. Dia bisa bedain mana huruf kecil, mana huruf kapital
   MySQL, naah kalo yang ini cowoknya. NGGAK PEKA !:D Nggak ada bedanya huruf besar ataupun huruf kecil

Kaloo tentang persamaannya, ya selain perbedaan itu rek :D LIKE, LIMIT, UNION, BETWEEN, IN, NOT IN, struktur sintaksnya sama semua kok ;) cuma yang diatas aja yang bedain antara mysql sama Postgre.

E. KESIMPULAN

In Short, Pada pertemuan kali ini, kita mengenal adanya operator dasar pada database. Nggak hanya di matematika, fisika, kimia aja, di DATABASE, mereka juga punya operator-operator dasar antara lain :
AND, OR, NOT, BETWEEN, NOT BETWEEN, IN, NOT IN, LIKE, NOT LIKE, REGEXP, LIMIT, OFFSET, UNION, INTERSECT, EXCEPT.

Mohon kritikan dan sarannya yang membangun yakk ;)
Semoga bermanfaat, dunia dan akhirat :D

F. DAFTAR PUSTAKA

Kadir, Abdul. 2002. Penuntun Praktis Belajar SQL. Yogyakarta: ANDI.
Nugroho, Bunafit. 2009. Panduan Lengkap Menguasai Perintah SQL. Jakarta: Media            Kita.
Modul Praktikum DBD 2014.