SQL 論理演算子

概要:このチュートリアルでは、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 ステートメント(SELECTUPDATEDELETE など)の 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)
SQL Logical Operators - AND example

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)
SQL Logical Operators - OR example

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)
SQL Logical Operators - IS NULL example

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)
SQL Logical Operators - BETWEEN example

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)
SQL Logical Operators - IN example

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)
SQL Logical Operators - LIKE example

次の例では、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)
SQL Logical Operators - LIKE example 2

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)
SQL Logical Operators - ALL example

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)
SQL Logical Operators - SOME example

SOMEANY のエイリアスであるため、互換的に使用できます。

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 Logical Operators - EXISTS example

これで、すべての SQL 論理演算子と、それらを使用して条件の真偽をテストする方法の概要がわかったので、次のチュートリアルでは、各論理演算子を詳しく学習します。

このチュートリアルは役に立ちましたか?