スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

2.7.5 述語

<この項の構成>
(1) 比較述語
(2) NULL述語
(3) IN述語
(4) LIKE述語
(5) XLIKE述語
(6) SIMILAR述語
(7) BETWEEN述語
(8) 限定述語
(9) EXISTS述語
(10) 論理述語
(11) 構造化繰返し述語
(12) XMLEXISTS述語

(1) 比較述語

形式
 
 行値構成子 {=|<>|^=|!=|<|<=|>|>=}行値構成子
 

述語が真となる場合

規則
  1. 比較演算子(=,<>,^=,!=,<,<=,>,>=)の両側に定数だけの行値構成子を指定してもかまいません。
  2. 演算結果のデータ型が,次のデータ型となる値を指定できません。
    • BLOB
    • 定義長が32,001バイト以上のBINARY
    • BOOLEAN
    • 抽象データ型
  3. 行値構成子については,「2.8 行値構成子」を参照してください。
  4. 左右の行値構成子中で,同じ位置にある行値構成子要素を対応値とします。対応値のデータ型は比較可能なデータ型にしてください。

    [図データ]

  5. 次に示す箇所の比較述語には,副問合せは指定できません。
    • IF文の探索条件
    • WHILE文の探索条件
    • CREATE TRIGGERのWHEN探索条件(トリガ動作条件)
  6. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,対応値との比較結果は真となります。
  7. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,比較結果は真となります。比較結果が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,その比較結果は不定になります。比較結果が真又は不定でない場合,偽となります。
  8. 繰返し列を添字付きで指定した場合,その要素がないと対応値との比較結果は不定になります。
  9. 比較対象となる行値構成子は,結果の列数を同じにしてください。
  10. うるう秒は1分より小さい値として扱われます。
    (例)
     '00:00:61' < '00:01:00'

(2) NULL述語

形式
 
 値式 IS 〔NOT〕 NULL
 

述語が真となる場合

指定した値式の値がナル値である行に対して,NULL述語は真になります。NOTを指定した場合は,ナル値でない行に対して真になります。ナル値については,「1.7 ナル値」を参照してください。

規則
  1. 次のデータ型の値式は,指定できません。
    • BLOB(?パラメタ,又は埋込み変数を単独で指定した場合を除く)
    • 定義長が32,001バイト以上のBINARY(?パラメタ,又は埋込み変数を単独で指定した場合を除く)
    • BOOLEAN
  2. 繰返し列を添字なしで指定した場合,その列に要素がないとき(NOT指定の場合は要素が一つ以上あるとき)に,NULL述語は真となります。列のすべての要素がナル値であっても,NULL述語は真とはなりません。
  3. 繰返し列を添字付きで指定した場合,指定した要素がナル値ならばNULL述語は真となります。
  4. 繰返し列を添字付きで指定した場合,その要素がないとNULL述語は不定になります。
  5. 繰返し列を添字付きで指定する場合は,添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,NULL述語は真となります。

留意事項
  • オーバフローエラー抑止が設定されている場合,値式の演算結果がオーバフローによってナル値となった場合にも,NULL述語は真となります。

(3) IN述語

形式
 
 行値構成子〔IS〕 〔NOT〕 IN
 {(行値構成子〔,行値構成子〕…)|
  〈表副問合せ〉
  (〔副問合せ実行方式のSQL最適化指定〕
   SELECT〔{ALL|DISTINCT}〕{選択式|*}
   〈表 式〉
    FROM 表参照〔,表参照〕…
    〔WHERE 探索条件〕
    〔GROUP BY 値式〔,値式〕…〕
    〔HAVING 探索条件〕)}
 

述語が真となる場合

次の条件のどちらかを満たしている場合,IN述語は真となります。

NOTを指定した場合は,左側の行値構成子が,右側に指定したすべての行値構成子又は表副問合せのすべての結果行と一致しない行に対して,IN述語は真となります。

規則
  1. 行値構成子又は表副問合せの結果の各データ項目が,次のデータ型となる値を指定できません。
    • BLOB
    • 定義長が32,001バイト以上のBINARY
    • BOOLEAN
    • 抽象データ型
  2. 右側の行値構成子は,最大30,000個指定できます。
  3. 右側が表副問合せでないIN述語の左辺には,値指定だけの行値構成子を指定できません。
  4. 表副問合せについては,「2.4 副問合せ」を参照してください。
  5. IN述語は,限定述語と同じ意味を表すものがあります。同じ意味を表す述語を次に示します。
    IN述語 限定述語
    行値構成子 IN 表副問合せ 行値構成子 = ANY 表副問合せ
    又は
    行値構成子 = SOME 表副問合せ
    行値構成子 NOT IN 表副問合せ 行値構成子 <> ALL 表副問合せ
  6. 表副問合せの結果が空集合の場合,IN述語の結果は偽になります。ただし,NOTを指定した場合は真になります。
  7. 次に示す箇所のIN述語には,表副問合せは指定できません。
    • IF文の探索条件
    • WHILE文の探索条件
    • CREATE TRIGGERのWHEN探索条件(トリガ動作条件)
  8. 各行値構成子中で,同じ位置にある行値構成子要素及び表副問合せの選択式を対応値とします。対応値のデータ型は,変換,又は比較できるデータ型にしてください。ただし,左側に指定した行値構成子中の行値構成子要素の結果のデータ型が各国文字データで,その対応値に文字列定数を指定した場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます。

    [図データ]

  9. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,IN述語は真となります。
  10. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,IN述語は真となります。IN述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,そのIN述語は不定になります。IN述語が真又は不定でない場合,偽となります。
  11. 右側の行値構成子には,添字にANYを指定した繰返し列を指定できません。
  12. 繰返し列を添字付きで指定した場合,その要素がないとIN述語は不定になります。
  13. 行値構成子の結果がナル値の場合,その対応値の比較結果は不定となります。
  14. 比較対象となる行値構成子は,結果の列数を同じにしてください。

留意事項
  1. IN述語に表副問合せを指定した場合,HiRDBが作業表を作成することがあります。このとき,作業表の行長によっては,IN述語の副問合せの処理が制限されることがあります。作業表の行長については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

(4) LIKE述語

形式
 
 値式 〔NOT〕 LIKE パターン文字列 ESCAPE エスケープ文字〕
 

述語が真となる場合

指定した値式の値が,パターン文字列の表すパターンと一致する行に対して,LIKE述語は真になります。NOTを指定した場合は,パターン文字列の表すパターンと一致しない行に対して,述語は真になります。

(値式)
  1. 値式には,文字列のパターン比較の対象となる値式を指定します。ただし,SQL変数,及びSQLパラメタ以外の値指定だけの値式は指定できません。
  2. 値式及びパターン文字列に指定できるデータ型は,文字列データ,各国文字列データ,混在文字列データ,又は定義長が32,000バイト以下のBINARYです。
  3. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,LIKE述語は真となります。
  4. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,LIKE述語は真となります。LIKE述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,そのLIKE述語は不定になります。LIKE述語が真又は不定でない場合,偽となります。
  5. 繰返し列を添字付きで指定した場合,その要素がないとLIKE述語は不定になります。

