Rumah >pangkalan data >tutorial mysql >WHERE vs. HAVING: Bilakah Anda Harus Menggunakan Setiap Klausa untuk Mencari Data Agregat?
SQL: HAVING vs. WHERE – Menapis Data Agregat
Artikel ini menunjukkan perbezaan utama antara fasal WHERE
dan HAVING
dalam SQL, terutamanya apabila bekerja dengan data agregat. Kami akan menggunakan contoh mencari pensyarah yang mempunyai pengkhususan terbanyak. Klausa WHERE
sahaja tidak mencukupi untuk tugasan ini; klausa HAVING
adalah perlu.
Memahami Perbezaan
Klausa WHERE
menapis baris individu sebelum pengumpulan berlaku. Ia menggunakan syarat untuk rekod individu dalam jadual. Sebaliknya, klausa HAVING
menapis selepas pengumpulan, beroperasi pada fungsi agregat seperti COUNT
, SUM
, AVG
dan MIN
. Ini penting apabila menapis berdasarkan hasil pengagregatan, seperti dalam contoh pengkhususan pensyarah kami.
Amalan Terbaik
Untuk kejelasan dan kecekapan, peraturan umum ialah menggunakan WHERE
sebelum GROUP BY
dan HAVING
selepas GROUP BY
. Pendekatan ini memudahkan pembinaan pertanyaan dan meningkatkan kebolehbacaan.
Pertanyaan Dioptimumkan
Pertanyaan berikut menggunakan gabungan ANSI dan klausa HAVING
untuk mengenal pasti pensyarah dengan bilangan pengkhususan maksimum dengan cekap:
<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>
Pertanyaan yang disemak ini menghapuskan keperluan untuk klausa WHERE
sebagai syarat cantum theta, yang membawa kepada pertanyaan yang lebih lancar dan cekap.
Atas ialah kandungan terperinci WHERE vs. HAVING: Bilakah Anda Harus Menggunakan Setiap Klausa untuk Mencari Data Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!