論理演算子を使うと、複数の検索条件の結果を組み合わせて、それに基づいて1つの結果を返すことができます。

SQLでは次の論理演算子があります。

演算子説明
AND両方の条件を満たす行のみを選択する。
ORどちらかの条件を満たす行を選択する。
NOT条件を満たさない行を選択する。

AND、OR演算子を使用するとWHERE句で複数の条件を使用することができます。また、NOT演算子は1つの条件の結果を反転させることができます。

AND演算子

AND条件では、両方の条件を満たす行のみを選択します。

SELECT employee_id, name, job_id, salary
  FROM Employees
 WHERE salary >= 300000
   AND job_id LIKE '%IT%';
実行結果
 employee_id |   name   | job_id  | salary
-------------+----------+---------+--------
 0002        | 佐藤達弘 | IT_PROG | 300000
(1 行)

上記例では、salary(給与額)が30万以上、かつ、job_id(職種ID)にITを含む社員のみが選択されます。

LIKE演算子

WHEREの後に、「列名 LIKE ‘文字列検索条件’」を指定すると、その列名の値が、指定された文字列検索条件に合致する行だけを抽出します。文字列検索条件には、%(0文字以上の任意の文字列)もしくは、_(任意の1文字)のいずれかを指定します。

言い換えれば、LIKE演算子は、文字列の部分一致検索を行いたいときに使います。上記例では、文字列に「IT」が含まれていたら真となります。

OR演算子

OR演算では、どちらかの条件を満たす行を選択します。

SELECT employee_id, name, job_id, salary
  FROM Employees
 WHERE salary >= 300000
    OR job_id LIKE '%IT%';
実行結果
 employee_id |    name    | job_id  | salary
-------------+------------+---------+--------
 0001        | 山田太郎   | AD_PRES | 500000
 0002        | 佐藤達弘   | IT_PROG | 300000
 0003        | 木村幸平   | IT_PROG | 250000
 0005        | 高木龍之介 | IT_PROG | 210000
(4 行)

上記例では、salary(給与額)が30万以上、または、job_id(職種ID)にITを含む社員のみが選択されます。

NOT演算子

WHEREの後にNOT 条件1を指定すると、条件1が偽になる行だけが抽出されます。その際、NULLは対象から除外されます。

SELECT name, job_id
  FROM Employees
 WHERE job_id NOT IN ( 'IT_PROG', 'AD_PRES' );
実行結果
   name   |  job_id
----------+----------
 神埼恵美 | ST_CLERK
 青木和也 | ST_TRAIN
(2 行)

上記例では、job_id(職種ID)がIT_PROG、AD_PRES以外の社員が選択されます。

IN演算子

列名 IN (値1, 値2, …)と指定すると、その列名の値が値1、値2、…と一致する行だけを抽出します。その際、NULL値は対象から除外されます。

優先順位の規則

優先順位の規則によって、式を評価し計算する順序がきります。デフォルトの優先順位は下表のとおりです。

評価の順序条件
1比較条件
2NOT
3AND
4OR

以下のSELECT文を使って優先順位について確認してみましょう。

SELECT name, job_id, salary
  FROM Employees
 WHERE job_id = 'ST_CLERK'
    OR job_id = 'IT_PROG'
   AND salary >= 250000;
実行結果
   name   |  job_id  | salary
----------+----------+--------
 佐藤達弘 | IT_PROG  | 300000
 木村幸平 | IT_PROG  | 250000
 神埼恵美 | ST_CLERK | 220000
(3 行)

ANDとORではANDの方が優先順位が高いため、最初に「job_id = ‘IT_PROG’ AND salary >= 250000」が評価されます。続けて、左記結果と「job_id = ‘ST_CLERK’」とでOR演算を行います。

ただし、最初に計算したい式をカッコで囲むことで、優先順位が変わります。

SELECT name, job_id, salary
  FROM Employees
 WHERE (job_id = 'ST_CLERK'
    OR job_id = 'IT_PROG')
   AND salary >= 250000;
実行結果
   name   | job_id  | salary
----------+---------+--------
 佐藤達弘 | IT_PROG | 300000
 木村幸平 | IT_PROG | 250000
(2 行)

上記サンプルの場合は、最初に「job_id = ‘ST_CLERK’ OR job_id = ‘IT_PROG’」が評価され、その後でAND演算が実行されます。