Rumah > pangkalan data > tutorial mysql > SQL HAVING lwn. WHERE: Bila Untuk Menggunakan Setiap Klausa untuk Penapisan Data?

SQL HAVING lwn. WHERE: Bila Untuk Menggunakan Setiap Klausa untuk Penapisan Data?

Linda Hamilton
Lepaskan: 2025-01-21 09:56:09
asal
947 orang telah melayarinya

SQL HAVING vs. WHERE: When to Use Each Clause for Data Filtering?

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>
Salin selepas log masuk

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>
Salin selepas log masuk
Klausa

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan