ホームページ >データベース >mysql チュートリアル >WHERE と HAVING: 集約データを検索するために各句をいつ使用する必要がありますか?
SQL: HAVING と WHERE – 集約データのフィルタリング
この記事では、SQL の WHERE
句と HAVING
句の主な違いを、特に集計データを操作する場合に説明します。 最も専門性の高い講師を見つける例を使用します。 WHERE
句だけではこのタスクには不十分です。 HAVING
句が必要です。
違いを理解する
WHERE
句は、グループ化が行われる前に個々の行をフィルタリングします。 テーブル内の個々のレコードに条件を適用します。 逆に、HAVING
句はグループ化の 後 をフィルタリングし、COUNT
、SUM
、AVG
、MIN
などの集計関数を操作します。 これは、講師の専門分野の例のように、集計の結果に基づいてフィルタリングする場合に重要です。
ベストプラクティス
明確さと効率性を高めるため、一般的なルールは WHERE
の前に GROUP BY
を使用し、HAVING
の後に GROUP BY
を使用することです。このアプローチにより、クエリの構築が簡素化され、読みやすさが向上します。
最適化されたクエリ
次のクエリは、ANSI 結合と HAVING
句を使用して、最大数の専門分野を持つ講師を効率的に識別します。
<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>
この改訂されたクエリにより、theta 結合条件として WHERE
句が不要になり、より合理化された効率的なクエリが実現します。
以上がWHERE と HAVING: 集約データを検索するために各句をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。