ホームページ > データベース > mysql チュートリアル > SQL の WHERE と HAVING: 各句をいつ使用する必要がありますか?

SQL の WHERE と HAVING: 各句をいつ使用する必要がありますか?

DDD
リリース: 2025-01-21 09:36:39
オリジナル
258 人が閲覧しました

WHERE vs. HAVING in SQL: When Should I Use Each Clause?

SQL クエリの WHERE 句と HAVING 句について理解する

SQL 開発者は、WHERE 句と HAVING 句を区別するという課題に直面することがよくあります。この記事は、SQL クエリにおけるこれらのさまざまな使用法を明確にすることを目的としています。

いつどこで使用するか

  • 個々の行のフィルタリング: WHERE 句は、テーブルまたは結合結果セット内の個々の行に条件を課すために使用されます。各行を評価し、指定された基準を満たす行のみを選択します。

HAVING を使用する場合

  • 集計結果のフィルター: HAVING 句は、集計関数 (COUNT()、SUM()、AVG() など) で表される行のグループに条件を適用します。集計操作後に集計データに条件を設定する必要がある場合に使用します。

例: 最も多くの専攻を取得した講師

この違いを説明するために、次の表を考えてみましょう:

<code>1. Lecturers (LectID, Fname, Lname, degree)
2. Lecturers_Specialization (LectID, Expertise)</code>
ログイン後にコピー

目標は、最も多くの専攻を持っている講師を見つけることです。

WHERE クエリ (エラー)

<code class="language-sql">SELECT
  L.LectID, 
  Fname, 
  Lname 
FROM Lecturers L, 
     Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
  COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);</code>
ログイン後にコピー

この WHERE クエリは、WHERE を使用して集計関数 (COUNT(S.Expertise)) に基づいてフィルタリングしようとしているため、機能しません。 WHERE 句は、結果を集計するのではなく、個々の行をフィルターするために使用されます。

HAVING クエリ (正解)

<code class="language-sql">SELECT
  L.LectID,
  Fname,
  Lname 
FROM Lecturers L,
     Lecturers_Specialization S
WHERE 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>
ログイン後にコピー

この HAVING クエリは、GROUP BY 操作の後に集計データ (COUNT(S.Expertise)) に条件を設定するため、正しい結果を正常に取得します。

ANSI 接続バージョン (推奨)

ANSI 結合構文を使用すると、クエリは次のように書き換えることができます:

<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 句が削除され、より効率的で標準に準拠したクエリが実現します。

以上がSQL の WHERE と HAVING: 各句をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート