ホームページ >データベース >mysql チュートリアル >SQL HAVING と WHERE: データ フィルタリングに各句をいつ使用するか?

SQL HAVING と WHERE: データ フィルタリングに各句をいつ使用するか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 09:56:09949ブラウズ

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

SQL データのフィルタリング: WHERE 句と HAVING 句の違い

SQL の HAVING 句と WHERE 句はどちらもデータのフィルタリングに使用されますが、その機能は異なります。 WHERE 句は個々の行に対して機能しますが、HAVING 句は集計結果に対して機能します。

違いの例

LecturersLecturers_Specialization という 2 つのテーブルがあり、最も専門分野を持っている講師を見つけたいとします。

WHERE 句を使用した最初のクエリでは期待した結果が得られません:

<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>

これは、WHERE 句が単一の行をフィルターし、COUNT(S.Expertise) >= ALL 比較を単一の行に適用できないためです。

正しいクエリでは 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 句は集計結果に作用して、各講師の専門分野の数に比較が適用されるようにします。

経験則と最適化

一般に、WHERE 句は GROUP BY 句の前に使用して個々の行をフィルタリングし、HAVING 句は GROUP BY 句の後に使用して集計結果をフィルタします。

さらに、L、S θ 結合構文の代わりに ANSI 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>

以上がSQL HAVING と WHERE: データ フィルタリングに各句をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。