パターン文字列
  1. パターン文字列には,値指定を指定します。
  2. 指定できるパターン文字列のデータ型は,値式に指定できるデータ型と同じです。
  3. 値式のデータ型とパターン文字列のデータ型の組み合わせは,次のとおりです。
    値式のデータ型 パターン文字列,又はエスケープ文字列のデータ型
    文字列データ 各国文字列
    データ
    混在文字列
    データ
    バイナリ
    データ
    既定文字集合 EBCDIK UTF16
    文字列データ 既定文字集合 × × × ×
    EBCDIK ※3 × ×
    UTF16 ※3 ×
    各国文字列データ ※1 × × × ×
    混在文字列データ × × × ×
    バイナリデータ ※2 × × × ×

    (凡例)
    ○:指定できます。
    △:制限付きで指定できます。
    ×:指定できません。

    注※1
    パターン文字列には文字列定数だけ指定できます。この場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます。特殊文字を指定する場合は,必ず全角文字で指定してください。

    注※2
    16進文字列定数だけ指定できます。

    注※3
    文字列定数,埋込み変数,又は?パラメタだけ指定できます。

  4. 値式,パターン文字列,エスケープ文字列の文字集合は,同じにしてください。ただし,パターン文字列,エスケープ文字列が次に示す場合は,値式の文字集合に変換されるので比較できます。
    ・文字列定数
    ・埋込み変数(既定文字集合)
    ・?パラメタ
  5. パターン文字列中の特殊文字には,_(下線)%(パーセント),及びエスケープ文字があります。バイナリデータでの特殊文字は,_,%,及びエスケープ文字を表すコードを指定してください。パターン文字列中の特殊文字_と%の意味を次の表に示します。

    表2-3 パターン文字列中での特殊文字の意味(LIKE述語)

    項目指定のデータ型 特殊文字と意味
    文字列データ
    • _(下線):1バイトの任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の文字列
    _,%は半角文字で表します。
    各国文字列データ
    • _(下線):1文字の任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の各国文字列
    _,%は全角文字で表します。
    混在文字列データ
    • _(下線):1文字の任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の混在文字列
    _,%は半角文字で表します。
    バイナリデータ
    • 5f(下線を表すコード):1バイトの任意のバイト
    • 25(パーセントを表すコード):0バイト以上の任意のバイト数の,任意のバイト列

    注※
    バイナリデータで特殊文字を指定する場合は,HiRDBのセットアップ時に指定した文字コードで,かつ特殊文字(_,%)を表すコードを指定してください。

  6. パターン文字列中に%を含まない場合,列のデータとパターン文字列の長さが異なる場合は,この述語は真になりません。
  7. 値式で指定した文字列とパターン文字列が,可変長データ(VARCHAR,NVARCHAR,MVARCHAR,又はBINARY)の場合は,値式のデータとパターン文字列データとの比較のほかに,データ長も比較します。
  8. パターン文字列として埋込み変数,SQL変数,又はSQLパラメタを指定する場合,次のことに注意してください。パターン文字列を固定長の埋込み変数,SQL変数,又はSQLパラメタにした場合に変数の長さより短いパターン文字列を設定すると,変数の後ろに空白が入ったり,残っていた不当文字が値として設定されてしまう場合があります。このようなパターン文字列で検索すると,後ろに空白,又は不当文字と同じ値がないデータは検索されません。したがって,固定長の変数をパターン文字列として使用する場合は,後ろにすべて%を設定する必要があります。
    (例)
    変数にパターン文字列として'AB%',及び'AB%%'を設定した場合,文字列データが'ABCD'のときの比較を次に示します。
    変数のデータ型 パターン文字列 文字列データ 比較結果
    可変長文字列 'AB%' 'ABCD' 一致します
    'AB%%' 'ABCD' 一致します
    固定長文字列(4バイト) 'AB%△' 'ABCD' 一致しません
    'AB%%' 'ABCD' 一致します
    (例)
    変数にパターン文字列としてX'52454425'を設定した場合,バイナリデータが52454452554dのときの比較を次に示します。
    変数のデータ型 パターン文字列 バイナリデータ 比較結果
    BINARY型 X'52454425' 52454452554d 一致します
    X'5245442525' 52454452554d 一致します

パターン文字列の例
LIKE述語の代表的なパターン文字列の例を次の表に示します。

表2-4 LIKE述語の代表的なパターン文字列の例

項 目 パターン文字列 意 味
パターン文字列 パターンの一致する文字列
前方一致 nnn% 文字列の先頭部分がnnnです。 'ACT%' ACTACTOR,ACTIONなどACTで始まる文字列
後方一致1 %nnn 文字列の最後の部分がnnnです。 '%ING' ING,BEING,HAVINGなどINGで終わる文字列
任意一致 %nnn% 文字列中の任意の部分にnnnを含みます。 N'%日%' 立,昨,本中などを含む文字列2
完全一致 nnn 文字列がnnnと同じです。 'EQUAL' EQUAL
部分一致 _…_nnn_…_
  i  j
文字列中の特定の部分(i文字目〜j文字目)がnnnと同じで,ほかの部分には任意の文字があります。 '_I_' BIT,HIT,KITなど3文字で2文字目がIの文字列
その他 nnn%mmm 文字列の先頭部分が nnnで,最後の部分がmmmです。 'O%N' ONOWNORIGINなどOで始まりNで終わる文字列
%nnn%mmm% 文字列中の任意の部分にnnnを含み,その部分より後の任意の部分にmmmを含みます。 '%O%N%' ONONE,DOWN,COUNTなどOを含み,その部分より後にNを含む文字列
nnn_…_
1 i
mmm%
j  k
1文字目からi文字目がnnnで,j文字目からk文字目がmmmです。 'CO_ _ECT%' CORRECT
CONNECTOR,
CONNECTIONなどCOで始まり5文字目から7文字目がECTの文字列

nnn,mmmは,%,_を含まない任意の文字列

注※1
空白も比較対象の文字として扱うため,後方に空白のあるデータと比較した場合,結果は偽になります。

注※2
各国文字列中での特殊文字(%,_)は,各国文字の「%」,「_」を使用します。

 

エスケープ文字
パターン文字列中に _(下線)や%(パーセント)を記述すると,無条件に特殊文字とみなされ,通常の文字として扱えません。特殊文字を通常の文字として扱いたい場合は,エスケープ文字を指定します。キーワードESCAPEの後に,任意の1文字(エスケープ文字)を指定しておくと,パターン文字列中に記述したエスケープ文字の直後の特殊文字を通常の文字として扱えます。
(例1)
'5%','25%'など,文字列中に'5%'を含む文字列の場合
 
  '%5?%%' ESCAPE '?'
 
(例2)
'SQLPRINT_REC'など,文字列の最後が'PRINT_REC'となる文字列の場合
 
  '%PRINT@_REC' ESCAPE '@'
 
(例3)
X'48695244425f'など,バイナリ列中にX'48695244425f'を含む16進文字列の場合
 
  X'4869524442ee5f' ESCAPE X'ee'
 
エスケープ文字に指定できる文字を次に示します。
項目のデータ型 指定できる文字
文字データ(CHAR,VARCHAR) 任意の半角文字1文字
混在文字データ(MCHAR,MVARCHAR)
各国文字データ(NCHAR,NVARCHAR) 任意の全角文字1文字
バイナリデータ(BINARY) 任意の1バイトの値

エスケープ文字の次には,必ず特殊文字を指定してください。

留意事項
  1. LIKEの左辺の値式で使用する列の定義長は,255バイト以下(CHAR,VARCHAR,MCHAR,MVARCHAR,及びBINARY)又は,127文字以下(NCHAR,及びNVARCHAR)の方が性能が良くなります。
  2. CHAR型及びVARCHAR型の列にマルチバイト文字が格納されている場合,そのマルチバイト文字は1バイトずつ評価されます。したがって,パターン文字列中に指定した1バイト文字の文字コードが,マルチバイト文字の文字コードに含まれる場合,LIKE述語の結果は真となります。
    (例)
    sjisの文字コードでセットアップし,表T1にCHAR型の列C1があり,列C1中に「ア」という行がある状態で,次の問合せを実行します。
    SELECT C1 FROM T1 WHERE C1 LIKE '%A%' ;
    「ア」は,文字コードを16進数で表すと8341となります。パターン文字列中の「A」は,文字コードを16進数で表すと41となります。したがって,マルチバイト文字である「ア」の文字コードの中に,1バイト文字「A」の文字コードを含んでいるため,LIKE述語の結果は真となります。

(5) XLIKE述語

形式
 
 値式 〔NOT〕 XLIKE パターン文字列 〔ESCAPE エスケープ文字〕
 

述語が真となる場合

指定した値式の値が,パターン文字列の表すパターンと一致する行に対して,XLIKE述語は真になります。NOTを指定した場合は,パターン文字列の表すパターンと一致しない行に対して,述語は真になります。ただし,比較するときに大文字と小文字が区別されないため,同等に扱われます。

(値式)
  1. 値式には,文字列のパターン比較の対象となる列を指定します。ただし,SQL変数,及びSQLパラメタ以外の値指定だけの値式は指定できません。
  2. 指定できる値式のデータ型は,文字列データ,各国文字データ,又は混在文字列データです。
  3. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,XLIKE述語は真となります。
  4. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,XLIKE述語は真となります。XLIKE述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,そのXLIKE述語は不定になります。XLIKE述語が真又は不定でない場合,偽となります。
  5. 繰返し列を添字付きで指定した場合,その要素がないとXLIKE述語は不定になります。

パターン文字列
  1. パターン文字列には,値指定を指定します。
  2. 指定できるパターン文字列のデータ型は,値式に指定できるデータ型と同じです。
  3. 値式のデータ型とパターン文字列のデータ型の組み合わせは,次のとおりです。
    値式のデータ型 パターン文字列,又はエスケープ文字のデータ型
    文字列データ 各国文字列
    データ
    混在文字列
    データ
    既定
    文字集合
    EBCDIK UTF16
    文字列データ 既定文字集合 × × ×
    EBCDIK 2 × ×
    UTF16 2 ×
    各国文字列データ 1 × × ×
    混在文字列データ × × ×

    (凡例)
    ○:指定できます。
    △:制限付きで指定できます。
    ×:指定できません。

    注※1
    パターン文字列には文字列定数だけ指定できます。この場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます。特殊文字を指定する場合は,必ず全角文字で指定してください。

    注※2
    文字列定数,埋込み変数,又は?パラメタだけ指定できます。

  4. 値式,パターン文字列,エスケープ文字列の文字集合は,同じにしてください。ただし,パターン文字列,エスケープ文字列が次に示す場合は,値式の文字集合に変換されるので比較できます。
    ・文字列定数
    ・埋込み変数(既定文字集合)
    ・?パラメタ
  5. パターン文字列中の特殊文字には,_(下線),%(パーセント),及びエスケープ文字があります。パターン文字列中の特殊文字のうち_と%の意味を次の表に示します。

    表2-5 パターン文字列中での特殊文字の意味(XLIKE述語)

    項目指定のデータ型 特殊文字と意味
    文字列データ
    • _(下線):1バイトの任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の文字列
    _,%は半角文字で表します。
    各国文字列データ
    • _(下線):1文字の任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の各国文字列
    _,%は全角文字で表します。
    混在文字列データ
    • _(下線):1文字の任意の文字
    • %(パーセント):0文字以上の任意の文字数の任意の混在文字列
    _,%は半角文字で表します。
  6. パターン文字列データの比較時に,大文字と小文字の区別をしない文字を次に示します。
    ・'A'〜'Z'と'a'〜'z'
    ・'ア'〜'オ','ヤ','ユ','ヨ','ツ'と'ァ'〜'ォ','ャ','ュ','ョ','ッ'
    ・'-'(ハイフン)と'ー'(長音)
    ・'あ'〜'お','や','ゆ','よ','つ'と'ぁ'〜'ぉ','ゃ','ゅ','ょ','っ'
     (各国文字及び混在文字)
  7. パターン文字列中に%を含まない場合,列のデータとパターン文字列の長さが異なる場合は,この述語は真になりません。
  8. 値式で指定した文字列とパターン文字列が,可変長文字列(VARCHAR,NVARCHAR,又はMVARCHAR)の場合は,文字列データとパターン文字列データとの比較のほかに文字列長も比較します。
  9. パターン文字列として埋込み変数,SQL変数,又はSQLパラメタを指定する場合,次のことに注意してください。パターン文字列を固定長の埋込み変数,SQL変数,又はSQLパラメタにした場合に変数の長さより短いパターン文字列を設定すると,変数の後ろに空白が入ったり,残っていた不当文字が値として設定されたりしてしまう場合があります。このようなパターン文字列で検索すると,後ろに空白,又は不当文字と同じ値がないデータは検索されません。したがって,固定長の変数をパターン文字列として使用する場合は,後ろにすべて%を設定する必要があります。

パターン文字列の例
XLIKE述語の代表的なパターン文字列の例を次の表に示します。

表2-6 XLIKE述語の代表的なパターン文字列の例

