A. LANDASAN TEORI

1. Duplikasi isi data pada tabel ke dalam tabel baru
Untuk mengopy seluruh data dari tabel ke tabel yang baru
SELECT * INTO newtable FROM table 
Untuk mengopy data berdasarkan kolom tertentu dari tabel ke tabel yang bari:SELECT nama_kolom INTO new_table FROM table
2. SUBQUERY
Sub Query adalah query Nested merupakan bentuk query yang terdapat dalam query yang lain. Subquery dapat ditempatkan dalam klausa where, having, from.
Sub Query digunakan untuk menangani masalah yang kompleks yang mungkin sulit untuk dilakukan hanya dengan sebuah query.Struktur SUBQUERY :SELECT nama_kolom FROM nama_tabel WHERE nama_kolom operator_pembanding SUBQUERY;dengan SUBQUERY : SELECT nama_kolom FROM nama_tabel; 
Contoh penggunaan subquery, yakni mencari gaji pegawai yang berada di atas rata-rata.
Pertama, mencari nilai rata-rata gaji terlebih dahulu dengan fungsi agregasi.

Kedua, ketikkan query seperti dibawah ini :

3. INDEKS
Indeks biasanya diaplikasikan pada pencarian. Dengan indeks kita dapat dapat dengan cepat dan spesifik menemukan nilai dalam indeks, dan langsung mencocokkan dengan row yang dimaksud. 
Sebagai contoh, perhatikan query berikut ini SELECT * FROM customer WHERE col = 26.Tanpa indeks, PostgreSQL harus mengamati atau meninjau seluruh tabel untuk mencari dimana row col yang sama dengan 26. Jika menggunakan indeks maka PostgreSQL akan langsung menuju ke row yang sama dengan 26. Untuk sebuah tabel yang besar dan luas, PostgreSQLdapat mengecek setiap row dalam menit sedangkan jika menggunakan indeks untuk menemukan spesifik row waktu yang diperlukan hanya sedikit (dalam hitungan detik).
Berikut struktur SQLnya:
CREATE INDEX nama_indeks ON nama_tabel(nama_kolom); 
Membuat UNIQUE INDEKS, strukturnya:
CREATE UNIQUE INDEX nama_indeks ON nama_tabel(nama_kolom); 
Untuk menghapus indeks tabel:
DROP INDEX nama_indeks;
4. UNIQUE Kolom
Membuat UNIQUE kolom pada tabel baru
CREATE TABLE nama_tabel (nama_kolom tipe_data unique); 
Membuat UNIQUE kolom pada tabel yang sudah berisi data
ALTER TABLE nama_tabel ADD UNIQUE(nama_kolom);
Untuk menghapus UNIQUE kolom
ALTER TABLE nama_tabel DROP CONSTRAINT nama_constraint;
5. CHECK
Check berfungsi untuk melakukan pembatasan nilai masukan dalam sebuah kolom. Misalkan kita ingin agar kolom gender hanya terisi oleh data 'P' dan 'L', maka kita dapat menggunakannya melalui CHECK. 
Membuat CHECK pada tabel baru
CREATE TABLE nama_tabel(gender CHAR(1) CHECK (gender IN('L', 'P'));
*gender adalah nama_kolom 
Menyisipkan CHECK pada tabel yang sudah dibuat
ALTER TABLE nama_tabel ADD CHECK(nama_kolom kondisi);

6. TRIM
Suatu ketika pasti akan memiliki data yang di dalamnya terdapat spasi kosong yang tidak diperlukan, misalnya spasi ganda. Jika ada masalah seperti ini, kita dapat membersihkan spasi-spasi kosong yang tidak diperlukan menggunakan fungsi TRIM, RTRIM, dan LTRIM. Ketiga fungsi ini memiliki bentuk penggunaan sebagai berikut : 
- RTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kanan (Right) String.
- LTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri (Left) String.
- TRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri, kanan, maupun tengah String 
Berikut Struktur SQL nya :
Select trim(nama_kolom) from nama_tabel; 
Dalam penggunaannya, fungsi TRIM memiliki tiga opsi. Ketiga opsi ini dapat digunakan untuk menentukan karakter apa yang akan dihapus dari suatu String. Jadi, fungsi TRIM juga dapat menghilangkan karakter tertentu (bukan spasi kosong saja) dari suatu string. Opsinya sebagai berikut : 
- LEADING : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kiri. Parameter Leading diartikan sebagai sufik dari karakter yang ada.
- TRAILING : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kanan String. Parameter Trailing diartikan sebagai sufik dari karakter yang ada.
- BOTH : merupakan opsi yang dapat menangani parameter Leading maupun Trailing. 
Berikut Struktur SQL nya :
Select trim(LEADING ‘karakter, misal : -’ from nama_kolom) from nama_tabel;

B. TUGAS PRAKTIKUM

Oke, lanjut pada tugas praktikum kita ya. Ada 8 soal yang harus dikerjakan. Selamat menikmatii ;)

Sebelumnya, siapkan tabel mahasiswa dan fakultas yang sudah dibuat pada praktikum sebelumnya.

1. Tampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil!
Untuk query yang pertama, ada dua hasil, yakni PSIKOLOGI dan SAINTEK seperti pada praktikum modul V no 3. Lalu, mengurutkannya dengan menggunakan ASCENDING/ DESCENDING kemudian, ambil salah satu dari yang sudah kita urutkan.


2. Tampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan edi dan alamatnya tidak sama dengan luki!
Disini, ane pake nama Toni sob sebagai pengganti edi. Optional saja untuk penamaan orang.


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!
Membuat indeks dalam kolom alamat


Membuat unique index nama_fakultas


Keterangan unique index


Input dua data yang sama
Dari penjelasan diatas, bahwa dua data yang sama tidak dapat dimasukkan ketika kita telah membuat unique indeks.

4. Buat kolom nama di mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya !


Sama seperti unique indeks, unique kolom juga berfungsi untuk menghilangkan kerangkapan data dalam suatu tabel. Jika ada satu data yang terdapat dalam tabel, kemudian kita menginputkannya kembali, maka akan terjadi error seperti gambar diatas.


5. Pindahkan data dari tabel mahasiswa, fakultas ambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai "tabel 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.

Saat gender dimasukkan selain string 'P' dan 'L', maka akan terjadi error seperti gambar diatas.

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!



8. Munculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom nama! 




C. TUGAS RUMAH

Beralih pada tugas Rumah dengan menggunakan mysql ;)
1. Tampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil!


2. Tampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan edi dan alamatnya tidak sama dengan luki!

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!





Niihh, salah satu contoh pengecekan indeks unik. Masukin isi data yang sama pada nama kolom yang sudah di set menjadi kolom unik


4. Buat kolom nama di mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya !


5. Pindahkan data dari tabel mahasiswa, fakultas ambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai „tabel 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.

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!


8. Munculkan data mahasiswa dengan hilangkan karakter “+” di akhir data pada kolom nama!

D. EVALUASI PERBEDAAN MYSQL dan POSTGRESQL

Yuuuk, saatna kita mengevaluasi perbedaan mysql dan postgresql dari nomor 1-8.
Nomor 1 -4, dilihat dari struktur querinya, mysql sama dengan postgresql.

Untuk nomor 5, tentang penduplikatan data pada tabel baru, terjadi perbedaan antara keduanya.
Di Postgre : SELECT nama_kolom INTO nama_tabel_baru FROM tabel_lama (kondisi);
Dimysql : CREATE TABLE nama_tabel SELECT nama_kolom INTO nama_tabel_baru FROM tabel_lama (kondisi);

Nomor 6, penggunaan check inipun berbeda.
dalam PostgreSQL, check dapat digunakan dalam semua tipe data, dan semua kondisi yang menghasilkan multivalue. Sedangkan dalam mysql,hanya dapat melakukan constraint check apabila nanti akan menghasilkan satu value saja.
Misalkan dalam sebuah kolom gender, kita akan menyetting data 'P' dan 'L' saja yang harus diinputkan. Dalam PostgreSQL bisa, tetapi dalam mysql tidak.

E. KESIMPULAN

Dari penjelasan yang lebar kali panjang sama dengan luas tadi, dapat diambil kesimpulan, bahwa subquery merupakan query nested yang digunakan untuk menyelesaikan masalah dalam database jika terdapat banyak kondisi yang tidak memungkinkan kita untuk menuliskan querynya satu-persatu.
Subquery dalam postgre dan mysql memiliki struktur yang sama. Demikian pula dengan penggunaan indeks, unik indeks ataupun unik kolom.
Sedangkan yang menjadi perbedaan dalam postgre dan mysql dalam praktikum ini hanya check dan pemindahan tabel 

Syukron;)