SQL の HAVING 句と WHERE 句の違いの詳細な説明
SQL では、HAVING
キーワードと WHERE
キーワードはデータをフィルタリングするために使用されますが、それらの機能は異なります。どちらも条件付き選択に使用されますが、その適用は GROUP BY
句の有無によって異なります。
WHERE 句
WHERE
句は集計操作の前に実行され、値に基づいて特定の行を選択します。たとえば、次のクエリは 20 歳以上のすべての学生の名前を取得します:
<code class="language-sql">SELECT Name FROM Students WHERE Age > 20;</code>
HAVING 句
対照的に、HAVING
句は集計関数の適用後に実行されます。集計値に基づいて行グループをフィルター処理するため、集計結果を調べる必要があるシナリオで役立ちます。
たとえば、次のクエリは各都市の学生の平均年齢を取得し、結果をフィルタリングして平均年齢が 25 歳を超える都市のみを表示します。
<code class="language-sql">SELECT City, AVG(Age) AS AvgAge FROM Students GROUP BY City HAVING AvgAge > 25;</code>
主な違い
HAVING
と WHERE
の基本的な違いは、実行時間です。 WHERE
は集計前に行をフィルタリングし、HAVING
は集計後にグループをフィルタリングします。これは、HAVING
は集計値の条件をチェックするために使用され、WHERE
は個々の行値の条件をチェックするために使用されることを意味します。
例
サンプル データを含む次の表について考えてみましょう:
City | Age |
---|---|
Boston | 22 |
Boston | 25 |
New York | 28 |
New York | 30 |
Los Angeles | 23 |
Los Angeles | 29 |
WHERE を使用したクエリ:
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students WHERE Age > 25;</code>
出力:
City | Count |
---|---|
New York | 2 |
HAVING を使用したクエリ:
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students GROUP BY City HAVING COUNT(*) > 1;</code>
出力:
City | Count |
---|---|
Boston | 2 |
New York | 2 |
この例では、WHERE
句は 25 歳以上の学生の数を取得し、HAVING
句は各都市に 1 人以上の学生がいる都市を取得します。
以上がSQL における WHERE と HAVING: 各句をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。