7.20.7 比較述語
探索条件に比較述語を指定できます。比較述語の例を次に示します。
- (例)
-
販売履歴表(SALESLIST)から,2011/9/6以降に商品を購入した顧客の,顧客ID(USERID),商品コード(PUR-CODE),購入日(PUR-DATE)を検索します。
SELECT "USERID","PUR-CODE","PUR-DATE" FROM "SALESLIST" WHERE "PUR-DATE">=DATE'2011-09-06'
説明
-
下線部分が比較述語となります。
-
>= を比較演算子といいます。
-
比較演算子の左右にある項を比較演算項といいます。この例では,PUR-DATE(列名)とDATE'2011-09-06'(定数)が比較演算項になります。
-
- 〈この項の構成〉
(1) 指定形式
比較述語::=比較演算項1 比較演算子 比較演算項2 比較演算項::={値式|行値構成子} 比較演算子::={=|<>|!=|^=|<|<=|>|>=}
(2) 指定形式の説明
- 比較演算項1,比較演算項2:
-
比較演算項を値式または行値構成子の形式で指定します。値式については,「7.21 値式」を参照してください。行値構成子については,「7.18 行値構成子」を参照してください。
比較演算項に行値構成子を指定する場合の指定規則を次に示します。
-
比較演算項に行値構成子を指定する場合,行値構成子要素を2つ以上指定してください。行値構成子要素を1つだけ指定した場合,その行値構成子は括弧で囲まれた値式として扱われます。
- 行値構成子として扱われる例
-
("C1","C2") = (1,2)
- 値式として扱われる例
-
("C1") = (1)
上記は「"C1" = 1」と同じです。
-
比較演算項に行値構成子を指定する場合,比較演算子の左右両方の比較演算項に行値構成子を指定してください。
-
- 比較演算子:
-
比較演算子には,=,<>,!=,^=,<,<=,>,>=のどれかを指定します。各指定値の意味を次の表に示します。
表7‒12 比較演算子の意味 項番
比較演算子の指定
意味
1
X = Y
XとYが等しい
2
X <> Y
X != Y
X ^= Y
XとYが等しくない
3
X < Y
XがYより小さい
4
X <= Y
XがY以下である
5
X > Y
XがYより大きい
6
X >= Y
XがY以上である
- (凡例)
-
X,Y:比較演算項
- 重要
-
比較演算項に行値構成子を指定する場合,比較演算子には上記の表の項番1~2の=,<>,!=,^=を指定できます。項番3~6の比較演算子は指定できません。
(3) 述語の評価
- ■比較演算項に値式を指定する場合
-
比較演算子の左右の比較演算項が,比較条件を満たす場合に真となります。
なお,比較演算項のどれかがナル値の場合は不定となります。
- ■比較演算項に行値構成子を指定する場合
-
比較演算子の左右の行値構成子中の各行値構成子要素の値を比較して判定します。
(例)
- 比較演算子が「=」の場合
-
比較対象の行値構成子要素の値が,すべて等しい場合は真となります。
比較対象の行値構成子要素の値が,1つ以上等しくない場合は偽となります。
行値構成子要素にナル値が1つ以上あり,かつ比較対象の行値構成子要素の値(ただし,ナル値とナル値の比較対象の行値構成子要素の値を除く)がすべて等しい場合は不定となります。
(例)
比較述語の指定例
比較述語の結果
(1,2,3) = (1,2,3)
真
(1,2,3) = (1,2,4)
偽
(1,2,3) = (1,ナル値,4)
偽
(1,2,3) = (1,2,ナル値)
不定
(1,2,ナル値) = (1,2,ナル値)
不定
- 比較演算子が「<>」,「!=」,「^=」の場合
-
比較対象の行値構成子要素の値が,1つ以上等しくない場合は真となります。
比較対象の行値構成子要素の値が,すべて等しい場合は偽となります。
行値構成子要素にナル値が1つ以上あり,かつ比較対象の行値構成子要素の値(ただし,ナル値とナル値の比較対象の行値構成子要素の値を除く)がすべて等しい場合は不定となります。
(例)
比較述語の指定例
比較述語の結果
(1,2,3) <> (1,2,4)
真
(1,2,3) <> (1,ナル値,4)
真
(1,2,3) <> (1,2,3)
偽
(1,2,3) <> (1,2,ナル値)
不定
(1,2,ナル値) <> (1,2,ナル値)
不定
(4) 規則
(a) 比較演算項に値式を指定する場合の規則
-
比較演算項1と比較演算項2の結果のデータ型が,比較可能なデータ型になるようにしてください。比較可能なデータについては,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
-
比較演算項の結果がナル値の場合,その比較結果は不定となります。
-
比較演算項の値式にバイナリデータを指定した場合,比較演算子には「=」,「<>」,「!=」,または「^=」だけが指定できます。
-
比較演算項の値式には配列データを指定できません。
-
比較演算子の両側に?パラメタだけの比較演算項を指定できません。
-
指定できないケース:?=?
-
指定できるケース:"C1"=?,?=10
-
-
比較演算項2には,スカラ関数CONTAINSを指定できません。
-
比較演算項1にスカラ関数CONTAINSを指定した場合,比較演算子には「>」を指定してください。また,比較演算項2には0を指定してください。
(b) 比較演算項に行値構成子を指定する場合の規則
-
比較演算子の左右に指定する行値構成子の行値構成子要素の数は同じにしてください。
正しい指定例:("C1","C2","C3") = (1,2,3)
誤った指定例:("C1","C2","C3") = (1,2,3,4)
-
比較演算子の左右に指定する行値構成子の各行値構成子要素の組み合わせのデータ型は,比較可能なデータ型になるようにしてください。比較可能なデータについては,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
-
比較演算子の左右に指定する行値構成子の各行値構成子要素に,両方の行値構成子要素が?パラメタとなる組み合わせは指定できません。
正しい指定例:("C1",?,"C3") = (1,2,?)
誤った指定例:("C1",?,"C3") = (1,?,3)
-
行値構成子要素に?パラメタを指定する場合,その?パラメタのデータ型には,比較相手となる行値構成子要素のデータ型が仮定されます。
-
比較演算子の左右に指定する行値構成子のうち,行値構成子要素が値指定だけとなる行値構成子を1つ以上指定してください。
正しい指定例:("C1","C2","C3") = (1,2,3)
誤った指定例:("C1","C2","C3") = ("C4","C5","C6")
-
比較演算子の左右に指定する行値構成子の行値構成子要素には,配列型のデータを指定できません。
-
比較演算子の左右に指定する行値構成子の行値構成子要素中には,次の値式を指定できません。
-
集合関数
-
スカラ副問合せ
-
配列要素参照
-
-
行値構成子を指定した比較述語は,次のどちらかに指定できます。
-
WHERE句
-
DELETE文またはUPDATE文のWHERE 探索条件
-
-
行値構成子を指定した比較述語は,CASE式の探索条件中には指定できません。
(5) 例題
- 例題1
-
販売履歴表(SALESLIST)から,2011/9/4以降に商品コードP001またはP003の商品を購入した顧客の,顧客ID(USERID),商品コード(PUR-CODE),購入日(PUR-DATE)を検索します。
SELECT "USERID","PUR-CODE","PUR-DATE" FROM "SALESLIST" WHERE "PUR-DATE">=DATE'2011-09-04' AND ("PUR-CODE"='P001' OR "PUR-CODE"='P003')
下線部分が比較述語の指定です。
比較演算項には値式を指定しています。
- 例題2
-
販売履歴表(SALESLIST)から,顧客ID(USERID)がU001かつ商品コード(PUR-CODE)がP001の行を検索します。
SELECT "USERID","PUR-CODE","PUR-NUM" FROM "SALESLIST" WHERE ("USERID","PUR-CODE") = ('U001','P001')
下線部分が比較述語の指定です。
比較演算項には行値構成子を指定しています。