ホームページ >データベース >mysql チュートリアル >WHERE または HAVING: SQL のどこに計算列を配置する必要がありますか?

WHERE または HAVING: SQL のどこに計算列を配置する必要がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-19 22:47:09431ブラウズ

WHERE or HAVING: Where Should Calculated Columns Go in SQL?

SQL クエリ内の計算列の正しい位置: WHERE または HAVING?

SQL では、データの取得に使用される条件を WHERE 句または HAVING 句に配置できます。計算列を使用する場合、効率的なクエリを確保するには、その正しい位置を理解することが重要です。

どこにあるのか、どこにあるのか: 主な違い

  • WHERE 句: データ選択 の前に をフィルターし、任意のテーブル列条件の使用を許可します。
  • HAVING 句: データ選択 の後に をフィルターし、選択した列、エイリアス、または集計関数を使用した条件を許可します。

計算された列の位置

計算列は、WHERE 句ではなく、HAVING 句に配置する必要があります。その理由は次のとおりです:

  • WHERE 句は元のテーブル データに作用します。
  • HAVING 句は、計算された変換データに作用します。

例:

「id」列と「value」列を含むテーブルを考えてみましょう:

<code class="language-sql">CREATE TABLE `table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `value` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>

5 より大きい値を取得するには、2 つのクエリを使用できます:

<code class="language-sql">-- WHERE 子句
SELECT `value` v FROM `table` WHERE `value` > 5;

-- HAVING 子句
SELECT `value` v FROM `table` HAVING `value` > 5;</code>

これら 2 つのクエリは同じ結果を返しますが、重要な違いがあります。エイリアス「v」が使用されている場合、WHERE 句ではエラーが発生しますが、HAVING 句ではそれが許可されています。

パフォーマンスへの影響

大きなテーブルの計算列で WHERE 句を使用すると、パフォーマンスに悪影響を及ぼす可能性があります。これは、 が計算される前にフィルタリングが に適用され、不要な計算が発生する可能性があるためです。フィルター処理されたデータのみを使用して HAVING 句に計算を配置することで、パフォーマンスを向上させます。

結論

計算列を使用する場合、正しい計算と最適なパフォーマンスを確保するために、計算列を HAVING 句に配置する必要があります。 WHERE 句と HAVING 句を区別することで、柔軟性が向上し、効率的なデータ フィルタリングが可能になります。

以上がWHERE または HAVING: SQL のどこに計算列を配置する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。