Penapisan data SQL: Perbezaan antara klausa WHERE dan HAVING
Klausa HAVING dan WHERE dalam SQL kedua-duanya digunakan untuk menapis data, tetapi fungsinya berbeza. Klausa WHERE berfungsi pada baris individu, manakala klausa HAVING berfungsi pada hasil agregat.
Contoh perbezaan
Andaikan kami mempunyai dua jadual: Lecturers
dan Lecturers_Specialization
, dan kami ingin mencari pensyarah yang mempunyai bidang kepakaran yang paling banyak.
Pertanyaan awal menggunakan klausa WHERE tidak memberikan hasil yang diharapkan:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID AND COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);</code>
Ini kerana klausa WHERE menapis satu baris dan perbandingan COUNT(S.Expertise) >= ALL
tidak boleh digunakan pada satu baris.
Pertanyaan yang betul menggunakan klausa HAVING:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID); </code>
HAVING bertindak ke atas keputusan agregat untuk memastikan perbandingan digunakan pada bilangan bidang kepakaran untuk setiap pengajar.
Peraturan praktikal dan pengoptimuman
Secara umumnya, klausa WHERE digunakan sebelum klausa GROUP BY untuk menapis baris individu; klausa HAVING digunakan selepas klausa GROUP BY untuk menapis hasil agregat.
Selain itu, pertanyaan boleh dioptimumkan menggunakan sintaks ANSI JOIN dan bukannya sintaks L, S θ join:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID=S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise)>=ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
Atas ialah kandungan terperinci SQL HAVING lwn. WHERE: Bila Untuk Menggunakan Setiap Klausa untuk Penapisan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!