Assalamu'alaikum, teman-teman sekarang kita akan membahas tentang operator dasar SQL. Seperti biasanya, saya akan menggunakan DBMS PostgreSQL dan MySQL, lalu kita lihat perbandingannya di akhir praktikum nanti. Oke kita mulai! 
      A.  Dasar Teori
Operator dasar pada SQL ada banyak, kali ini akan saya bahas beberapa diantarnya,
1.      Operator AS
 Operator AS digunakan untuk menampilkan nama kolom dengan nama lain, tetapi nama kolom yang asli tidak berubah. Struktur query operator AS secara umum yaitu
SELECT namakolomlama AS namakolombaru FROM namatabel;
2.      Operator AND dan OR
Operator OR digunakan untuk memilih baris yang memenuhi setidaknya satu dari kondisi yang diberikan, kita dapat menggunakan operator logis, OR. Jika ingin memilih baris yang harus memenuhi semua kondisi yang diberikan, Anda dapat menggunakan operator logis, AND. Struktur query operator AND dan OR secara umum yaitu
select * from namatabel where namakolom = ‘pencarian 1’ [operator AND atau OR] namakolom = ‘pencarian 2’;
3.      Operator BETWEEN
BETWEEN digunakan untuk menentukan lebar nilai dari nilai terendah dan nilai tertinggi. Pada BETWEEN menggunakan operator pembanding seperti >, <, >=, <=, =, <> atau !=. Bisa juga menggunakan NOT BETWEEN untuk lawan dari BETWEEN. Struktur query operator BETWEEN secara umum yaitu
select * from nama_tabel where nama_kolom between ‘nilai_awal’ and ‘nilai_akhir’;
4.      Operator IN dan NOT IN
Operator IN berguna melakukan pencocokan dengan salah satu yang ada pada suatu daftar nilai. Bisa juga menggunakan NOT IN untuk lawan dari IN. Struktur querynya secara umum yaitu
Select * from nama_tabel where nama_kolom in (kata_kunci1, kata_kunci2);
5.      Operator LIKE
Operator ini menggunakan mode pencarian berdasarkan huruf awal atau huruf akhir atau kombinasi dari keduanya dari data yang diinginkan. Untuk tujuan ini kita menggunakan karakter wildcard '%'. Struktur querynya secara umum yaitu
select * from nama_tabel where nama_kolom like ‘operator’;
6.      Operator REGEXP
Regular Expression atau Regex, merupakan sebuah teknik atau cara untuk mencari persamaan - presamaan string atau data dan memanipulasinya. Biasanya lebih sering digunakan untuk string. Kalau di PostgreSQL menggunakan symbol “ ~ ”.
SELECT nama_kolom_tampil FROM nama_tabel WHERE nama_kolom_cari REGEXP keyword_reguler_expression
7.      Operator DISTINCT
Operator DISTINCT, operator ini digunakan untuk menampilkan data tanpa duplikasi data pada suatu kolom, jika terdapat duplikasi data maka yang ditampilkan hanya satu data saja. Operator ini dapat mengurangi redudansi data.
select distinct nama_kolom from nama_tabel;
8.      Operator LIMIT and OFFSET
Kegunaan operator LIMIT terletak pada pembatasan atas jumlah data yang boleh ditampilkan, contohnya kita hanya ingin menampilkan 3 data pada tbl_anggota, maka hanya 3 data terataslah yang akan ditampilkan. Apabila operator LIMIT yang membatasi jumlah data yang ditampilkan, operator ini adalah kebalikannya , dia akan menghilangkan jumlah data yang akan ditampilkan dan menampilkan sisa dari data yang dihilangkan.
select * from nama_tabel [limit atau offset] 2;
9.      UNION, EXCEPT dan INTERSECT
UNION merupakan operator yang digunakan untuk menggabungkan hasil query, dengan ketentuan jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan datanya harus sama.
select nama_kolom from nama_tabel union select nama_kolom from nama_tabel;
atau select nama_kolom from nama_tabel union all select nama_kolom from nama_tabel;
INTERSECT merupakan operator yang digunakan untuk memperoleh data dari dua buah query dimana data yang ditampilkan adalah yang memenuhi kedua query tersebut dengan ketentuan jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan datanya harus sama.
SELECT * FROM namatabel1 INTERSECT SELECT * FROM namatabel2;
Untuk MySQL, menggunakan operator IN.
EXCEPT merupakan operator yang digunakan untuk memperoleh data dari dua buah query dimana data yang ditampilkan adalah data yang ada pada hasil query 1 dan tidak terdapat pada data dari hasil query 2 dengan ketentuan jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan datanya harus sama.
SELECT * FROM namatabel1 EXCEPT SELECT * FROM namatabel2;
                        Untuk MySQL, menggunakan operator NOT IN.
 
      B.  Hasil Praktikum
