7.19.1 探索条件の指定形式および規則
探索条件には,データの検索条件を指定します。指定された探索条件に従って論理演算が実行され,その結果が真のものだけが検索対象になります。探索条件は次の個所に指定できます。
-
WHERE句
-
HAVING句
-
CASE式
-
結合表のON 探索条件
-
DELETE文,PURGE CHUNK文,UPDATE文のWHERE 探索条件
- 〈この項の構成〉
(1) 指定形式
探索条件::={〔NOT〕 {(探索条件)|述語|論理値指定} |探索条件 OR {(探索条件)|述語|論理値指定} |探索条件 AND {(探索条件)|述語|論理値指定}} 論理値指定::={TRUE|FALSE}
(2) 指定形式の説明
- NOT:
-
NOTを指定すると,探索条件を満たさない値が検索対象になります。例えば,「NOT "USERID"='U00358'」と指定した場合,U00358以外のUSERIDが検索対象になります。
- 探索条件:
-
複数の探索条件を指定する場合,探索条件をANDまたはORでつなぎます。ANDとORは混在して指定できます。ANDとORの意味を次に示します。
-
探索条件1 AND 探索条件2
探索条件1と探索条件2の両方を満たす行が検索対象になります。
-
探索条件1 OR 探索条件2
探索条件1と探索条件2のどちらかを満たす行が検索対象になります。
なお,探索条件中には,配列型の列を外への参照列として指定できません。
-
- 述語:
-
述語の詳細については,「7.20 述語」を参照してください。
- 論理値指定:
-
TRUE:論理値指定にTRUEを指定した場合,論理値指定の結果は真となります。
FALSE:論理値指定にFALSEを指定した場合,論理値指定の結果は偽となります。
探索条件の指定例を次に示します。
- (例)
-
C1,C2,C3は列名です。
-
比較述語を使用した指定例
"C1">=100 "C1"=? "C2"=CURRENT_DATE SUBSTR("C3",2,3)='150'
-
IN述語,BETWEEN述語,LIKE述語,またはNULL述語を使用した指定例
"C1" IN (10,20) "C1" BETWEEN 100 AND 200 "C3" LIKE 'M%' "C3" IS NULL
-
複数の探索条件を指定する例
"C1"=100 AND "C2">=DATE'2011-09-06' "C1" IN (10,20) AND "C2">=DATE'2011-09-06' "C1"=10 OR "C1"=20 "C2">=DATE'2011-09-04' AND ("C1"=10 OR "C2"=20)
-
探索条件の評価の優先順位は,( )の指定,NOT,AND,ORの順になります。
(3) 規則
-
SQLの探索条件の中に指定する論理演算の数は,255以下にしてください。
-
各論理演算をした場合の結果を次の図に示します。
図7‒3 論理演算をした場合の結果
(4) 例題
探索条件の指定例を例題を使って説明します。
- 例題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')
下線部分がWHERE句に指定した探索条件の指定です。
- 例題2
-
販売履歴表(SALESLIST)から,2011/9/3以降の商品コード(PUR-CODE)ごとの販売個数の合計値,平均値を求めます。
その際,販売個数の合計値が20個以下の商品コードだけを検索対象にします。
SELECT "PUR-CODE",SUM("PUR-NUM"),AVG("PUR-NUM") FROM "SALESLIST" WHERE "PUR-DATE">=DATE'2011-09-03' GROUP BY "PUR-CODE" HAVING SUM("PUR-NUM")<=20
下線部分がHAVING句に指定した探索条件の指定です。
- 例題3
-
新商品表(PRODUCTLIST_NEW)に,商品表(PRODUCTLIST)の行を挿入します。行を挿入する際,商品価格(PRICE)を次に示すように新価格に変更します。
-
商品コード(PCODE)がP001の場合:商品価格を10%引きにする
-
商品コードがP002の場合:商品価格を20%引きにする
-
上記以外の場合:商品価格を30%引きにする
INSERT INTO "PRODUCTLIST_NEW"("PCODE","PRICE") SELECT "PCODE",CASE WHEN "PCODE"='P001' THEN "PRICE"*0.9 WHEN "PCODE"='P002' THEN "PRICE"*0.8 ELSE "PRICE"*0.7 END FROM "PRODUCTLIST"
下線部分がCASE式に指定した探索条件の指定です。
-