ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

2.12.1 比較述語

機能

比較述語は、2つの値についての比較を指定します。

記述形式

参照項番

一般規則

比較演算子
  • 比較述語で指定する比較演算子の種類を以下に示します。

    表2.57 比較演算子

    比較演算子

    機能(注)

    “=”の左側の値式と右側の値式が等しい場合に真となり、等しくない場合に偽となります。

    “<”の左側の値式が右側の値式より小さい場合に真となり、大きいまたは等しい場合に偽となります。

    <=

    “<=”の左側の値式が右側の値式より小さいまたは等しい場合に真となり、大きい場合に偽となります。

    “>”の左側の値式が右側の値式より大きい場合に真となり、小さいまたは等しい場合に偽となります。

    >=

    “>=”の左側の値式が右側の値式より大きいまたは等しい場合に真となり、小さい場合に偽となります。

    <>

    “<>”の左側の値式と右側の値式が等しくない場合に真となり、等しい場合に述語は偽となります。

    注) 比較演算子の左側または右側の値式がNULL値の場合、比較述語の結果は不定になります。

  • 比較演算子の左右の値式の対は、比較可能であることが必要です。比較可能なデータ型を以下に示します。なお、BLOB型およびROW_IDはほかの属性と比較することはできません。また、BLOB型同士の比較もできません。

    表2.58 比較可能なデータ型

      

    右辺

    文字列型

    各国語文字列型

    真数型・概数型

    DATE

    TIME

    TIMESTAMP

    INTERVAL(年月)

    INTERVAL(日時)

    左辺

    文字列型

    ×

    ×


    (注1)


    (注2)


    (注3)


    (注4)


    (注5)

    各国語文字列型

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    真数型・概数型

    ×

    ×

    ×

    ×

    ×


    (注6)


    (注7)

    DATE型


    (注1)

    ×

    ×

    ×

    ×

    ×

    ×

    TIME型


    (注2)

    ×

    ×

    ×

    ×

    ×

    ×

    TIMESTAMP型


    (注3)

    ×

    ×

    ×

    ×

    ×

    ×

    INTERVAL型(年月)


    (注4)

    ×


    (注6)

    ×

    ×

    ×

    ×

    INTERVAL型(日時)


    (注5)

    ×


    (注7)

    ×

    ×

    ×

    ×

    ○: 比較可能

    ×: 比較不可

    注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:

    AはBより大きい

    A >= B:

    AはBと等しいか、AはBより大きい

    A <> B:

    AはBに等しくない

  • 値式のデータ型が文字列型、または各国語文字列型ならば、そのデータ型を取り扱う文字コード系(EUCコード、シフトJISコードまたはUNICODE)に基づいて表現した時の数値で、左から右の順に比較されます。長さが異なる文字列の比較は、短い文字列に空白を補い、長さを同じにして比較します。以下に例を示します。

    表2.59 文字列型または各国語文字列型の比較の例

    比較述語

    実行される比較

    結果

    'AB'='ABbb'

    'ABbb'='ABbb'

    'AB'='ABCD'

    'ABbb'='ABCD'

    'AB'>'AAAA'

    'ABbb'>'AAAA'

    'A'>'Abbb'

    'Abbb'>'Abbb'

    b: 空白を示します。

副問合せ
  • 副問合せを指定する場合、副問合せの結果は1行であることが必要です。

値式
  • 値式に行識別子を指定した場合の記述形式は以下のとおりです。

  • 値式に行識別子を指定した比較述語は、以下の探索条件にのみ指定可能です。

    • UPDATE文:探索の探索条件

    • DELETE文:探索の探索条件

    • 問合せ指定のWHERE句の探索条件

  • 値式に行識別子を指定した比較述語は、副問合せには指定できません。

  • 値式に行識別子を指定した比較述語を問合せ指定のWHERE句に指定した場合、問合せ指定は更新可能であることが必要です。

  • 値式に行識別子を指定した場合、探索条件にブール演算子およびNOTを指定することはできません。

行値構成子
  • 比較演算子の左右の行値構成子要素リストの値式の数は同じであることが必要です。

  • 行値構成子を指定した比較述語は、ブール演算子を用いた比較述語と同じ意味になります。したがって、行値構成子を指定した場合の比較結果や比較可能なデータ型はブール演算子を用いた場合と同じになります。ブール演算子を用いた形式を以下に示します。

    表2.60 行値構成子を用いた記述形式とブール演算子を用いた記述形式

    比較演算子

    行値構成子を用いた記述形式

    ブール演算子を用いた記述形式

    (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情報を以下に示します。

    表2.61 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    比較演算子の左側の値式

    右側の値式のデータ型

    比較演算子の右側の値式

    左側の値式のデータ型

    備考.比較演算子の両側の値式が動的パラメタ指定の場合はエラーとなります。

使用例

表Tについて検索条件を与えます。

1

列C1の値が15の行を検索します。

WHERE C1 = 15
→結果として、行R2が得られます。

2

一方の辺が副問合せの場合

WHERE C1 = (SELECT MIN(C2) FROM T)
→結果として、行R1、R3、およびR4が得られます。

3

副問合せの誤りの例

WHERE C1 >= (SELECT C2 FROM T WHERE C3 = 30)
→副問合せのC2の結果が15と20の2個なのでエラーとなります。

例4

列C1、C2の並びが20、10以上の行を検索します。

WHERE (C1,C2) >= (20,10)
→結果として、行R5、R6が得られます。