Dalam bagian ini, saya akan menjawab soal praktikum di kelas praktikum saya di praktikum desain basis data.
Berikut ini adalah tugas praktikum saya.        
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.
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.
2.      Tampilkan nama mahasiswa fakultas saintek yang berjenis kelamin laki-laki. Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki
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.
4.      Tampilkan mahasiswa dengan nomor 2,3,5 menggunakan operator IN.
5.      Tampilkan semua data mahasiswa yang namanya mempunyai awalan huruf “a”.
6.      Tampilkan semua data mahasiswa yang namanya mempunyai akhiran “a” dan huruf ke-3 dari nama tersebut terdapat huruf “n”.
7.      Tampilkan nomor fakultas di tabel mahasiswa dengan nomor harus tidak ada yang sama dari baris pertama sampai akhir.
8.      Tampilkan data mahasiswa 3 baris saja.
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.
*Boleh dengan awalan dan ciri yang lain namun karakteristiknya harus sesuai soal
10.  Buatlah tabel dengan nama organ_dalam dan organ_luar sebagai berikut :
 Tabel organ_dalam 
Nomor Nama
1           Jantung
2           Paru-Paru
3           Tenggorokan
Tabel  organ_luar
Nomor  Nama
1           Hidung
2           Mata
3           Tenggorokan 
Tampilkan data dari kedua tabel tersebut menggunakan UNION, EXCEPT dan INTERSECT.
Untuk menjawab tugas di atas, kita menggunakan PostgreSQL dan MySQL.
  •    Menggunakan PostgreSQL
Pertama, kita persiapkan dulu database dan kita gunakan tabel fakultas dan tabel mahasiswa. Kita insert dulu nama-nama fakultas. Kemudian kita tambahkan kolom di tabel mahasiswa yang sudah ada, dengan alter table mahasiswa add column “gender” varchar(2); . Lalu kita update gender data mahasiswa yang sudah ada dengan update mahasiswa set gender=’L’ where nim_mah=14; seperti di bawah ini.
Kemudian kita tambahkan data mahasiswa sampai 7 baris dengan insert into mahasiswa values (15, 'ratna', 'malang', '085708345126',
1, 'P'), (16, 'binta', 'surabaya', '089765436578', 3, 'P'), (17, 'rizki', 'kedir
i', '089564321786', 1, 'L'), (18, 'hanafi', 'blitar', '087645321786', 4, 'L'), (
19, 'isfa', 'tulungagung', '085776432007', 2, 'P'), (20, 'kamil', 'tulungagung',
 '089765456832', 1, 'L'); seperti di bawah ini.
 
1.      Untuk menjawab soal nomor 1, kita gunakan operator AS yaitu select nim_mah as nomor_identitas, nama_mah as nama, alamat_mah as alamat, nama_fak as nama_fakultas from mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak; seperti di bawah ini.


