SQLにおけるhavingとwhereの区別分析

1244 ワード

select文ではgroupby句を使用して行を小さなグループに分割し、集約関数を使用して各グループの要約情報を返します.また、having句を使用して、返される結果セットを制限できます.groupby句は、クエリー結果をグループ化し、行の要約情報を返します.Oracleはgroupby句で指定した式の値に従ってクエリー結果をグループ化します.groupby句を持つクエリー文で、selectリストで指定した列はgroupby句で指定した列か、グループ関数を含む
 
  
selectmax(sal),jobempgroupbyjob;

(max(sal)、jobのjobは必ずしも現れるわけではありませんが、意味があります)
クエリ文のselectとgroupby,having句はクラスタ関数が唯一現れる場所であり,where句ではクラスタ関数は使用できない.
 
  
selectdeptno,sum(sal)fromempwheresal>1200groupbydeptnohavingsum(sal)>8500orderbydeptno;

gropuby句でhaving句を使用すると、クエリ結果にはhaving条件を満たすグループのみが返されます.1つのsql文にはwhere句とhaving句があります.havingはwhere句と類似しており、限定条件を設定するために使用されます.
where句の役割は、クエリー結果をグループ化する前に、where条件に合致しない行を削除することです.すなわち、グループ化する前にデータをフィルタします.条件にはグループ化関数が含まれず、where条件を使用して特定の行を表示します.
having句の役割は、条件を満たすグループをフィルタリングすることである.すなわち、グループ化後にデータをフィルタリングし、条件にはしばしば集約関数が含まれ、having条件を使用して特定のグループを表示するか、複数のグループ基準を使用してグループ化することもできる.
各部門の各職階を問い合わせる従業員数
 
  
selectdeptno,job,count(*)fromempgroupbydeptno,job;

WHEREをいつ使うべきか、HAVINGをいつ使うべきか迷っている場合は、以下の説明に従ってください.
WHERE文はGROUPPY文の前にある.SQLは、グループ化前にWHERE文を計算します.
HAVING文はGROUPBY文の後にある.SQLはグループ化後にHAVING文を計算します.