InterBase クイック スタート:Part IV - 評価順の制御
提供: InterBase
InterBase クイック スタート:Part IV - WHERE 句の利用 へ戻る
複合検索条件を入力する際、条件の評価の順番を意識しなければなりません。 ここでは、部署 623 または 部署 600 にいる、1992年1月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'
結果、次の図のようになっていると思います。
このクエリは、予想外の結果を生成します。なぜなら、AND
はOR
よりも高い優先順位を持っているからです。 これにより、AND
側の式の方が、OR
に関連付けられている式よりも先にテストされます。 上記の例では、検索条件は次のように解釈されます:( WHERE dept_no = 623 ) OR ( WHERE dept_no = 600 AND hire_date > '01-JAN-1992' )
雇用日に関する制限が、2 つ目の部署に対してしか適用されていません。 部署
623
の社員は、雇用日に関係なくリストに入れられてしまいます。-
自然な優先順位を無効にするには、括弧を使用します。 前のクエリに括弧を足して編集し、クエリが正しく解釈されるようにします:
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'
結果、次の図のようになっていると思います。