2.      Menampilkan nama mahasiswa fakultas saintek yang berjenis kelamin laki-laki. Untuk menjawabnya kita gunakan operator AND yaitu select*from mahasiswa where id_fak=1 and gender='L'; . Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki, kita gunakan operator OR yaitu select*from mahasiswa where id_fak=1 or gender='L'; seperti di bawah ini.
3.      Pada database saya ini, data 3 sampai dengan 5 adalah nim 16, 17, dan 18. Dengan between querynya select*from mahasiswa where nim_mah between 16 and 18; sedangkan tanpa menggunakan between querynya select*from mahasiswa where nim_mah>=16 and nim_mah<=18; seperti di bawah ini.
Untuk menampilkan data yang bukan 3 sampai 5, dengan menggunakan between querynya select*from mahasiswa where nim_mah not between 16 and 18; sedangkan tanpa menggunakan between select*from mahasiswa where nim_mah<16 or nim_mah>18; 
4. Untuk menampilkan data ke 2,3 dan 5, kita gunakan query select*from mahasiswa where nim_mah in (15, 16, 18); seperti di bawah ini.
5.      Untuk mencari data mahasiswa dengan nama awalan saja, saya menggunakan operator like dengan awalan I dengan query select*from mahasiswa where nama_mah like 'i%';
6.      Untuk menjawab soal nomor 6, kita bisa gunakan operator regexp dengan query select*from mahasiswa where nama_mah ~ '..n.a';

     Kita juga bisa menggunakan operator like yaitu select*from mahasiswa where nama_mah like '__n_a';
 
7.      Untuk soal nomor 7, yaitu menampilkan nomor fakultas di tabel mahasiswa agar tidak di ulang kita gunakan operator distinct yaitu select distinct id_fak from mahasiswa; seperti di bawah ini.

 
8.      Untuk soal nomor 8, yaitu menampilkan 3 data mahasiswa, kita gunakan operator limit yaitu select*from mahasiswa limit 3; seperti di bawah ini.
9.      Untuk soal nomor 9, yaitu mencari nama mahasiswa seperti yang dimaksudkan soal kita gunakan operator regexp lagi yaitu select*from mahasiswa where nama_mah ~ 'r[aiu]'; seperti di bawah ini.
10.      Untuk nomor 10, kita buat dulu tabelnya yaitu dengan create table organ_dalam (nomor integer not null, nama varchar(20)); kemudian masukkan datanya dengan insert into organ_dalam values (1, 'Jantung'), (2, 'Paru-Paru'), (3,'Tenggorokan'); Lalu kita gunakan cara yang sama untuk membuat tabel organ_luar seperti di bawah ini.

    Lalu kita gunakan operator union untuk menggabungkan data keduanya. Kita bisa menggunakan query select*from organ_dalam union select*from organ_luar; dengan satu kali perulangan data tenggorokan atau select*from organ_dalam union all select*from organ_luar; dengan data tenggorokan diulangi sua kali seperti di bawah ini.
     Untuk except atau menampilkan data yang berbeda dari kedua tabel kita gunakan query select*from organ_dalam except select*from organ_luar; lalu untuk intersect atau menampilkan irisan dari kedua tabel querynya select*from organ_dalam intersect select*from organ_luar; seperti di bawah ini.


  •          Menggunakan MySQL
Pertama, kita persiapkan dulu database dan kita gunakan tabel fakultas dan tabel mahasiswa. Kita insert dulu nama-nama fakultas. Kemudian kita tambahkan kolom di tabel mahasiswa yang sudah ada, dengan alter table mahasiswa add column “gender” varchar(2); . Lalu kita update gender data mahasiswa yang sudah ada dengan update mahasiswa set gender=’L’ where nim_mah=14; seperti di bawah ini.
 

      Kemudian kita tambahkan data mahasiswa sampai 7 baris dengan insert into mahasiswa values (15, 'ratna', 'malang', '085708345126',
1, 'P'), (16, 'binta', 'surabaya', '089765436578', 3, 'P'), (17, 'rizki', 'kedir
i', '089564321786', 1, 'L'), (18, 'hanafi', 'blitar', '087645321786', 4, 'L'), (
19, 'isfa', 'tulungagung', '085776432007', 2, 'P'), (20, 'kamil', 'tulungagung',
 '089765456832', 1, 'L'); seperti di bawah ini.
 