項 目 パターン文字列 意 味
パターン文字列 パターンの一致する文字列
前方一致 nnn% 文字列の先頭部分がnnnです。 'ACT%' ACTActor,ActionなどACT1で始まる文字列
後方一致 %nnn- 文字列の最後の部分がnnnです。 '%ING' Ing,Being,HAVINGなどING2で終わる文字列
任意一致 %nnn% 文字列中の任意の部分にnnnを含みます。 '%or%' OR,More,CoLorなどor3を含む文字列
完全一致 nnn 文字列がnnnと同じです。 'MAX' MAX,max,mAx4などの文字列
部分一致 _…_nnn_…_
  i  j
文字列中の特定の部分(i文字目〜j文字目)がnnnと同じで,ほかの部分には任意の文字があります。 '_I_' Bit,HIT,Kitなど3文字で2文字目がIの文字列
その他 nnn%mmm 文字列の先頭部分がnnnで,最後の部分がmmmです。 'O%N' onOwnORIGINなどOかoで始まりNかnで終わる文字列
%nnn%mmm% 文字列中の任意の部分にnnnを含み,その部分より後の任意の部分にmmmを含みます。 '%O%N%' ONone,DowN,CountなどOかoを含み,その部分より後にNかnを含む文字列
nnn_…_
1 i
mmm%
j  k
1文字目からi文字目がnnnで,j文字目からk文字目がmmmです。 'CO_ _ECT%' correctConnector,
CONNECTIONなど
CO5で始まり5文字目から7文字目がECT6の文字列

注1
nnn,mmmは,%,_を含まない任意の文字列

注2
空白も比較対象の文字として扱うため,後方に空白のあるデータと比較した場合,結果は偽になります。

注3
各国文字列中での特殊文字(%,_)は,各国文字の「%」,「_」を使用します。

注※1
ACT,ACt,AcT,Act,aCT,aCt,acT,actのどれかの文字列

注※2
ING,INg,Ing,InG,iNG,iNg,inG,ingのどれかの文字列

注※3
OR,Or,oR,orのどれかの文字列

注※4
MAX,MAx,Max,MaX,mAX,mAx,maX,maxのどれかの文字列

注※5
CO,Co,cO,coのどれかの文字列

注※6
ECT,ECt,Ect,EcT,eCT,eCt,ecT,ectのどれかの文字列

 

エスケープ文字
パターン文字列中に _(下線)や %(パーセント)を記述すると,無条件に特殊文字とみなされ,通常の文字として扱えません。特殊文字を通常の文字として扱いたい場合は,エスケープ文字を指定します。キーワードESCAPEの後に,任意の1文字(エスケープ文字)を指定しておくと,パターン文字列中に記述したエスケープ文字の直後の特殊文字を通常の文字として扱えます。
(例1)
'5%','25%'など,文字列中に'5%'を含む文字列の場合
 
  '%5?%%' ESCAPE '?'
 
(例2)
'SQLPRINT_REC'など,文字列の最後が'PRINT_REC'となる文字列の場合
 
  '%PRINT@_REC' ESCAPE '@'
 
エスケープ文字に指定できる文字を次に示します。
項目のデータ型 指定できる文字
文字データ(CHAR,VARCHAR) 任意の半角文字1文字
混在文字データ(MCHAR,MVARCHAR)
各国文字データ(NCHAR,NVARCHAR) 任意の全角文字1文字

エスケープ文字の次には,必ず特殊文字を指定してください。

留意事項
  1. XLIKEの左辺の値式で使用する列の定義長は,255バイト以下(CHAR,VARCHAR,MCHAR,及びMVARCHAR),又は127文字以下(NCHAR,及びNVARCHAR)の方が性能が良くなります。
  2. CHAR型及びVARCHAR型の列にマルチバイト文字が格納されている場合,そのマルチバイト文字は1バイトずつ評価されます。したがって,パターン文字列中に指定した1バイト文字の文字コードが,マルチバイト文字の文字コードに含まれる場合,XLIKE述語の結果は真となります。
(例)
sjisの文字コードでセットアップし,表T1にCHAR型の列C1があり,列C1中に「ア」という行がある状態で,次の問合せを実行します。
SELECT C1 FROM T1 WHERE C1 XLIKE '%A%' ;
「ア」は,文字コードを16進数で表すと8341となります。パターン文字列中の「A」は,文字コードを16進数で表すと41となります。したがって,マルチバイト文字である「ア」の文字コードの中に,1バイト文字「A」の文字コードを含んでいるため,XLIKE述語の結果は真となります。

(6) SIMILAR述語

形式
 
 値式 〔NOT〕 SIMILAR TO パターン文字列 ESCAPE エスケープ文字〕
 

述語が真となる場合

指定した値式の値がパターン文字列の表すパターンと一致する行に対して,SIMILAR述語は真になります。NOTを指定した場合は,パターン文字列の表すパターンと一致しない行に対して,述語は真になります。ただし,パターン文字列の長さが0の場合,値式の長さが0のときにSIMILAR述語は真になります。

規則

(値式)
  1. 値式には,文字列のパターン比較の対象となる値式を指定します。ただし,?パラメタ,及び埋込み変数の値指定だけの値式は指定できません。
  2. 値式及びパターン文字列に指定できるデータ型は,文字列データ,各国文字列データ,混在文字列データ,又は定義長が32,000バイト以下のBINARYです。
  3. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,SIMILAR述語は真となります。
  4. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,SIMILAR述語は真となります。SIMILAR述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定の場合,そのSIMILAR述語は不定になります。SIMILAR述語が真又は不定でない場合,偽となります。
  5. 繰返し列を添字付きで指定した場合,その要素がないとSIMILAR述語は不定になります。

パターン文字列
  1. パターン文字列には,値式を指定します。
  2. 値式に繰返し列は指定できません。
  3. 値式のデータ型とパターン文字列のデータ型の組み合わせを,次の表に示します。
    値式のデータ型 パターン文字列,又はエスケープ文字のデータ型
    文字列データ 各国文字列
    データ
    混在文字列
    データ
    バイナリ
    データ
    既定文字集合 EBCDIK UTF16
    文字列データ 既定文字集合 × × × ×
    EBCDIK 3 × ×
    UTF16 3 ×
    各国文字列データ ※1 × × × ×
    混在文字列データ × × × ×
    バイナリデータ ※2 × × × ×

    (凡例)
    ○:指定できます。
    △:制限付きで指定できます。
    ×:指定できません。

    注※1
    パターン文字列には文字列定数だけ指定できます。この場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます。なお,特殊文字を指定する場合は,必ず全角文字で指定してください。

    注※2
    16進文字列定数だけ指定できます。

    注※3
    文字列定数,埋込み変数,又は?パラメタだけ指定できます。

  4. 値式,パターン文字列,エスケープ文字列の文字集合は,同じにしてください。ただし,パターン文字列,エスケープ文字列が次に示す場合は,値式の文字集合に変換変換されるので比較できます。
    ・文字列定数
    ・埋込み変数(既定文字集合)
    ・?パラメタ
  5. パターン文字列に指定する正規表現の形式を次に示します。
     
    正規表現 ::= 正規項 | 正規表現 垂直棒 正規表現
    正規項 ::= 正規因子| 正規項 正規因子
    正規因子 ::=   正規一次子
                   | 正規一次子 *
                   | 正規一次子 +
                   | 正規一次子 ?
                   | 正規一次子 繰返し因子
    繰返し因子 ::= 左波括弧 下限値 [ 上限指定 ] 右波括弧
    上限指定 ::= コンマ [ 上限値 ]
    正規一次子 ::=   文字指定子
                     | %
                     | 正規文字集合
                     | 正規文字集合識別子指定
                     | 左括弧 正規表現 右括弧
    文字指定子 ::=   エスケープされない文字
                     | エスケープされた文字
    正規文字集合 ::=   _
                       | 左角括弧 文字列挙… 右角括弧
                       | 左角括弧 ^ 文字列挙… 右角括弧
    文字列挙 ::=   文字指定子
                   | 文字指定子 負符号 文字指定子
                   | 正規文字集合識別子指定
    正規文字集合識別子指定 ::= 左角括弧 コロン 正規文字集合識別子 コロン 右角括弧
  6. パターン文字列に指定する正規表現の構文規則を次に示します。
    ・正規文字集合識別子には次のどれかを指定します。
     'ALPHA','UPPER','LOWER','DIGIT','ALNUM','SPACE','WHITESPACE'
    ・エスケープされない文字には,特殊文字を除く任意の1文字を指定します。特殊文字を次に示します。
    特殊文字 バイナリデータで指定するコード
    文字集合なし 文字集合あり
    EBCDIK UTF16
    _(下線文字) X'5F' X'6D' U+005F
    %(パーセント) X'25' X'6C' U+0025
    *(アスタリスク) X'2A' X'5C' U+002A
    +(正符号) X'2B' X'4E U+002B
    ?(疑問符) X'3F' X'6F' U+003F
    |(垂直棒) X'7C' X'4F' U+007C
    ((左括弧) X'28' X'4D' U+0028
    )(右括弧) X'29' X'5D' U+0029
    {(左波括弧) X'7B' X'C0' U+007B
    }(右波括弧) X'7D' X'D0' U+007D
    [(左角括弧) X'5B' X'4A' U+005B
    ](右角括弧) X'5D' X'5A' U+005D
    エスケープ文字 ESCAPEに指定した値
    -(負符号) X'2D' X'60' U+002D
    :(コロン) X'3A' X'7A' U+003A
    ^(サーカムフレックス) X'5E' X'5F' U+005E
    注※ 文字列挙中でだけ特殊文字として扱います。
    ・エスケープされた文字には,特殊文字そのものを指定したい場合に,エスケープ文字に続けてエスケープする特殊文字を指定します。
    ・下限値と上限値には,0≦下限値≦上限値≦256を満たす整数を指定します。
  7. パターン文字列に指定する正規表現の各指定の意味を,次の表に示します。

    表2-7 正規表現の各指定の意味

    正規表現の指定 意味
    文字指定子 文字指定子で指定された文字(長さ1の文字列)を意味します。
    _(下線文字) 長さが1の任意の文字を意味します。
    %(パーセント) 長さが0以上の任意の文字列を意味します。
    正規一次子* 直前の正規一次子の,0回以上の繰り返しを意味します。
    正規一次子+ 直前の正規一次子の,1回以上の繰り返しを意味します。
    正規一次子? 直前の正規一次子の,0回又は1回の繰り返しを意味します。
    正規表現|正規表現 |の左右に指定した正規表現のうちのどちらかを意味します。
    (正規表現) ( )内で指定した正規表現のグループ化を意味します。
    正規表現を使用する際に,正規表現であることを明確にする場合に使用します。主に「|」を使用するときに利用します。
    正規一次子{n}
    正規一次子{n,m}
    正規一次子{n,}
    直前の正規一次子の繰り返しを意味します。繰り返し回数の指定方法と意味を次に示します。
    {n} :直前の正規表現の,n回の繰り返し
    {n,m}:直前の正規表現の,n回以上m回以下の繰り返し
    {n,} :直前の正規表現の,n回以上の繰り返し
    [文字列挙…] 列挙された文字のうちの任意の文字を意味します。
    [^文字列挙…] 列挙された文字を除く任意の文字を意味します。
    文字指定子1-文字指定子2 文字列挙中に指定した場合,文字指定子1が示す文字から文字指定子2が示す文字までの任意の文字(文字コードによる範囲)を意味します。
    [:ALPHA:] 任意の英大文字(\,@,#は含まない),又は英小文字
    [:UPPER:] 任意の英大文字(\,@,#は含まない)
    [:LOWER:] 任意の英小文字
    [:DIGIT:] 任意の数字
    [:ALNUM:] 任意の英大文字(\,@,#は含まない),英小文字,又は数字
    [:SPACE:] 半角の空白文字(ただし,値式が各国文字列データの場合は,全角の空白文字)
    [:WHITESPACE:] 次の表に示す文字コードの文字のうち,任意の1文字(文字コード種別によって[:WHITESPACE:]が意味する文字は異なる)
     
    [:WHITESPACE:]に含まれる文字の文字コードを次の表に示します。
    Unicode(UTF-8) シフトJIS漢字 EUC日本語漢字,
    EUC中国語漢字
    中国語漢字(GB18030) LANG-C Unicode規格で定められた文字の名前
    既定文字集合 UTF16 既定文字集合 EBCDIK
    X'09' U+0009 X'09' X'05' X'09' X'09' X'09' Horizontal Tabulation
    X'0A' U+000A X'0A' X'15' X'0A' X'0A' X'0A' Line Feed
    X'0B U+000B X'0B X'0B' X'0B X'0B X'0B Vertical Tabulation
    X'0C' U+000C X'0C' X'0C' X'0C' X'0C' X'0C' Form Feed
    X'0D' U+000D X'0D' X'0D' X'0D' X'0D' X'0D' Carriage Return
    X'20' U+0020 X'20' X'40' X'20' X'20' X'20' Space
    X’C285’ U+0085 X'81308135' Next Line
    X’C2A0’ U+00A0 X'81308432' No-Break Space
    X’E19A80’ U+1680 X'8134AC34' Ogham Space Mark
    X’E28080’ U+2000 X'8136A336' En Quad
    X’E28081’ U+2001 X'8136A337' Em Quad
    X’E28082’ U+2002 X'8136A338' En Space
    X’E28083’ U+2003 X'8136A339' Em Space
    X’E28084’ U+2004 X'8136A430' Three-Per-Em Space
    X’E28085’ U+2005 X'8136A431' Four-Per-Em Space
    X’E28086’ U+2006 X'8136A432' Six-Per-Em Space
    X’E28087’ U+2007 X'8136A433' Figure Space
    X’E28088’ U+2008 X'8136A434' Punctuation Space
    X’E28089’ U+2009 X'8136A435' Thin Space
    X’E2808A’ U+200A X'8136A436' Hair Space
    X’E280A8’ U+2028 X'8136A635' Line Separator
    X’E280A9’ U+2029 X'8136A636' Paragraph Separator
    X’E280AF’ U+202F X'8136A732' Narrow No-Break Space
    X’E38080’ U+3000 0x8140 X’A1A1’ X’A1A1’ Ideographic Space

    (凡例)
    −:該当しません。

    注※
    値式が文字列型の場合は,[:WHITESPACE:]に含まれません。

  8. 正規文字集合識別子指定はバイナリデータでは指定できません。
  9. パターン文字列として埋込み変数,SQL変数,又はSQLパラメタを指定する場合,次のことに注意してください。
    パターン文字列を固定長の埋込み変数,SQL変数,又はSQLパラメタにした場合に,変数の長さより短いパターン文字列を設定すると,変数の後ろに空白が入ったり,残っていた不当文字が値として設定されてしまうことがあります。このようなパターン文字列で検索すると,後ろに空白,又は不当文字と同じ値がないデータは検索されません。したがって,固定長の変数をパターン文字列として使用する場合は,後ろにすべて%を設定してください。
    (例1)
    変数にパターン文字列として'AB%',及び'AB%%'を設定した場合,文字列データが'ABCD'のときの比較結果を次に示します。
    変数のデータ型 パターン文字列 文字列データ 比較結果
    可変長文字列 'AB%' 'ABCD' 一致します。
    'AB%%' 'ABCD' 一致します。
    固定長文字列(4バイト) 'AB%△' 'ABCD' 一致しません。
    'AB%%' 'ABCD' 一致します。
    (例2)
    変数にパターン文字列としてX'52454425'を設定した場合,バイナリデータが52454452554dのときの比較を次に示します。
    変数のデータ型 パターン文字列 バイナリデータ 比較結果
    BINARY型 X'52454425' 52454452554d 一致します。
    X'5245442525' 52454452554d 一致します。

不正なパターン文字列
  1. パターン文字列が不正(KFPA11424-Eメッセージを出力)となる条件を次に示します。
    関連する項目 条件 不正なパターン文字列の例
    正規一次子*
    正規一次子+
    正規一次子?
    * , + , ?の直前の正規一次子が指定されていない。 '(*)','(+)','(?)'
    正規表現|正規表現 |の前後のどちらかに正規表現が指定されていない。 'a|','(a|)','(a||b)'
    (正規表現) ()内に正規表現が指定されていない。 '()'
    (と)が対応していない。 '(abc','abc)'
    正規一次子{n}
    正規一次子{n,m}
    正規一次子{n,}
    繰返し因子の直前の正規一次子が指定されていない。 '{4}'
    繰返し因子の繰り返し回数の指定が不正。 'a{-1}','a{4,2}'
    {と}が対応していない。 'a{4','a4}'
    [文字列挙…]
    [^文字列挙…]
    文字列挙にエスケープされていない特殊文字を含んでいる。ただし,正規文字集合識別指定は指定できる。 '[a%c]'
    -の前後の文字指定が不正。 '[-]','[c-a]','[a--]'
    []内に文字列挙の指定がない。 '[]','[^]'
    [と]が対応していない。 '[a-c','a-c]'
    エスケープ文字 パターン文字列の最後の文字がエスケープ文字である。 'abc\'(エスケープ文字として'\'を指定した場合)
    正規文字集合識別指定 正規文字集合識別子が不正である。 '[:INVALID:]'

パターン文字列の例
SIMILAR述語の代表的なパターン文字列の例を次の表に示します。

表2-8 SIMILAR述語の代表的なパターン文字列の例

項 目 パターン文字列 意 味
パターン文字列 パターンの一致する文字列
前方一致 nnn% 文字列の先頭部分がnnnです。 'ACT%' ACTACTOR,ACTIONなどACTで始まる文字列
後方一致1 %nnn 文字列の最後の部分がnnnです。 '%ING' ING,BEING,HAVINGなどINGで終わる文字列
任意一致 %nnn% 文字列中の任意の部分にnnnを含みます。 N'%日%' 立,昨,本中などを含む文字列2
完全一致 nnn 文字列がnnnと同じです。 'EQUAL' EQUAL
部分一致 _…_nnn_…_
  i  j
文字列中の特定の部分(i文字目〜j文字目)がnnnと同じで,ほかの部分には任意の文字があります。 '_I_' BIT,HIT,KITなど3文字で2文字目がIの文字列
1回以上の繰り返し mmm[0-9]+
1  i
又は
mmm[:DIGIT:]+
1  i
文字列の先頭部分がmmmで,i文字目以降が数値です。 'KFPA11[0-9]+-E '
又は
'KFPA11[:DIGIT :]+-E''
KFPA11104-E,KFPA11901-EなどKFPA11で始まり7文字目から数値で数値の後が-Eの文字列
幾つかの文字の選択 mmm(n|o)
1  i
又は
mmm[no]
1  i
文字列の先頭部分がmmmで,i文字目がn又はoです。 'KFPA%-(W|E)'
又は
'KFPA%-[WE]'
KFPA20008-W,KFPA11901-EなどKFPAで始まり最後の2文字が-E又は-Wの文字列
0回以上,1回以下の繰り返し nnno?mmm 文字列の先頭部分がnnn,最後の部分がmmmでその間にoがある又はないです。 'OW?N' ONOWNなどOで始まりNで終わる文字列の間にWがある文字列とない文字列
0回以上の繰り返し nnno*mmm 文字列の先頭部分がnnn,最後の部分がmmmでその間にoが0回以上繰り返します。 10*1 111011001など最初の文字が1でそれ以降に0が0回以上繰り返され最後に1の文字列
n回の繰り返し mmm{n} 文字列の先頭部分がmmmでn回繰り返します。 [1-9]0{3} 100020003000など最初の文字が1〜9でそれ以降0が3回繰り返される文字列
その他 nnn%mmm 文字列の先頭部分がnnnで,最後の部分がmmmです。 'O%N' ONOWNORIGINなどOで始まりNで終わる文字列
%nnn%mmm% 文字列中の任意の部分にnnnを含み,その部分から後の任意の部分にmmmを含みます。 '%O%N%' ONONE,DOWN,COUNTなどOを含み,その部分より後にNを含む文字列
nnn_…_
1 i
mmm%
j  k
1文字目からi文字目がnnnで,j文字目からk文字目がmmmです。 'CO_ _ECT%' CORRECT
CONNECTOR,
CONNECTIONなどCOで始まり5文字目から7文字目がECTの文字列
nnn,mmmは,特殊文字を含まない任意の文字列
注※1
空白も比較対象の文字として扱うため,後方に空白のあるデータと比較した場合,結果は偽になります。
注※2
各国文字列中での特殊文字は,各国文字に合わせた特殊文字を使用します。

エスケープ文字
パターン文字列中の特殊文字は通常の文字として扱えません。特殊文字を通常の文字として扱いたい場合は,エスケープ文字を指定します。キーワードESCAPEの後に,任意の1文字(エスケープ文字)を指定しておくと,パターン文字列中に記述したエスケープ文字の直後の特殊文字を,通常の文字として扱えます。エスケープ文字には,文字定数,?パラメタ,埋込み変数,SQL変数名,SQLパラメタ名を指定できます。
(例1)
'5%','25%'など,文字列中に'5%'を含む文字列の場合
 
  '%5\%%' ESCAPE '\'
(例2)
'SQLPRINT_REC'など,文字列の最後が'PRINT_REC'となる文字列の場合
 
  '%PRINT\_REC' ESCAPE '\'
 
(例3)
X'48695244425f'など,バイナリ列中にX'48695244425f'を含む16進文字列の場合
 
  X'4869524442ee5f' ESCAPE X'ee'
 
エスケープ文字に指定できる文字を次に示します。
項目のデータ型 指定できる文字
文字データ(CHAR,VARCHAR) 任意の半角文字1文字
混在文字データ(MCHAR,MVARCHAR)
各国文字データ(NCHAR,NVARCHAR) 任意の全角文字1文字
バイナリデータ(BINARY) 任意の1バイトの値
エスケープ文字の次には,必ず特殊文字を指定してください。

留意事項
  1. SIMILARの左辺の値式で使用する列の定義長は,255バイト以下(CHAR,VARCHAR,MCHAR,MVARCHAR,及びBINARY)又は,127文字以下(NCHAR,及びNVARCHAR)の方が性能が良くなります。
  2. CHAR型及びVARCHAR型の列にマルチバイト文字が格納されている場合,そのマルチバイト文字は1バイトずつ評価されます。したがって,パターン文字列中に指定した1バイト文字の文字コードが,マルチバイト文字の文字コードに含まれる場合,SIMILAR述語の結果は真となります。
    (例)
    sjisの文字コードでセットアップし,表T1にCHAR型の列C1があり,列C1中に「ア」という行がある状態で,次の問合せを実行します。
    SELECT C1 FROM T1 WHERE C1 SIMILAR TO '%A%' ;
    「ア」は,文字コードを16進数で表すと8341となります。パターン文字列中の「A」は,文字コードを16進数で表すと41となります。したがって,マルチバイト文字である「ア」の文字コードの中に,1バイト文字「A」の文字コードを含んでいるため,SIMILAR述語の結果は真となります。
  3. パターン文字列が極端に長い場合や,特殊文字{}を連続して指定した場合,検索性能が劣化したり,メモリ使用量が増大したりすることがあります。

(7) BETWEEN述語

形式
 
 行値構成子1 〔NOT〕 BETWEEN 行値構成子2 AND 行値構成子3
 

述語が真となる場合

次の条件を満足する行に対して,BETWEEN述語は真になります。

行値構成子2 ≦ 行値構成子 1 ≦ 行値構成子3

NOTを指定した場合は,条件を満足しない行に対して,この述語は真になります。

規則

(行値構成子1)
  1. 値指定だけの行値構成子要素は指定できません。
  2. 繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,BETWEEN述語は真となります。
  3. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,BETWEEN述語は真となります。BETWEEN述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,そのBETWEEN述語は不定になります。BETWEEN述語が真又は不定でない場合,偽となります。
  4. 繰返し列を添字付きで指定した場合,その要素がないとBETWEEN述語は不定になります。

(行値構成子2及び行値構成子3)
  1. 繰返し列を指定できません。

(共通)
  1. 各行値構成子中で,同じ位置にある行値構成子要素を対応値とします。対応値のデータ型は,それぞれ変換できるデータ型にしてください。ただし,行値構成子1に各国文字データを指定し,行値構成子2,又は行値構成子3の対応値に文字列定数を指定した場合,文字列定数を各国文字列定数とみなします。文字列定数を各国文字列定数とみなした場合,文字コードはチェックされないで,文字データの長さだけがチェックされます。

    [図データ]

  2. 行値構成子1,行値構成子2及び行値構成子3には,次のデータ型の値を指定できません。
    • BLOB
    • 最大長が32,001バイト以上のBINARY
    • BOOLEAN
    • 抽象データ型
  3. 行値構成子1,行値構成子2及び行値構成子3は,結果の列数を同じにしてください。

(8) 限定述語

形式
 
 行値構成子{=|<>|^=|!=|<|<=|>|>=}
    {{ANYSOME}|ALL
  〈表副問合せ〉
  (〔副問合せ実行方式のSQL最適化指定〕
   SELECT〔{ALL|DISTINCT}〕{選択式|*}
    〈表 式〉
    FROM 表参照〔,表参照〕…
     〔WHERE 探索条件〕
     〔GROUP BY 値式〔,値式〕…〕
     〔HAVING 探索条件〕)
 

述語が真となる場合

ANY,又はSOMEを指定した場合,表副問合せの結果の任意の行が一つでも行値構成子との比較条件を満たしていれば,限定述語の結果は真になります。

ALLを指定した場合,表副問合せの結果のすべての行が行値構成子との比較条件を満たしているか,又は表副問合せの結果が空集合であれば,限定述語の結果は真になります。

規則
  1. 演算結果のデータ型が,次のデータ型となる値を指定できません。
    • BLOB
    • 定義長が32,001バイト以上のBINARY
    • BOOLEAN
    • 抽象データ型
  2. 行値構成子の結果がナル値である行に対して,この述語は不定になります。
  3. 表副問合せについては,「2.4 副問合せ」を参照してください。
  4. 限定述語のSOME指定とANY指定のどちらを指定しても処理は同じです。
  5. 限定述語は,IN述語と同じ意味を表すものがあります。同じ意味を表す述語を次に示します。
    限定述語 IN述語
    行値構成子 = ANY 表副問合せ
    又は
    行値構成子 = SOME 表副問合せ
    行値構成子 IN 表副問合せ
    行値構成子 <> ALL 表副問合せ 行値構成子 NOT IN 表副問合せ
  6. ANY,又はSOMEを指定した限定述語の結果を次の表に示します。表副問合せの結果の任意の行が一つでも条件を満たしていれば真になります。すべての行の比較結果がすべて偽であるか,又は表副問合せの結果が空集合であれば偽になります。どちらでもなければ不定になります。

    表2-9 ANY,又はSOMEを指定した限定述語の結果

    副問合せの各行に対する比較結果 限定述語の結果(ANY又はSOME)
    真の行あり
    真の行なし 不定あり 不定
    不定なし
    空集合
  7. ALLを指定した限定述語の結果を次の表に示します。表副問合せの結果のすべての行の比較結果が真であるか,又は表副問合せの結果が空集合であれば真になります。任意の行が一つでも偽であれば偽になります。どちらでもなければ不定になります。

    表2-10 ALLを指定した限定述語の結果

    副問合せの各行に対する比較結果 限定述語の結果(ALL)
    偽の行あり
    偽の行なし 不定あり 不定
    不定なし
    空集合
  8. 次に示す箇所には,限定述語は指定できません。
    • IF文の探索条件
    • WHILE文の探索条件
    • CREATE TRIGGERのWHEN探索条件(トリガ動作条件)
  9. 行値構成子要素に繰返し列を指定する場合は,添字を指定してください。繰返し列を添字付きで指定して,その要素が条件を満たしている場合,限定述語は真となります。
  10. 繰返し列の添字としてANYを指定できます。ANYを指定した場合は,その列の少なくとも一つの要素が条件を満たしていれば,限定述語は真となります。限定述語が真でなく,その列の少なくとも一つの要素に対して指定した条件が不定ならば,その限定述語は不定になります。限定述語が真又は不定でない場合,偽となります。
  11. 繰返し列を添字付きで指定した場合,その要素がないと限定述語は不定になります。
  12. 限定述語の左辺に指定した行値構成子の結果の列数と,表副問合せの結果の列数は同じにしてください。

留意事項
  1. 限定述語を指定した場合,HiRDBが作業表を作成することがあります。このとき,作業表の行長によっては,限定述語の処理が制限されることがあります。作業表の行長については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

(9) EXISTS述語

形式
 
 EXISTS
  〈表副問合せ〉
  (〔副問合せ実行方式のSQL最適化指定〕
   SELECT〔{ALL|DISTINCT}〕{選択式|*}
    〈表 式〉
    FROM 表参照〔,表参照〕…
     〔WHERE 探索条件〕
     〔GROUP BY 値式〔,値式〕…〕
     〔HAVING 探索条件〕)
 

述語が真となる場合

表副問合せの結果が空集合でなければ,EXISTS述語の結果は真になります。

規則
  1. 表副問合せについては,「2.4 副問合せ」を参照してください。
  2. EXISTS述語は,表副問合せの結果が空集合でないかどうかをテストする述語です。
  3. EXISTS述語の結果を次の表に示します。表副問合せの結果が1行以上であれば真になります。空集合であれば偽になります。

    表2-11 EXISTS述語の結果

    副問合せの結果,問合せ条件に合った行の数 EXIST述語の結果
    1行以上
    0行
  4. 次に示す箇所には,EXISTS述語は指定できません。
    • IF文の探索条件
    • WHILE文の探索条件
    • CREATE TRIGGERのWHEN探索条件(トリガ動作条件)

(10) 論理述語

形式
 
 値式 IS 〔NOT〕 {TRUE|FALSE|UNKNOWN}
 

述語が真となる場合

値式の論理値が,指定した真(TRUE),偽(FALSE),又は不定(UNKNOWN)と一致する場合,論理述語は真になります。NOTを指定した場合は,値式の論理値が,指定した真(TRUE),偽(FALSE),又は不定(UNKNOWN)と一致しない場合に真となります。

規則
  1. 論理述語を評価した場合の述語の結果を次の表に示します。NOTを指定した場合は,表中の各論理値が反転します。

    表2-12 論理述語を評価した場合の述語の結果

    値式の論理値 IS TRUE IS FALSE IS UNKNOWN
    不定
  2. 値式には,次のデータ型の値を指定できます。
    • BOOLEAN
  3. 論理値が不定であることと,論理値がナル値であることは等価です。

(11) 構造化繰返し述語

形式
 
 ARRAY(列指定〔,列指定〕…)[ANY](探索条件)
 

述語が真となる場合

ARRAY(列指定〔,列指定〕…)に指定した繰返し列を,添字が同じ要素の組とした複数項目の繰り返しとみなし,そのどれかの要素が探索条件を満たす場合,構造化繰返し述語は真となります。

規則

ARRAY(列指定〔,列指定〕…)
  1. 列指定には,構造化する繰返し列を指定します。
  2. 列指定は,一つのインデクス構成列にすべて含まれるようにしてください。
  3. 列指定に次に示す列は指定できません。
    ・異なる表の列
    ・異なる表から導出した列
    ただし,異なる表には,実表が同じで相関名が異なるものも含みます。
  4. 列指定は,外への参照をする列を指定できません。
  5. 列指定は,同じ列を2回以上指定できません。
  6. 列指定は,最大16個指定できます。

探索条件
探索条件を指定します。ただし,構造化繰返し述語についての次の規則があります。
  1. 探索条件には,次のものを指定できません。
    ・添字付きの列指定
    ・ARRAY(列指定〔,列指定〕…)で指定した繰返し列以外の列
    ・システム定義スカラ関数,関数呼出し,及びIS_USER_CONTAINED_IN_HDS_GROUPを含む述語
    ・構造化繰返し述語
    ・XMLEXISTS述語
    ・列指定を含まない述語
    ・副問合せ
  2. NULL述語を指定した場合,その列に要素がないときは,NULL述語は不定になります。指定した要素がナル値ならばNULL述語は真になります。

共通
  1. 構造化繰返し述語を含む探索条件は,NOTで否定できません。
  2. IF文,WHILE文の探索条件に,構造化繰返し述語は指定できません。
  3. HAVING句に,構造化繰返し述語は指定できません。
  4. CASE式の探索条件に,構造化繰返し述語は指定できません。
  5. 構造化繰返し述語を含んでいて,かつオペランドの探索条件に次に示す列(外への参照をする列を除く)があるORは指定できません。
    ・異なる表の列
    ・異なる表から導出した列
    ただし,異なる表には,実表が同じで相関名が異なるものも含みます。
  6. ビュー定義の導出問合せ式中の探索条件には指定できません。
  7. 外結合の結合表を含む問合せ指定のON 探索条件に構造化繰返し述語を指定する場合,列指定には内表の列を指定してください。
  8. 外結合の結合表を含む問合せ指定のWHERE句に構造化繰返し述語を指定する場合,列指定には外結合の最も外側の表の列を指定してください。

使用例
成績表から,数学の成績が85点以上の氏名を求めます。なお,成績表は科目名,成績が要素10の繰返し列となっています。
 
  SELECT 氏名 FROM 成績表
      WHERE ARRAY(科目名,成績)[ANY](科目名='数学' AND 成績>=85)
 
[図データ]

(12) XMLEXISTS述語

HiRDB XML Extensionと連携することで使用できる述語です。

詳細は,「1.15.4(1) XMLEXISTS述語」を参照してください。