Sub Query MySQL

Dulu kita pernah membahas tentang Query language, dimana query adalah kita meminta language adalah bahasa jadi kita meminta dengan bahasa query kepada database untuk memberikan apa yang kita minta. Sub Query adalah query nested atau sebuah query 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 kita tidak tahu nilai berapa yang akan di select atau di insert.

Beberapa kegunaan dari Sub Query adalah

  1. Subquery digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values).
  2. Meng-copy data dari satu tabel ke tabel lain
  3. Menerima data dari inline view
  4. Mengambil data dari tabel lain untuk kemudian di update ke tabel yang dituju
  5. Menghapus baris dari satu tabel berdasarkan baris dari tabel lain

Sub Query

Bentuk umum dari Sub Query adalah
dapat di tulis sebagai berikut : SELECT SELECT_LIST FROM TABLE WHERE EXPRESI OPERATOR (select select_list from table WHERE EXPRESI OPERATOR ‘VALUE’)

Contoh beberapa penggunaan sub query pada MySQL :

Subquery digunakan untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values). Berikut ini diberikan contoh penggunaan subquery.

Misalnya kita ingin menampilkan nama yang mempunyai nilai matakuliah tertinggi pada matakuliah METODE NUMERIK dengan kode Matakuliah

MK3003.

Tabel Mahasiswa
NIM NM_Mhs
001 JONO
002 TAUFIK
003 ROHIM
004 ROZAQ

 

Tabel Nilai
NIM Kode_MataKuliah Value
001 MK303 80
002 MK302 90
003 MK303 89
004 MK302 90
001 MK302 90
004 MK303 90
002 MK302 90
003 MK303 80

 

Tabel Mata_Kuliah
Kode_MK Nama_Matkul
MK202 OOP
MK303 Basis Data

Untuk melakukan hal tersebut kita harus menggunakan sub Query jika tidak maka hasilnya akan salah. sub Query untuk menampilkan nama yang mempunyai nilai matakuliah tertinggi pada matakuliah METODE NUMERIK dengan kode Matakuliah MK3003. adalah

SELECT Mahasiswa.NM_Mhs,Nilai.Value FROM Mahasiswa,Nilai,Mata_Kuliah WHERE Mata_Kuliah.Kode_MK = “MK303” AND Nilai.Value = (SELECT max(Value) FROM Nilai WHERE Kode_MataKuliah = “MK303”);

Bagian “SELECT Mahasiswa.NM_Mhs,Nilai.Value FROM Mahasiswa,Nilai,Mata_Kuliah WHERE Mata_Kuliah.Kode_MK = “MK303″ AND Nilai.Value =” disebut dengan Main Query sedangkan “(SELECT max(Value) FROM Nilai WHERE Kode_MataKuliah = “MK303″)” disebut dengan sub Query yang sedang kita pelajari.

Contoh :

Sub Query juga dapat digunakan untuk mengopy suatu tabel ke tabel lain dengan menggunakan klausa INSERT . . . SELECT. . . . Berikut ini adalah contohnya

Contoh :

INSERT INTO MAHASISWA1 (NIM,Nama) SELECT NIM,NAMA FROM MHS;

Operator Exist

Merupakan jenis operator boolean, yang mengahasilkan nilai benar (true) atau salah (false). Operator exists akan memberikan nilai benar (true) kalau sub query menghasilkan paling tidak sebuah baris / record.

Contoh :

Akan ditampilkan daftar nama pegawai yang sudah mempunyai departemen.

select nama from pegawai where exists (select*from departemen where id_departemen = pegawai.id_departemen);

Keterangan: Perintah pada sub query diatas berisi pengecekan id_departemen pada tabel pegawai.

Contoh 2:

Akan ditampilkan daftar nama pegawai yang tidak mempunyai departemen :

select nama from pegawai where not exists (select*from departemen where id_departemen = pegawai.id_departemen);

Keterangan: Perintah pada sub query diatas sama dengan contoh 1, hanya ditambahkan dengan not sebelum exists untuk pengecekan id_departemen di tabel pegawai.
Operator Any

Operator Any hampir sama penggunaannya seperti Exists. Tetapi operator relasi yang digunakan biasanya selain = (sama dengan). hal tersebut disebabkan apabila operator relasi = yang digunakan, maka sebetulnya fungsi operator Any (some) sama seperti operator IN, sehingga kondisi seperti itu tidak dianjurkan karena lebih mudah pemahamannya apabila menggunakan operator IN.

Contoh :

Akan menampilkan daftar nama pegawai dan gaji yang gajinya tidak paling sedikit :

select nama, gaji from pegawai where gaji > any (select gaji from pegawai);

Operator All

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

Contoh :

Akan menampilkan nama dan gaji pegawai yang gajinya lebih rendah daripada semua pegawai yang pekerjaannya ‘SALESMAN’ :

select nama, gaji from pegawai where gaji > any (select gaji from pegawai);

Optimasi Query

Optimasi query dapat kita gunakan untuk mempercepat eksekusi query dalam database. Jika data kita hanya sedikit, maka optimasi query tidak perlu dilakukan, karena eksekusi query tidak akan memakan waktu lama.  Tetapi jika data kita sudah mencapai ratusan atau  bahkan ribuan, maka akan terasa sekali eksekusi querinya  memakan waktu yang cukup lama. Untuk mengatasi hal ini maka query kita harus dioptimasi.

Salah satu cara optimasi query yaitu dengan membuat indeks pada database. Index pada database digunakan untuk meningkatkan kecepatan akses data. Pada saat query dijalankan, index mencari data dan menentukan nilai ROWID yang membantu menemukan lokasi data secara fisik di disk. Akan tetapi penggunaan index yang tidak tepat, tidak akan meningkatkan unjuk kerja dalam hal ini kecepatan akses data.

Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan kolom menurut kota, propinsi dan kode pos dari tabel karyawan, sebagai berikut :

CREATE INDEX idx_kota_prop_kodepos

ON karyawan(kota, propinsi, kode_pos)

TABLESPACE INDX;

Kemudian user melakukan query sebagai berikut :

SELECT * FROM karyawan WHERE propinsi=’Jawa Barat’;

Pada saat melakukan query ini, index tidak akan digunakan karena kolom pertama (kota) tidak digunakan dalam klausa WHERE. Jika user sering melakukan query ini, maka kolom index harus diurutkan menurut propinsi. Selain itu, proses pencarian data akan lebih cepat jika data terletak pada block tabel yang berdekatan daripada harus mencari di beberapa datafile yang terletak pada block yang berbeda.

Misal pada perintah SQL berikut ini :

SELECT * FROM karyawan

WHERE id BETWEEN 1010 AND 2010;

Query ini akan melakukan “scan” terhadap sedikit data block jika tabel karyawan diatas diurutkan berdasarkan kolom id. Untuk mengurutkan berdasarkan kolom yang berbeda-beda maka tabel disimpan dalam flat file, kemudian tabel diekspor dan diurutkan sesuai kebutuhan.

 

 

Sub Query MySQL
Tagged on:             

Leave a Reply