SQLは構造化照会言語を表します。 データベースからデータにアクセスするために使用される包括的なまたは宣言的なデータベース言語です。
比較表
比較基準 | どこで | 持っている |
---|---|---|
基本 | 行操作で実装されています。 | 列操作で実装されています。 |
に適用されます | 単一行 | 行またはグループの要約 |
データ取得 | 条件に従って特定の行から特定のデータを取得するだけです。 | 最初に、完全なデータが取り出されてから、条件に従って分離されます。 |
集約関数 | WHERE句には指定できません。 | HAVING句に書くことができます。 |
で使用 | SELECT、およびUPDATE、DELETE、あるいはそれらのいずれかなどの他のステートメント。 | SELECT文なしでは使用できません。 |
として作用します | プレフィルター | ポストフィルター |
グループ化 | WHEREの後に来る。 | HAVINGの後に来る。 |
where句の定義
SQL WHERE句は、単一のテーブルからデータを取得するとき、または複数のテーブルと結合することによって条件を記述するために使用されます。 与えられた条件が満たされる場合にのみ、テーブルから特定の値を返します。 WHERE句は、レコードを透過して必要なレコードだけを取得するために使用されます。
SQLは論理接続詞andを実装し、WHERE句には含まれません。これはブール条件とも呼ばれます。 タプルを取得するには、条件が真でなければなりません。 論理接続詞式のオペランドには、 < 、 <= 、 > 、 > = 、 = 、などの比較演算子が含まれます。 。 これらの比較演算子は、文字列と算術式を比較します。 これはSELECTステートメント、およびUPDATE、 DELETEステートメントで使用できます。
例を見てみましょう。 以下に示す「 Sales 」テーブルという名前のテーブルは、「 Product 」属性と「 Sales_amount 」属性で構成されています。
製品の選択、合計(Sales_amount)AS販売からの売上合計WHERE製品の( '電話'、 'スピーカー')GROUP BY製品;
節を持つことの定義
SQLには、 GROUP BY句と一緒に使用できるHAVING句があります。 このHAVING句は、特定の条件を満たすグループの値を取得するのに役立ちます。 WHERE句は、選択時にHAVING句と組み合わせて使用することもでき、WHERE句は個々の行をフィルタ処理します。 その後、行がグループ化され、集計計算が実行されます。最後にHAVING句によってグループがフィルタ処理されます。
GROUP BYキーワードが使用されていない場合は、WHEREと同じように動作します。 min、max、avg、sum、countなどのグループ関数は、SELECT句とHAVING句の2つの句にしか指定できません。 属性グループ内の各値に対応するタプルの条件を提供します。 条件を満たすレコードの唯一のセットが結果として表示されます。
ここでも、WHERE句と同じ例を取り、同じ「 Sales 」テーブルを検討しています。 HAVING句を使用して電話とスピーカーのTotal_salesを計算したい場合は、次のクエリを書きます。
SELECT製品、合計(Sales_amount)AS販売グループの製品別の製品合計( '電話'、 'スピーカー')の製品。
問合せでは、製品が最初に取得され、次に集計関数(sum)が実行され、最後にWHERE句とは異なりグループがフィルタ処理される次の出力が生成されます。
Total_salesが1000より大きい商品のみを検索する場合。クエリは次のように書くことができます。
SELECT製品、合計(Sales_amount)AS売上グループの合計金額AS(製品の合計)AS(Sales_amount)> 1000。
生成された出力は次のとおりです。
HAVINGにもかかわらず、WHERE句を使用してこれを実行することはできません。また、WHERE句は集約関数では使用できないため、エラーメッセージが生成されます。
where句と節を持つことの主な違い
- WHERE句は行操作で使用され、単一行に適用されますが、HAVING句は列操作に使用され、要約行または要約行に適用できます。
- WHERE句では、適用された条件に従って目的のデータが取得されます。 対照的に、HAVING句はデータ全体をフェッチしてから、条件に従って分離が行われます。
- min、sum、max、avgなどの集約関数は、WHERE句とともに使用することはできません。 反対に、これらの関数はHAVING句に現れることがあります。
- HAVING句はSELECT文なしでは使用できません。 逆に、WHEREはSELECT、UPDATE、DELETEなどと一緒に使用できます。
- WHERE句はプレフィルタとして動作し、HAVING句はポストフィルタとして機能します。
- WHERE句をGROUP BYと一緒に使用すると、GROUP BYの前に来ます。 これは、集計計算が実行される前にWHEREが行をフィルタリングすることを意味します。 一方、HAVINGはGROUP BYの後に来るため、集約計算の実行後にフィルタ処理されます。
結論
WHERE句とHAVING句は、HAVING句が一般的に使用される追加機能を除いて同じように機能します。 HAVING句は集約関数で効率的に機能しますが、WHEREは集約関数では操作できません。