1.      Untuk menjawab soal nomor 1, kita gunakan operator AS yaitu select nim_mah as nomor_identitas, nama_mah as nama, alamat_mah as alamat, nama_fak as nama_fakultas from mahasiswa, fakultas where mahasiswa.id_fak=fakultas.id_fak; seperti di bawah ini.


 

2.      Menampilkan nama mahasiswa fakultas saintek yang berjenis kelamin laki-laki. Untuk menjawabnya kita gunakan operator AND yaitu select*from mahasiswa where id_fak=1 and gender='L'; . Kemudian nama mahasiswa fakultas saintek atau berjenis kelamin laki-laki, kita gunakan operator OR yaitu select*from mahasiswa where id_fak=1 or gender='L'; seperti di bawah ini.
 
3.      Pada database saya ini, data 3 sampai dengan 5 adalah nim 16, 17, dan 18. Dengan between querynya select*from mahasiswa where nim_mah between 16 and 18; sedangkan tanpa menggunakan between querynya select*from mahasiswa where nim_mah>=16 and nim_mah<=18; seperti di bawah ini.
Untuk menampilkan data yang bukan 3 sampai 5, dengan menggunakan between querynya select*from mahasiswa where nim_mah not between 16 and 18; sedangkan tanpa menggunakan between select*from mahasiswa where nim_mah<16 or nim_mah>18;


4.      Untuk menampilkan data ke 2,3 dan 5, kita gunakan query select*from mahasiswa where nim_mah in (15, 16, 18); seperti di bawah ini.
5.      Untuk mencari data mahasiswa dengan nama awalan saja, saya menggunakan operator like dengan awalan I dengan query select*from mahasiswa where nama_mah like 'i%';
6.      Untuk menjawab soal nomor 6, kita bisa gunakan operator regexp dengan query select*from mahasiswa where nama_mah regexp '..n.a';

   Kita juga bisa menggunakan operator like yaitu select*from mahasiswa where nama_mah like '__n_a';



7.      Untuk soal nomor 7, yaitu menampilkan nomor fakultas di tabel mahasiswa agar tidak di ulang kita gunakan operator distinct yaitu select distinct id_fak from mahasiswa; seperti di bawah ini.


8.      Untuk soal nomor 8, yaitu menampilkan 3 data mahasiswa, kita gunakan operator limit yaitu select*from mahasiswa limit 3; seperti di bawah ini.


9.      Untuk soal nomor 9, yaitu mencari nama mahasiswa seperti yang dimaksudkan soal kita gunakan operator regexp lagi yaitu select*from mahasiswa where nama_mah regexp 'r[aiu]'; seperti di bawah ini.


10.      Untuk omor 10, kita buat dulu tabelnya yaitu dengan create table organ_dalam (nomor integer not null, nama varchar(20)); kemudian masukkan datanya dengan insert into organ_dalam values (1, 'Jantung'), (2, 'Paru-Paru'), (3,'Tenggorokan'); Lalu kita gunakan cara yang sama untuk membuat tabel organ_luar seperti di bawah ini.


       Lalu kita gunakan operator union untuk menggabungkan data keduanya. Kita bisa menggunakan query select*from organ_dalam union select*from organ_luar; dengan satu kali perulangan data tenggorokan atau select*from organ_dalam union all select*from organ_luar; dengan data tenggorokan diulangi sua kali seperti di bawah ini.

     Untuk except atau menampilkan data yang berbeda dari kedua tabel kita gunakan query select*from organ_dalam where nama not in (select nama from organ_luar); lalu untuk intersect atau menampilkan irisan dari kedua tabel querynya select*from organ_dalam where nama in (select nama from organ_luar); seperti di bawah ini.


C.    Tugas Rumah
Tugas rumah kali ini saya ditugaskan untuk menjelaskan evaluasi dari DBMS MySQL dan PostgreSQL berdasarkan tugas praktikum 1-10. (evaluasi meliputi perbedaan atau kesamaan, kelebihan atau kekurangan, tambahan dari penulis).
Dalam praktikum kali ini, postgresql dan mysql memiliki beberapa persamaan dan beberapa perbedaan dalam struktur querynya. Semua query dari nomor 1 sampai 10 sama, kecuali beberapa nomor di bawah ini.
     Pada soal nomor 6 dan nomor 9, di postgresql saya harus menggunakan symbol “~”  untuk regexp seperti di bawah ini.
sedangkan di mysql saya harus mengetikkan langsung regexp
Pada bagian ini, postgresql memiliki keunggulan yaitu memiliki query yang lebih pendek yaitu hanya dengan symbol ~.
2.      Perbedaan lain yaitu pada soal nomor 10 untuk menampilkan irisan (intersect) dari 2 tabel dan perbedaan dari 2 tabel (except).
Postgresql = except : select*from organ_dalam except select*from organ_luar;
            Intersect : select*from organ_dalam intersect select*from organ_luar;
 
MySQL = except : select*from organ_dalam where nama not in (select nama from organ_luar);
Intersect : select*from organ_dalam where nama not in (select nama from organ_luar);

Pada bagian ini, postgresql lebih unggul dan lebih mudah karena memiliki struktur query yang lebih sedikit dengan hanya mengetikkan except maupun intersect.

D.    Evaluasi Perbandingan DBMS MySQL dan DBMS PostgreSQL
Pada tugas rumah di atas sudah saya jelaskan perbandingan di antara kedua DBMS yaitu PostgreSQL dan MySQL. Kali ini akan saya bahas lagi secara singkat perbandingannya.
·         Operator Regexp
PostgreSQL : menggunakan symbol ~ .
MySQL: menggunakan peirintah regexp dengan langsung mengetiknya tanpa menggunakan symbol seperti postgreSQL.
·         Except
PostgreSQL : menggunakan perintah seperti select*from organ_dalam except select*from organ_luar;
MySQL: menggunakan perintah seperti select*from organ_dalam where nama not in (select nama from organ_luar);
·         Intersect
PostgreSQL : menggunakan perintah seperti select*from organ_dalam intersect select*from organ_luar;
MySQL: menggunakan perintah seperti select*from organ_dalam where nama not in (select nama from organ_luar);
Menurut saya, postgresql lebih mudah dan lebih unggul karena memiliki struktur query yang lebih mudah dipahami dan lebih sederhana.
E.     Kesimpulan, Saran, Kritik dan Manfaat bagi Pembaca
1.      Kesimpulan
Setelah melakukan praktikum ini, saya dapat mengambil kesimpulan bahwa operator dasar pada SQL antara lain As, And dan Or, Between, In, Not In, Like, Limit dan Offset, Distinct, Regexp, Union, Except dan Intersect. Setelah mempraktikkan operator dasar tersebut menggunakan 2 DMBS yaitu PostgreSQL dan MySQL terdapat kesamaan dan beberapa perbedaan diantara keduanya. Diantaranya adalah penggunaan operator Regexp serta operator Union, Except dan Intersect.
2.      Saran
Diperlukan pembelajaran lebih lanjut mengenai operator-operator dasar SQL dalam database menggunakan PostgreSQL maupu MySQL agar praktikan dapat menguasai kedua DBMS tersebut dalam membuat database yang lebih baik.

3.      Kritik
Dalam laporan ini, masih banyak terdapat kekurangan karena terbatasnya pengetahuan saya dalam menguasai 2 DBMS yang digunakan dalam praktikum ini.        
4.      Manfaat
Manfaat yang akan didapat pembaca dalam laporan ini antara lain dapat mengetahui operator-operator dasar SQL secara umum. Pembaca juga dapat mengetahui persamaan dan perbedaan penggunaan operator dasar dari kedua DBMS tersebut.