Rabu, 04 Mei 2011

Sub Query (SUBSELECT)

Pengertian Sub Query
Merupakan query yang terletak dalam query yang lain.
Contoh :
Akan ditampilkan nama pegawai yang mempunyai gaji paling besar :
select nama from pegawai where sal = (select max(gaji) from pegawai);

Operator Exists
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 apakah ada?.

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 apakah tidak ada?.

Operator Any(Some)
Operator Any (some) 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 where gaji < all (select gaji from pegawai where pekerjaan = 'SALESMAN');
Sub query (seubselect) hanya dapat digunakan untuk MySQL versi 3.24, Sehingga parintah-perintah diatas tidak dapat dijalankan di MySQL ini(versi 3.23). Tetapi, dengan menggunakan option LEFT JOIN, masalah-masalah diatas dapat diselesaikan. Contoh :
select * from score where event_id in (select even_id from even where type = 'T');
Apabila dituliskan dengan cara lain menjadi :
select score.* from score, event where score.even_id = even.even_id and type = 'T';
Contoh 2 :
select nama from pegawai where gaji = (select max(gaji) from pegawai);
Apabila dituliskan dengan cara lain menjadi :
select max(gaji) from pegawai;
select nama from pegawai where gaji = 5000;
Contoh 3 :
select*from student where student_id not in (select student_id from absence);
Apabila dituliskan dengan cara LEFT JOIN menjadi :
select student.* from student left join absence on student.student_id = absence.student_id where absence.student_id is null;

1 komentar:

Anonim mengatakan...

Like thiis (y) makasi gaan

Poskan Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Justin Bieber, Gold Price in India