SQLのHAVING句とWHERE句の違いを徹底解説

sql-having-where
  • URLをコピーしました!

SQLクエリの構築において、データを適切にフィルタリングすることは非常に重要です。この記事では、データベースでのクエリ実行時によく使用される二つのフィルタリング句、HAVING句とWHERE句の違いについて詳しく解説します。

目次

WHERE句の役割

WHERE句は、データベースから特定の条件を満たす行を選択するために使われるSQLの構文です。この句は、GROUP BY句より前、つまりデータがグループ化される前に適用されます。例えば、特定の顧客IDを持つデータや特定の期間内のデータを取得したい場合にWHERE句を使用します。この段階では、個々のレコードが対象となり、集約されていない生のデータに基づいてフィルタリングが行われます。

-- 特定の顧客IDを持つデータを取得する場合
SELECT * 
FROM orders 
WHERE customer_id = '12345';

-- 特定の期間内(例えば2023年1月1日から2023年3月31日)のデータを取得する場合
SELECT * 
FROM orders 
WHERE order_date BETWEEN '2023-01-01' AND '2023-03-31';

HAVING句の特徴

一方、HAVING句は、データの集約後、つまりGROUP BY句によってデータがグループ化された後に使用されるフィルタリング句です。HAVING句は主に、特定の集約関数(例:SUM、COUNT、AVGなど)の結果に基づいてグループをフィルタリングする際に用いられます。例として、合計売上が特定の金額を超える顧客や、平均評価が特定のレベル以上の製品など、集約された結果に対する条件を指定する場合にHAVING句が適用されます。

-- 合計売上が特定の金額を超える顧客を選択する場合
SELECT customer_id, SUM(total_sales) AS total_sales
FROM sales
GROUP BY customer_id
HAVING SUM(total_sales) > 10000

-- 平均評価が特定のレベル以上の製品を選択する場合
SELECT product_id, AVG(rating) AS average_rating
FROM reviews
GROUP BY product_id
HAVING AVG(rating) >= 4.0

HAVING句とWHERE句の主な違い

  • 適用タイミング: WHERE句はデータのグループ化の前に適用されるのに対し、HAVING句はデータのグループ化の後に適用されます。
  • フィルタリングの対象: WHERE句は個々の行に対してフィルタリングを行いますが、HAVING句は集約されたデータやグループに対してフィルタリングを行います。
  • 使用例: WHERE句は、「特定の日付範囲内の取引を選択する」のような個々のレコードの条件指定に使われ、HAVING句は「平均売上が特定の額を超えるすべての地域を選択する」のような集約結果の条件指定に使われます。

まとめ

HAVING句とWHERE句は、どちらもSQLクエリにおいてデータをフィルタリングするために使用されますが、適用されるタイミング、目的、および対象が異なります。これらの違いを理解し、適切に使用することで、データ分析やレポート作成をより効率的かつ正確に行うことができます。SQLクエリの構築において、正しいフィルタリング句を適切な場所で使用することが重要です。

sql-having-where

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次