Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


8.17.5 WHERE節

WHERE節は式を満たすオブジェクトまたは変数を検索するために使われる条件式で構成されています。WHERE節では,select文の結果やupdateやdelete操作の範囲を特定します。

〈この項の構成〉

(1) WHERE節で使用できる条件式

WHERE節で使用できる条件式を次の表に示します。

表8‒22 WHERE節で使用できる条件式

内容

BNF構文の構文名

BETWEEN

フィールドで指定した範囲に含まれていることを評価します。

between_expression

IN

フィールドで指定したどれかの値と一致することを評価します。

in_expression

LIKE

フィールドでワイルドカード記号を展開したあとの文字列と一致することを評価します。

like_expression

IS [NOT] NULL

null値かどうかをテストします。

null_comparison_expression

IS [NOT] EMPTY

指定したコレクション値が空かどうかをテストします。

empty_collection_comparison_expression

[NOT] MEMBER [OF]

指定したコレクション値がコレクションのメンバであるかどうかをテストします。空のコレクションを表す場合,MEMBER OF式の値はFALSE,NOT MEMBER OF式の値はTRUEとなります。

collection_member_expression

EXISTS

サブクエリの結果を判定します。一つ以上の値がある場合はtrue,それ以外はfalseを返します。

exists_expression

ALL

サブクエリで返されたすべての値と比較します。

all_or_any_expression

ANY (SOME)

サブクエリで返されたどれかの値と比較します。

all_or_any_expression

サブクエリ

selectによる結果を記述できます。

subquery

関数式

「(2) 関数式」を参照してください。

該当する関数構文を参照

注※ BNF構文の構文名の詳細については,「付録G JPQLのBNF」を参照してください。

WHERE節を使用する場合の注意事項について説明します。

(2) 関数式

JPQLでは次の表に示す関数をWHERE節やHAVING節で使用できます。関数式の引数の値がnullかunknownの場合,関数式の値はunknownになります。

表8‒23 JPQLで使用できる関数

分類

関数

返り値

引数についての補足説明

文字列関数

CONCAT

引数の連結した文字列

SUBSTRING

引数で指定した開始位置と長さの文字列

2番目と3番目引数は,返されるサブストリングの開始位置および長さを整数で指定します。文字列の先頭の位置は1です。

TRIM

特定の文字を取り除いた文字列

取り除く文字がない場合は,スペース(空白)と見なされます。任意のtrim文字はcharacterの入力文字列です。トリムの方法が指定されない場合はBOTHとなります。

LOWER

小文字化した文字列

UPPER

大文字化した文字列

LENGTH

文字列長の整数値

LOCATE

指定された位置から検索し,与えられた文字列で最初に文字列を見つけた位置の整数値 (文字列が見つからない場合は0)

1番目引数は検索する文字列,2番目引数は検索される文字列を示します。任意となる3番目の引数は,検索を開始する文字の位置を示します(デフォルトは先頭から検索)。文字列の先頭位置は1です。

算術関数

ABS

関数の引数と同じ型(Integer,Float,またはDouble)の絶対値

引数として数値を渡します。

SQRT

引数で渡された数値の平方根(実数)

引数として数値を渡します。

MOD

引数で渡された二つの数値の剰余(整数)

二つの整数を渡します。

SIZE

コレクションの要素数(整数)

コレクションを渡します。

日付時間関数

CURRENT_DATE

データベースの日付

CURRENT_TIME

データベースの時刻

CURRENT_TIMESTAMP

データベースのタイムスタンプ

(凡例)−:該当しない

(3) 注意事項

WHERE節の注意事項について説明します。

(a) 演算子の優先順位

演算子の優先順位を次に示します。

  1. ピリオド(.)

  2. 算術演算子

    単項演算(+,-),乗算と除算(*,/),加算と減算(+,-)

  3. 比較演算子

    =,>,>=,<,<=,<>(not equal),[NOT] BETWEEN,[NOT] LIKE,[NOT] IN,IS [NOT] NULL,IS [NOT] EMPTY,[NOT] MEMBER [OF]

  4. 論理演算子

    NOT,AND,OR

(b) 条件式の注意事項

  • 条件式は,条件式,比較式,論理演算子,評価結果がboolean値になるパス式,booleanリテラル,boolean型の入力パラメタで構成されます。

  • 算術式は,比較式で使用できます。算術式は,ほかの算術式,四則演算,結果が数値になるパス式,数値リテラル,数値型の入力パラメタで構成されます。

  • 算術操作は,数値昇格(numeric promotion)を使用します。

  • 式の評価順序を示すために括弧で囲むことができます。

  • 集合関数は,HAVING節の条件式だけで使用できます。

  • 条件式の中では,シリアライズ形式またはlobsとしてマップされるフィールドを使用しないでください。

(c) リテラルの注意事項

  • 文字リテラルは,シングルクォテーションで囲みます(例:'literal')。シングルクォテーションを含む文字列リテラルは,二つシングルクォテーションを使用します。

  • JavaStringリテラルのように,クエリの文字列リテラルはUnicode文字のエンコードを使用します。

  • Javaのエスケープ表記の使用は,クエリの文字列リテラルではサポートしません。

  • enumのリテラルは,Javaのenumリテラル構文のリテラルが使用できます。enumリテラルにはenumクラス名が必要です。

  • booleanリテラルは,TRUEとFALSEである。このリテラルは大文字小文字を区別しません。

(d) 識別変数の注意事項

  • 識別変数は,クエリのFROM節で宣言された識別子であるため,ほかの節では宣言できません。FROM節以外で宣言した場合は例外が発生します。SELECT文,またはDELETE文のWHEREかHAVING節で使用されるすべての識別変数は,FROM節で定義されたものを使用します。

  • 識別変数の範囲は,WHERE節とHAVING節で決定されます。識別変数は,エンティティの抽象スキーマタイプのコレクションメンバやインスタンスは指定できますが,コレクション自体は指定できません。コレクションを指定した場合は例外が発生します。

(e) Path式の注意事項

WHEREかHAVING節内でのコレクションのパス式で,条件式の一部としてIS [NOT] EMPTY式や[NOT] MEMBER [OF]式,またはSIZE操作への引数以外を使用しないでください。

(f) 入力パラメタの注意事項

  • 入力パラメタは,クエリのWHERE節かHAVING節で使用できます。

  • 一つのクエリで位置パラメタと名前付きパラメタを混在して使用しないでください。混在した場合の動作は保証されません。

  • 入力パラメタの値がnullの場合,入力パラメタを含む比較操作か算術操作で返される値はunknownになります。

なお,位置パラメタと名前付きパラメタの使い方については,「8.16.1(2) パラメタの指定方法」を参照してください。