InterBase クイック スタート:Part IV - 評価順の制御

提供: InterBase

InterBase クイック スタート:Part IV - WHERE 句の利用 へ戻る


複合検索条件を入力する際、条件の評価の順番を意識しなければなりません。 ここでは、部署 623 または 部署 600 にいる、1992年1月1日より後に雇用された社員を抽出することを考えます。

Image 025.jpg 複合条件を使用する

  1. SELECT last_name,
           first_name,
           hire_date,
           dept_no
    FROM   Employee
    WHERE  dept_no = 623
            OR dept_no = 600
               AND hire_date > '01-JAN-1992'
    

    結果、次の図のようになっていると思います。

    TutorialWhere18.png


    このクエリは、予想外の結果を生成します。なぜなら、ANDOR よりも高い優先順位を持っているからです。 これにより、AND 側の式の方が、OR に関連付けられている式よりも先にテストされます。 上記の例では、検索条件は次のように解釈されます:

    ( WHERE dept_no = 623 )
    OR
    (
      WHERE dept_no = 600
      AND
      hire_date > '01-JAN-1992'
    )
    

    雇用日に関する制限が、2 つ目の部署に対してしか適用されていません。 部署 623 の社員は、雇用日に関係なくリストに入れられてしまいます。

  2. 自然な優先順位を無効にするには、括弧を使用します。 前のクエリに括弧を足して編集し、クエリが正しく解釈されるようにします:
    SELECT last_name,
           first_name,
           hire_date,
           dept_no
    FROM   Employee
    WHERE  ( dept_no = 623
              OR dept_no = 600 )
           AND hire_date > '01-JAN-1992'
    

    結果、次の図のようになっていると思います。

    TutorialWhere19.png
    メモ: 優先順位は、ANDOR だけでの問題ではありません。 複雑な検索条件を使用する際、常に括弧を追加して、条件の評価が、想定しているものになるようにします。

次は: