機能
比較述語は、2つの値についての比較を指定します。
記述形式
参照項番
値式 → “2.11 値式”
副問合せ → “2.14 副問合せ”
行値構成子→“2.10 行値構成子”
一般規則
比較述語で指定する比較演算子の種類を以下に示します。
比較演算子 | 機能(注) |
---|---|
= | “=”の左側の値式と右側の値式が等しい場合に真となり、等しくない場合に偽となります。 |
< | “<”の左側の値式が右側の値式より小さい場合に真となり、大きいまたは等しい場合に偽となります。 |
<= | “<=”の左側の値式が右側の値式より小さいまたは等しい場合に真となり、大きい場合に偽となります。 |
> | “>”の左側の値式が右側の値式より大きい場合に真となり、小さいまたは等しい場合に偽となります。 |
>= | “>=”の左側の値式が右側の値式より大きいまたは等しい場合に真となり、小さい場合に偽となります。 |
<> | “<>”の左側の値式と右側の値式が等しくない場合に真となり、等しい場合に述語は偽となります。 |
注) 比較演算子の左側または右側の値式がNULL値の場合、比較述語の結果は不定になります。
比較演算子の左右の値式の対は、比較可能であることが必要です。比較可能なデータ型を以下に示します。なお、BLOB型およびROW_IDはほかの属性と比較することはできません。また、BLOB型同士の比較もできません。
| 右辺 | ||||||||
---|---|---|---|---|---|---|---|---|---|
文字列型 | 各国語文字列型 | 真数型・概数型 | DATE型 | TIME型 | TIMESTAMP型 | INTERVAL型(年月) | INTERVAL型(日時) | ||
左辺 | 文字列型 | ○ | × | × | ○ | ○ | ○ | ○ | ○ |
各国語文字列型 | × | ○ | × | × | × | × | × | × | |
真数型・概数型 | × | × | ○ | × | × | × | ○ | ○ | |
DATE型 | ○ | × | × | ○ | × | × | × | × | |
TIME型 | ○ | × | × | × | ○ | × | × | × | |
TIMESTAMP型 | ○ | × | × | × | × | ○ | × | × | |
INTERVAL型(年月) | ○ | × | ○ | × | × | × | ○ | × | |
INTERVAL型(日時) | ○ | × | ○ | × | × | × | × | ○ |
○: 比較可能
×: 比較不可
注1) 比較相手が変数指定の場合のみ可能です。このとき変数の内容は日付列であることが必要です。
注2) 比較相手が変数指定の場合のみ可能です。このとき変数の内容は時刻列であることが必要です。
注3) 比較相手が変数指定の場合のみ可能です。このとき変数の内容は時刻印列であることが必要です。
注4) 比較相手が変数指定の場合のみ可能です。このとき変数の内容は比較元と同じ精度を持つ年月クラスの時間隔定数であることが必要です。
注5) 比較相手が変数指定の場合のみ可能です。このとき変数の内容は比較元と同じ精度を持つ日時クラスの時間隔定数であることが必要です。
注6) 比較相手が真数(位取り0)の変数指定の場合のみ可能です。このとき変数の内容は比較元と同じ単一日時フィールドからなる年月クラスの時間隔定数であることが必要です。
注7) 比較相手が真数(位取り0)の変数指定の場合のみ可能です。このとき変数の内容は比較元と同じ単一日時フィールドからなる日時クラスの時間隔定数であることが必要です。
値式がNULL値または副問合せの結果が空ならば、比較の結果は不定となります。
比較演算子の左辺と右辺がNULLでない場合、以下の条件が成立すれば真、成立しなければ偽となります。
AとBは等しい
AはBより小さい
AはBと等しいか、AはBより小さい
AはBより大きい
AはBと等しいか、AはBより大きい
AはBに等しくない
値式のデータ型が文字列型、または各国語文字列型ならば、そのデータ型を取り扱う文字コード系(EUCコード、シフトJISコードまたはUNICODE)に基づいて表現した時の数値で、左から右の順に比較されます。長さが異なる文字列の比較は、短い文字列に空白を補い、長さを同じにして比較します。以下に例を示します。
比較述語 | 実行される比較 | 結果 |
---|---|---|
'AB'='ABbb' | 'ABbb'='ABbb' | 真 |
'AB'='ABCD' | 'ABbb'='ABCD' | 偽 |
'AB'>'AAAA' | 'ABbb'>'AAAA' | 真 |
'A'>'Abbb' | 'Abbb'>'Abbb' | 偽 |
b: 空白を示します。
値式に行識別子を指定した場合の記述形式は以下のとおりです。
比較演算子は“=”のみが指定可能です。
もう一方の値式には埋込み変数名または動的パラメタ指定のみが指定可能です。副問合せは指定できません。
埋込み変数名はROW_IDと対応する変数であることが必要です。データ型と対応する変数定義については、“表6.1 SQLのデータ型と対応するC変数定義”および“表6.3 SQLのデータ型と対応するCOBOL変数定義”を参照してください。
値式に行識別子を指定した比較述語は、以下の探索条件にのみ指定可能です。
UPDATE文:探索の探索条件
DELETE文:探索の探索条件
問合せ指定のWHERE句の探索条件
値式に行識別子を指定した比較述語は、副問合せには指定できません。
値式に行識別子を指定した比較述語を問合せ指定のWHERE句に指定した場合、問合せ指定は更新可能であることが必要です。
値式に行識別子を指定した場合、探索条件にブール演算子およびNOTを指定することはできません。
比較演算子の左右の行値構成子要素リストの値式の数は同じであることが必要です。
行値構成子を指定した比較述語は、ブール演算子を用いた比較述語と同じ意味になります。したがって、行値構成子を指定した場合の比較結果や比較可能なデータ型はブール演算子を用いた場合と同じになります。ブール演算子を用いた形式を以下に示します。
比較演算子 | 行値構成子を用いた記述形式 | ブール演算子を用いた記述形式 |
---|---|---|
= | (X1,X2,…,Xn)=(Y1,Y2,…,Yn) | X1=Y1 AND X2=Y2 AND…AND Xn=Yn |
< | (X1,X2,…,Xn)<(Y1,Y2,…,Yn) | X1<Y1 OR (X1=Y1 AND X2<Y2) OR … OR (X1=Y1 AND X2=Y2 AND … AND Xn-1=Yn-1 AND Xn<Yn) |
<= | (X1,X2,…,Xn)<=(Y1,Y2,…,Yn) | X1<Y1 OR (X1=Y1 AND X2<Y2) OR … OR (X1=Y1 AND X2=Y2 AND … AND Xn-1=Yn-1 AND Xn<=Yn) |
> | (X1,X2,…,Xn)>(Y1,Y2,…,Yn) | X1>Y1 OR (X1=Y1 AND X2>Y2) OR … OR (X1=Y1 AND X2=Y2 AND … AND Xn-1=Yn-1 AND Xn>Yn) |
>= | (X1,X2,…,Xn)>=(Y1,Y2,…,Yn) | X1>Y1 OR (X1=Y1 AND X2>Y2) OR … OR (X1=Y1 AND X2=Y2 AND … AND Xn-1=Yn-1 AND Xn>=Yn) |
<> | (X1,X2,…,Xn)<>(Y1,Y2,…,Yn) | X1<>Y1 OR X2<>Y2 OR … OR Xn<>Yn |
比較述語の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。
オペランド | DESCRIBE情報 |
---|---|
比較演算子の左側の値式 | 右側の値式のデータ型 |
比較演算子の右側の値式 | 左側の値式のデータ型 |
備考.比較演算子の両側の値式が動的パラメタ指定の場合はエラーとなります。
使用例
表Tについて検索条件を与えます。
列C1の値が15の行を検索します。
WHERE C1 = 15 →結果として、行R2が得られます。
一方の辺が副問合せの場合
WHERE C1 = (SELECT MIN(C2) FROM T) →結果として、行R1、R3、およびR4が得られます。
副問合せの誤りの例
WHERE C1 >= (SELECT C2 FROM T WHERE C3 = 30) →副問合せのC2の結果が15と20の2個なのでエラーとなります。
列C1、C2の並びが20、10以上の行を検索します。
WHERE (C1,C2) >= (20,10) →結果として、行R5、R6が得られます。