概要:このチュートリアルでは、SQL 論理演算子について学び、条件の真偽をテストする方法を学びます。
論理演算子を使用すると、条件の真偽をテストできます。比較演算子と同様に、論理演算子は true、false、または unknown の値を返します。
次の表は、SQL 論理演算子を説明しています。
| 演算子 | 意味 |
|---|---|
| ALL | すべての比較が true の場合、true を返します。 |
| AND | 両方の式が true の場合、true を返します。 |
| ANY | 比較のいずれかが true の場合、true を返します。 |
| BETWEEN | オペランドが範囲内にある場合、true を返します。 |
| EXISTS | サブクエリが行を含む場合、true を返します。 |
| IN | オペランドがリスト内の値のいずれかと等しい場合、true を返します。 |
| LIKE | オペランドがパターンに一致する場合、true を返します。 |
| NOT | 他のブール演算子の結果を反転します。 |
| OR | いずれかの式が true の場合、true を返します。 |
| SOME | 式の一部が true の場合、true を返します。 |
AND
AND 演算子を使用すると、SQL ステートメント(SELECT、UPDATE、DELETE など)の WHERE 句に複数の条件を構成できます。
expression1 AND expression2Code language: SQL (Structured Query Language) (sql)AND 演算子は、両方の式が true と評価された場合に true を返します。
次の例では、給与が 5,000 より大きく 7,000 より小さいすべての従業員を検索します。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > 5000 AND salary < 7000
ORDER BY salary;Code language: SQL (Structured Query Language) (sql)
OR
AND 演算子と同様に、OR 演算子は、SQL ステートメントの WHERE 句に複数の条件を組み合わせます。
expression1 OR expression2Code language: SQL (Structured Query Language) (sql)ただし、OR 演算子は、少なくとも 1 つの式が true と評価された場合に true を返します。
たとえば、次のステートメントは、給与が 7,000 または 8,000 の従業員を検索します。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary = 7000 OR salary = 8000
ORDER BY salary;Code language: SQL (Structured Query Language) (sql)
IS NULL
IS NULL 演算子は、値を null 値と比較し、比較された値が null の場合に true を返し、それ以外の場合は false を返します。
たとえば、次のステートメントは、電話番号を持っていないすべての従業員を検索します。
SELECT
first_name, last_name, phone_number
FROM
employees
WHERE
phone_number IS NULL
ORDER BY first_name , last_name;
Code language: SQL (Structured Query Language) (sql)
BETWEEN
BETWEEN 演算子は、最小値と最大値が与えられた値のセット内にある値を検索します。最小値と最大値は、条件セットの一部として含まれることに注意してください。
たとえば、次のステートメントは、給与が 9,000 から 12,000 の間のすべての従業員を検索します。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary BETWEEN 9000 AND 12000
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)
9,000 と 12,000 の値が出力に含まれていることに注意してください。
IN
IN 演算子は、値を指定された値のリストと比較します。IN 演算子は、比較された値がリスト内の少なくとも 1 つの値と一致する場合に true を返し、それ以外の場合は false を返します。
次のステートメントは、部門 ID が 8 または 9 のすべての従業員を検索します。
SELECT
first_name, last_name, department_id
FROM
employees
WHERE
department_id IN (8, 9)
ORDER BY department_id;
Code language: SQL (Structured Query Language) (sql)
LIKE
LIKE 演算子は、ワイルドカード演算子を使用して同様の値と値を比較します。SQL は、LIKE 演算子と組み合わせて使用される 2 つのワイルドカードを提供します。
- パーセント記号 (
%) は、0 個、1 個、または複数の文字を表します。 - アンダースコア記号 (
_) は、1 つの文字を表します。
次のステートメントは、名前が「jo」で始まるすべての従業員を検索します。
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE 'jo%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
次の例では、2 番目の文字が h である名を持つすべての従業員を検索します。
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE '_h%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
ALL
ALL 演算子は、値を別の値セット内のすべての値と比較します。ALL 演算子は、比較演算子の前に、サブクエリの後に置く必要があります。
以下は、ALL 演算子の構文を示しています。
comparison_operator ALL (subquery)
Code language: SQL (Structured Query Language) (sql)サブクエリについては、サブクエリ チュートリアルで学習します。
次の例では、部門 8 の従業員のすべての給与よりも高い給与を持つすべての従業員を検索します。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary >= ALL (SELECT
salary
FROM
employees
WHERE
department_id = 8)
ORDER BY salary DESC;Code language: SQL (Structured Query Language) (sql)
ANY
ANY 演算子は、以下に示す条件に従って、値をセット内の任意の値と比較します。
comparison_operator ANY(subquery)Code language: SQL (Structured Query Language) (sql)ALL 演算子と同様に、ANY 演算子は、比較演算子の前に、サブクエリの後に置く必要があります。
たとえば、次のステートメントは、すべての部門の平均給与よりも高い給与を持つすべての従業員を検索します。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > ANY(SELECT
AVG(salary)
FROM
employees
GROUP BY department_id)
ORDER BY first_name , last_name;
Code language: SQL (Structured Query Language) (sql)
SOME は ANY のエイリアスであるため、互換的に使用できます。
EXISTS
EXISTS 演算子は、サブクエリが行を含むかどうかをテストします。
EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)サブクエリが 1 行以上を返す場合、EXISTS の結果は true になります。それ以外の場合は false になります。
たとえば、次のステートメントは、扶養家族を持つすべての従業員を検索します。
SELECT
first_name, last_name
FROM
employees e
WHERE
EXISTS( SELECT
1
FROM
dependents d
WHERE
d.employee_id = e.employee_id);
Code language: SQL (Structured Query Language) (sql)
これで、すべての SQL 論理演算子と、それらを使用して条件の真偽をテストする方法の概要がわかったので、次のチュートリアルでは、各論理演算子を詳しく学習します。