MySQLにおける「WHERE」と「HAVING」の違いは何ですか?
MySQLにおいて、WHEREとHAVINGはデータをフィルタリングするためのキーワードですが、その使用法と効果はわずかに異なります。
- クエリ内で条件を指定して行データをフィルタリングするためにWHERE句が使用されます。これは、SELECT文のFROM句の後およびGROUP BY句の前に配置されます。WHERE句では、列名、演算子、および値を使用して条件を構築し、その条件に基づいて必要な行をフィルタリングします。例:
SELECT column1, column2
FROM table_name
WHERE condition;
- HAVING句は、クエリでグループ化されたデータをフィルタリングする条件を指定するために使用されます。GROUP BY句の後に配置されます。HAVING句では、集約関数、列名、演算子、値を使用して条件を構築し、その条件に基づいて満たすグループをフィルタリングします。HAVING句は一般的に、GROUP BY句と一緒に使用され、グループ化されたデータをフィルタリングするために使用されます。例えば:
SELECT column1, COUNT(column2)
FROM table_name
GROUP BY column1
HAVING condition;
違い:
- クエリの前にフィルタリングされたWHERE句は、元のデータセットに適用されます。
- クエリの後にフィルタリングを行うHAVING句は、グループ化されたデータに適用されます。
- WHERE節には列名、演算子、値を含めることができます。
- HAVING句には、集計関数、列名、演算子、値を含めることができます。
- WHERE句はどんなクエリでも使用可能ですが、HAVING句はGROUP BY句が含まれるクエリでのみ使用できます。
- WHERE句は行データをフィルタリングし、HAVING句はグループデータをフィルタリングします。
基本的に、WHERE句は行データをフィルタリングするために使用され、HAVING句はグループ化されたデータをフィルタリングするために使用されます。