論理演算子を使うと、複数の検索条件の結果を組み合わせて、それに基づいて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 | 比較条件 |
2 | NOT |
3 | AND |
4 | OR |
以下の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演算が実行されます。