Penjelasan terperinci tentang perbezaan antara klausa HAVING dan WHERE dalam SQL
Dalam SQL, kata kunci HAVING
dan WHERE
digunakan untuk menapis data, tetapi ia mempunyai fungsi yang berbeza. Kedua-duanya digunakan untuk pemilihan bersyarat, tetapi penggunaannya bergantung pada kehadiran atau ketiadaan klausa GROUP BY
.
Klausa MANA
KlausaWHERE
dilaksanakan sebelum operasi pengagregatan dan memilih baris tertentu berdasarkan nilainya. Sebagai contoh, pertanyaan berikut mendapatkan semula nama semua pelajar yang berumur lebih daripada 20 tahun:
<code class="language-sql">SELECT Name FROM Students WHERE Age > 20;</code>
MENDAPAT klausa
Sebaliknya, klausa HAVING
dilaksanakan selepas menggunakan fungsi agregat. Ia menapis kumpulan baris berdasarkan nilai agregat, yang berguna dalam senario di mana anda perlu memeriksa hasil agregat.
Sebagai contoh, pertanyaan berikut mendapatkan purata umur pelajar di setiap bandar, kemudian menapis keputusan untuk menunjukkan bandar yang purata umurnya melebihi 25:
<code class="language-sql">SELECT City, AVG(Age) AS AvgAge FROM Students GROUP BY City HAVING AvgAge > 25;</code>
Perbezaan utama
Perbezaan asas antaraHAVING
dan WHERE
ialah masa pelaksanaannya. WHERE
menapis baris sebelum pengagregatan, manakala HAVING
menapis kumpulan selepas pengagregatan. Ini bermakna HAVING
digunakan untuk menyemak keadaan pada nilai agregat, manakala WHERE
digunakan untuk menyemak keadaan pada nilai baris individu.
Contoh
Pertimbangkan jadual berikut dengan data sampel:
City | Age |
---|---|
Boston | 22 |
Boston | 25 |
New York | 28 |
New York | 30 |
Los Angeles | 23 |
Los Angeles | 29 |
Pertanyaan menggunakan WHERE:
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students WHERE Age > 25;</code>
Output:
City | Count |
---|---|
New York | 2 |
Pertanyaan menggunakan HAVING:
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students GROUP BY City HAVING COUNT(*) > 1;</code>
Output:
City | Count |
---|---|
Boston | 2 |
New York | 2 |
Dalam contoh ini, klausa WHERE
mendapatkan semula bilangan pelajar yang berumur lebih daripada 25 tahun, manakala klausa HAVING
mendapatkan semula bandar yang mempunyai lebih daripada 1 pelajar di setiap bandar.
Atas ialah kandungan terperinci WHERE vs. HAVING dalam SQL: Bila Untuk Menggunakan Setiap Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!