Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.19.1 探索条件の指定形式および規則

探索条件には,データの検索条件を指定します。指定された探索条件に従って論理演算が実行され,その結果がのものだけが検索対象になります。探索条件は次の個所に指定できます。

〈この項の構成〉

(1) 指定形式

探索条件::={〔NOT〕 {(探索条件)|述語論理値指定}
              |探索条件 OR {(探索条件)|述語論理値指定}
              |探索条件 AND {(探索条件)|述語論理値指定}}
 
  論理値指定::={TRUE|FALSE}

(2) 指定形式の説明

NOT

NOTを指定すると,探索条件を満たさない値が検索対象になります。例えば,「NOT "USERID"='U00358'」と指定した場合,U00358以外のUSERIDが検索対象になります。

探索条件

複数の探索条件を指定する場合,探索条件をANDまたはORでつなぎます。ANDORは混在して指定できます。ANDORの意味を次に示します。

  • 探索条件1 AND 探索条件2

    探索条件1探索条件2の両方を満たす行が検索対象になります。

  • 探索条件1 OR 探索条件2

    探索条件1探索条件2のどちらかを満たす行が検索対象になります。

なお,探索条件中には,配列型の列を外への参照列として指定できません。

述語

述語の詳細については,「7.20 述語」を参照してください。

論理値指定

TRUE論理値指定TRUEを指定した場合,論理値指定の結果は真となります。

FALSE論理値指定FALSEを指定した場合,論理値指定の結果は偽となります。

探索条件の指定例を次に示します。

(例)

C1C2C3は列名です。

  • 比較述語を使用した指定例

    "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)

探索条件の評価の優先順位は,( )の指定,NOTANDORの順になります。

(3) 規則

  1. SQLの探索条件の中に指定する論理演算の数は,255以下にしてください。

  2. 各論理演算をした場合の結果を次の図に示します。

    図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式に指定した探索条件の指定です。