Adakalanya ketika dalam query kita ingin menampilkan data dengan kriteria jumlah tertentu atau kriteria yang lain. Contoh riilnya, misalkan kita ingin menampilkan data barang dagangan yang stocknya lebih dari seratus, menampilkan data nilai yang lebih dari 80, dan menampilkan data siswa dengan umur tertentu.
Mungkin sekilas kita berpikir bahwa kita bisa menerapkannya dengan cukup menggunakan WHERE. Apakah benar-benar bisa ? Mari kita buktikan dengan prakteknya. Misalkan tabel target kita adalah tabel siswa yang isinya sebagaimana berikut :
Selanjutnya, kita akan mencoba menampilkan nama siswa dengan id kelas = 1 dan siswa tersebut memiliki umur lebih dari 6200 hari. Perhitungan umur dilakukan dengan menghitung selisih hari tanggal sekarang dan tanggal lahir dari siswa. Bila dicoba menggunakan WHERE maka seharusnya :
select nmsw as NAMA, datediff(now(), dobsw) as UMUR from siswa WHERE kelas_idkelas=1 and UMUR > 6200;
Namun, dengan perintah di atas ternyata hasilnya tidak sesuai.
Dengan demikian, dapat disimpulkan perintah di atas belum sepenuhnya tepat. Hal ini dikarenakan kondisi pada WHERE tidak dapat diterapkan pada fungsi agregasi seperti datediff(). Solusinya, kita harus menggunakan HAVING. Jadi perintah query-nya akan menjadi :
select nmsw as NAMA, datediff(now(), dobsw) as UMUR from siswa WHERE kelas_idkelas=1 HAVING UMUR > 6200;
Contoh kasus lainnya adalah :
SELECT siswa.nmsw, pelajaran.nmmapel, nilai.nilai from siswa, pelajaran, nilai WHERE siswa.idsw = nilai.siswa_idsw AND nilai.pelajaran_idmapel=pelajaran.idmapel having nilai > 83;
Maksudnya : menampilkan nama siswa, nama pelajaran, dan nilai dari tabel siswa, pelajaran, dan nilai dengan ketentuan nilai yang ditampilkan adalah lebih dari 83.
0 comments:
Post a Comment