Rumah > pangkalan data > tutorial mysql > HAVING vs. WHERE dalam SQL: Bilakah Saya Harus Menggunakan Setiap Klausa untuk Pengagregatan?

HAVING vs. WHERE dalam SQL: Bilakah Saya Harus Menggunakan Setiap Klausa untuk Pengagregatan?

Barbara Streisand
Lepaskan: 2025-01-21 09:53:09
asal
345 orang telah melayarinya

HAVING vs. WHERE in SQL: When Should I Use Each Clause for Aggregation?

Perbezaan antara klausa HAVING dan WHERE dalam pertanyaan agregat SQL

Memahami perbezaan antara klausa HAVING dan WHERE adalah penting apabila bekerja dengan data agregat. Artikel ini akan menyelami senario pertanyaan biasa dan menerangkan sebab satu kaedah mengembalikan hasil yang betul dan satu lagi tidak.

Konteks pertanyaan

Diberi jadual berikut:

  • Pensyarah (Lajur: LectID, Fname, Lname, ijazah)
  • Pengkhususan_Pensyarah (Lajur: LectID, Kepakaran)

Matlamatnya adalah untuk mencari pengajar dengan kepakaran terbanyak.

Percubaan gagal untuk menggunakan klausa WHERE

Percubaan pertanyaan gagal untuk menggunakan klausa WHERE untuk menapis hasil berdasarkan bilangan jurusan:

<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

Pertanyaan ini gagal menghasilkan hasil yang diharapkan kerana klausa WHERE tidak sesuai untuk menggunakan syarat pada nilai agregat.

Pertanyaan yang berjaya menggunakan klausa HAVING

Pertanyaan yang berjaya menggunakan klausa HAVING sebaliknya:

<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

Sebab kenapa HAVING berjaya

Klausa HAVING digunakan khusus untuk menapis hasil pertanyaan agregat. Ia menggunakan syarat selepas operasi GROUP BY, membolehkan kami menyemak bilangan jurusan untuk setiap pengajar.

Peraturan praktikal

Secara umumnya, gunakan WHERE sebelum GROUP BY untuk menapis baris individu dan gunakan HAVING selepas GROUP BY untuk menapis hasil agregat.

Pertanyaan dipertingkat menggunakan ANSI JOIN

Versi pertanyaan alternatif menggunakan sintaks ANSI JOIN juga disediakan:

<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

Versi ini menghapuskan penggunaan WHERE untuk syarat menyertai dan sebaliknya menggunakan JOIN.

Atas ialah kandungan terperinci HAVING vs. WHERE dalam SQL: Bilakah Saya Harus Menggunakan Setiap Klausa untuk Pengagregatan?. 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