5.11.9 HAVING句に関する等価変換(WHERE句への変換)
HAVING句の探索条件が,WHERE句の探索条件に等価変換されることがあります。WHERE句の探索条件に等価変換されると,グループ化の処理でむだな入力行を削減できたり,表の検索にインデクスが利用できたりすることがあります。
WHERE句の探索条件に等価変換される条件の形式を,次に示します。探索条件が等価変換された場合,検索時に使用されるインデクスは等価変換後の探索条件を基に決定されます。
等価変換される条件の形式
-
比較述語
・列指定 比較演算子 {定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数} ・{定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数} 比較演算子 列指定
-
BETWEEN述語
列指定 〔NOT〕 BETWEEN {定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数} AND {定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数}
-
IN述語
列指定 〔NOT〕 IN ({定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数} 〔,{定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数}〕…)
-
LIKE述語
列指定 〔NOT〕 LIKE パターン文字列 〔ESCAPE エスケープ文字〕 パターン文字列::={定数|?パラメタ|日時情報取得関数|ユーザ情報取得関数} エスケープ文字::={定数|?パラメタ}
-
LIKE_REGEX述語
列指定 〔NOT〕 LIKE_REGEX 正規表現文字列 〔FLAG {I|IGNORECASE}〕 正規表現文字列::=定数
-
NULL述語
列指定 IS 〔NOT〕 NULL
- 留意事項
-
-
論理演算のOR条件の中に指定された条件の場合は,この等価変換の対象になりません。
ただし,この論理演算のOR条件に対して,次に示す等価変換が適用される場合は,次に示す等価変換が適用されたあとに,HAVING句に関する等価変換が適用されます。
・OR条件の中の条件をOR条件の外側に抜き出す等価変換
・OR条件の中の=条件から作成したIN条件をORの外側に追加する等価変換
OR条件に関する等価変換については,「5.11.2 OR条件に関する等価変換(OR条件の外側への抜き出し)」および「5.11.3 OR条件に関する等価変換(IN条件への変換)」を参照してください。
-
論理演算のNOTの中に指定された条件,および副問合せを含む条件の場合は,この等価変換の対象になりません。
-
列指定の列が外への参照列の場合,この等価変換の対象になりません。外への参照列については,マニュアルHADB SQLリファレンスの副問合せの指定形式および規則を参照してください。
-
スカラ演算の中に定数だけを指定している場合,そのスカラ演算は定数として扱われることがあります。定数と等価なスカラ演算については,マニュアルHADB SQLリファレンスの値式の指定形式および規則の規則にある表定数と等価な値式となる条件を参照してください。
-