SUB QUERY dan INDEX MYSQL

Assalamu'alaikum Warohmatullahi Wabarokatuh

Datang lagi bersama saya yang rutin setiap minggu untuk memposting tentang query-query mysql, yang merupakan tugas laporan dari praktikum Desain Basis Data (DBD) pada perkuliahan saya sekarang ini. 

Oke .. sekarang ini saya akan membahas tentang SUB QUERY yang tentunya menggunakan DBMS MySQL. Sekilas, Sub Query merupakan query yang ada di dalam suatu query. Jadi kita akan menggunakan dua atau lebih perintah (query) yang di kemas dalam satu perintah query. Bingung ? hehe . oke kita akan bahas lebih lanjut di bawah ini. :D

DASAR TEORI


>> SUB QUERY

Sub Query merupakan nested query atau query yang ada di dalam query. Sub query merupakan pernyataan SELECT yang merupakan bagian dari pernyataan INSERT, SELECT. Sub Query digunakan untuk menangani masalah dalam query yang kompleks bahkan yang tidak kita ketahui nilai berapa yang akan di SELECT atau di INSERT.

Subquery harus berada didalam tanda kurung ( ), yang bersifat nested didalam query utama. Subquery dapat ditulis secara bertingkat sampai 32 tingkat.

Untuk bentuk umum penulisan query nya sendiri sebagai berikut :

mysql> SELECT select_list 
       FROM nama_tabel
       WHERE ekspresi_operator 
       (
       SELECT select_list 
       FROM nama_tabel
       WHERE [ 'relasi'  AND ]'VALUE'
       );

Misal, akan menampilkan nama pegawai yang mempunyai gaji tertinggi.

mysql> SELECT nama 
       FROM pegawai 
       WHERE sal = 
       (SELECT max(gaji) FROM pegawai);


Untuk jenis Ekspresi Operator, terbagi atas tiga jenis yaitu :

1. OPERATOR EXISTS

Merupakan jenis operator boolean, yang mengahasilkan nilai benar (true) atau salah (false). Operator exists akan memberikan nilai true jika sub query menghasilkan paling tidak sebuah baris / record.
Atau operator ini digunakan untuk melakukan pengecekan apakah di dalam database kita ada data yang kita inginkan. Misal kita akan mencari nama_pegawai yang mempunyai id tertentu didalam tabel dapartemen dan pegawai. Kita akan melakukan pengecekan apakah nama tersebut ada pada tabel tersebut.

Bentuk umum penulisan query nya adalah :

mysql> SELECT [nama_kolom]
       FROM [nama_tabel]
       WHERE [ EXISTS | NOT EXISTS ]
       (
       SELECT *
       FROM [nama_tabel]
       WHERE Value
       );

Misal, akan menampilkan daftar nama pegawai yang sudah mempunyai departemen 

mysql> SELECT nama 
       FROM pegawai 
       WHERE EXISTS 
       (SELECT * FROM departemen 
       WHERE id_departemen = pegawai.id_departemen
       );

2. OPERATOR ANY(SOME)

Operator ini hampir sama seperti exists, akan tetapi operator relasi nya tidak menggunakan sama dengan ( = ). Hal tersebut dikarenakan jika operator relasi yang digunakan adalah sama dengan ( = ), maka operator ANY akan sama seperti operator IN (sebagaimana dalam penjelasan yang telah saya jelaskan pada postingan sebelumnya). Jadi, kondisi seperti itu tidak dianjurkan karena lebih mudah pemahamannya jika menggunakan operator IN.

Bentuk umum penulisan query nya adalah :

mysql> SELECT [nama_kolom]
       FROM [nama_tabel]
       WHERE [nama_kolom]
       [operator_pembanding] [ANY | SOME]
       (
       SELECT [nama_kolom]
       FROM [nama_tabel] 
       WHERE [Value]
       );

[OPERATOR_PEMBANDING] dapat berupa =, <, >, <=, >=, !=, <> .

Misal, akan menampilkan nama pegawai beserta gajinya yang tidak paling kecil :

mysql> SELECT nama, gaji
       FROM pegawai
       WHERE gaji > ANY 
       (SELECT gaji FROM pegawai);


3. OPERATOR ALL

Operator ini digunakan untuk melakukan pembandingan dengan sub query. Kondisi dengan ALLmenghasilkan nilai benar jika pembanding menghasilkan benar untuk setiap nilai dalam sub query. 

Bentuk umum penulisan query nya adalah : 

mysql> SELECT [nama_kolom]
       FROM [nama_tabel]
       WHERE [nama_kolom]
       [operator_pembanding] ALL
       (
       SELECT [nama_kolom]
       FROM [nama_tabel] 
       WHERE [Value]
       );

Misal, akan menampilkan nama dan gaji pegawai yang gajinya lebih rendah daripada semua pegawai yang bekerja SALESMAN :

musql> SELECT nama
       FROM pegawai
       WHERE gaji < ALL
       (SELECT gaji 
       FROM pegawai 
       WHERE pekerjaan = 'SALESMAN'
       );


>>  PEMBUATAN INDEKS

Membuat indeks dapat digunakan untuk mempercepat proses pencarian data, yang dibuat dari beberapa kolom pada suatu tabel. Tabel yang digunakan bisa satu atau lebih tabel. Pembuatan Indeks tidak akan terasa jika hanya ada satu atau dua tabel saja, namun akan terasa jika tabel yang kita gunakan banyak bahkan mungkin lebih dari 100 tabel :D.

Indeks dapat dibuat dari pemilihan kolom - kolom yang dianggap penting dan mungkin sering digunakan / atau dicari.

Bentuk umum penulisan query nya adalah :

mysql> CREATE INDEX nama_indeks 
       ON nama_tabel ([kolom1, kolom2, ..]);

Sebagai contoh dalam pembuatan indeks dari tabel mahasiswa yang berisi nim, nama, fakultas

mysql> CREATE INDEX identitas
       ON mahasiswa (nim, nama, fakultas);

Indeks juga dapat dihapus, yang tidak akan mengakibatkan terhapusnya tabel aslinya dan mungkin hanya akan mengakibatkan lambatnya dalam pencarian data.

Bentuk umum penulisan query nya yaitu :

mysql> DROP INDEX nama_indeks
       ON nama_tabel;

Contoh :

mysql> DROP INDEX identitas
       ON mahasiswa;

Kita dapat juga membuat indeks yang mempunyai kolom unik. Apa gunanya? yah agar tidak ada data atau nilai yang sama didalam indeks tersebut.

mysql> CREATE UNIQUE INDEX nama_indeks
       ON nama_tabel ([ kolom1, kolom2, .. ]);


Perintah ALTER untuk menambah dan DROP INDEX

  • Untuk membuat Indeks yang nilai nya harus unik (kecuali nilai NULL)


mysql> ALTER TABLE nama_tabel ADD PRIMARY KEY (kolom_list);
  • Untuk menambahkan Indeks biasa
mysql> ALTER TABLE ADD INDEX nama_indeks nama_tabel (kolom_list);
  • Untuk menghapus indeks
mysql> ALTER TABLE nama_tabel DROP INDEX (nama_index);


>> PENGGUNAAN TRIM

TRIM digunakan untuk menghilakan karakter pada suatu data atau menghilangkan beberapa karakter di MySQL. Contoh sederhana yaitu menghilangkan tanda koma di belakang kata "Rabu" pada "Senin,Selasa,Rabu,".

TRIM ini berlaku untuk tipe data string. Dan biasanya TRIM ini digunakan untuk menangani kesalahan yaitu pada saat memasukkan data yang mungkin terlalu banyak memasukkan karakter data. Misal kelebihan spasi di awal kata atau pada akhir kata tersebut. Dan yang lainnya ..

Bentuk penulisan umum :

mysql> SELECT [TRIM | LTRIM | RTRIM] 
       ([{BOTH | LEADING | TRAILING} ['karakter'] FROM nama_kolom]) 
       FROM nama_tabel;
  • TRIM : digunakan untuk menghilangkan spasi diawal dan diakhir string atau data (kiri dan kanan).
  • LTRIM : digunakan untuk menghilangkan spasi diawal string atau data (kiri).
  • RTRIM : digunakan untuk menghilangkan spasi diakhir string atau data (kanan).
  • LEADING : digunakan untuk menghilangkan karakter terpilih yang ada disebelah kiri. 
  • TRAILING : digunakan untuk menghilangkan karakter terpilih disebelah kanan.
  • BOTH : digunakan untuk menghilangkan karakter terpilih dikanan dan dikiri.

HASIL PRAKTIKUM

1.  Menampilakan Jumlah mahasiswa dalam fakultas dari yang terkecil.  


2. Membuat indeks kolom alamat pada tabel mahasiswa



3. Membuat indeks yang bersifat unik kolom nama_fak pada tabel fakultas 



4. memberikan sifat unik kolom nama pada tabel mahasiswa.





EVALUASI PERBEDAAN MySQL dan POSTGRESQL
Dalam MySQL untuk penggunaan CHEK (yang dalam postgresql untuk menampilkan batasan pemasukan data, semisal dalam kolom gender hanya boleh memasukkan karakter "L" atau "P") tidak bisa. Namun, sampai saat ini saya belum mengetahui dan belum menemukan bagaimana cara yang bisa diterapkan pada mysql.


KESIMPULAN
dari penjelasan diatas, subquery dapat kita gunakan untuk melakukan banyak perintah dalam satu query.



Mungkin dari penjelasan diatas ada yang kurang menarik atau banyak salahnya :D mohon kritik dan sarannya, di tunggu di kolom komentar yaaaa :D

Sekian 
Wassalamu alaikum warahmatullahi wabarakartuh

1 comment:

Powered by Blogger.