SQL ALL

概要:このチュートリアルでは、SQL ALL演算子について学び、値と値の集合を比較する方法を学びます。

SQL ALL演算子の紹介

SQLのALL演算子は、論理演算子であり、単一の値を、サブクエリによって返される単一列の値の集合と比較します。

以下は、SQL ALL演算子の構文を示しています。

WHERE column_name comparison_operator ALL (subquery)
Code language: SQL (Structured Query Language) (sql)

SQL ALL演算子の前には、>>=<<=<>=などの比較演算子を付ける必要があり、その後にサブクエリを続けます。 Oracleなどのデータベースシステムでは、サブクエリではなくリテラル値のリストを許可しているものもあります。

サブクエリが行を返さない場合、WHERE句の条件は常に真になります。サブクエリが1行以上を返すことを前提として、次の表はSQL ALL演算子の意味を示しています。

条件意味
 c > ALL(…) 列cの値は、集合内の最大値よりも大きくなければなりません(真になる条件)。
 c >= ALL(…) 列cの値は、集合内の最大値以上でなければなりません(真になる条件)。
 c < ALL(…) 列cの値は、集合内の最小値よりも小さくなければなりません(真になる条件)。
 c >= ALL(…) 列cの値は、集合内の最小値以下でなければなりません(真になる条件)。
 c <> ALL(…) 列cの値は、集合内のどの値とも等しくありません(真になる条件)。
 c = ALL(…) 列cの値は、集合内のすべての値と等しくなければなりません(真になる条件)。

SQL ALLの例

デモでは、サンプルデータベースemployeesテーブルを使用します。

SQL ALL - Sample Table

大なり演算子を使ったSQL ALL

次のクエリは、column_nameの値がサブクエリによって返される最大値よりも大きい行を見つけます。

SELECT 
    *
FROM
    table_name
WHERE
    column_name > ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

たとえば、次のステートメントは、IDが2であるマーケティング部門の従業員の最高給与よりも高い給与を受け取っている従業員全員を見つけます。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary > ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary;Code language: SQL (Structured Query Language) (sql)
SQL ALL with the greater than operator example

部門2の従業員の最高給与をクエリで確認してみましょう。

SELECT 
    MAX(salary)
FROM
    employees
WHERE
    department_id = 2;  
Code language: SQL (Structured Query Language) (sql)
SQL ALL - Max salary

このクエリは13,000を返し、これは上記のALL演算子を使用したクエリによって返される給与よりも低い値です。

以上または等しい演算子を使ったSQL ALL

以下は、以上または等しい演算子を使用したSQL ALL演算子の構文を示しています。

SELECT 
    *
FROM
    table_name
WHERE
    column_name >= ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

このクエリは、column_nameの値がサブクエリによって返されるすべての値以上であるすべての行を返します。

たとえば、次のクエリは、マーケティング部門の従業員の最高給与以上の給与を受け取っている従業員全員を見つけます。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary >= ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary;     
Code language: SQL (Structured Query Language) (sql)
SQL ALL with the greater than or equal to operator example

スクリーンショットで明らかであるように、Michaelの給与は13,000であり、これはマーケティング部門の従業員の最高給与と等しいため、結果セットに含まれています。

小なり演算子を使ったSQL ALL

以下は、小なり演算子で使用されるALL演算子を説明しています。

SELECT 
    *
FROM
    table_name
WHERE
    column_name < ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

このクエリは、column_nameの値がサブクエリによって返される最小値よりも小さいすべての行を返します。

次のステートメントは、マーケティング部門の従業員の最低給与を見つけます。

SELECT 
    MIN(salary)
FROM
    employees
WHERE
    department_id = 2;
Code language: SQL (Structured Query Language) (sql)
SQL ALL- Min salary

マーケティング部門の従業員の最低給与よりも低い給与を受け取っている従業員全員を見つけるには、小なり演算子を使用してALL演算子を使用します。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary < ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)

結果は次のとおりです。

SQL ALL with the less than operator example

以下または等しい演算子を使ったSQL ALL

以下は、以下または等しい演算子で使用されるALL演算子の構文を示しています。

SELECT 
    *
FROM
    table_name
WHERE
    column_name <= ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

たとえば、次のステートメントは、マーケティング部門の従業員の最低給与以下の給与を受け取っている従業員全員を見つけます。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary <= ALL (SELECT 
            salary
        FROM
            employees
        WHERE
            department_id = 2)
ORDER BY salary DESC; 
Code language: SQL (Structured Query Language) (sql)
SQL ALL with the less than or equal to operator example

等しくない演算子を使ったSQL ALL

次のクエリは、column_nameの値がサブクエリによって返されるどの値とも等しくないすべての行を返します。

SELECT 
    *
FROM
    table_name
WHERE
    column_name <> ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

たとえば、各部門の平均給与と等しくない給与を受け取っている従業員を見つけるには、以下のクエリを使用します。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary <> ALL (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY salary DESC; 
Code language: SQL (Structured Query Language) (sql)
SQL ALL with the not equal to operator example

サブクエリは、AVG()関数とGROUP BY句を使用して、部門別に従業員の平均給与を求めます。

等しい演算子を使ったSQL ALL

ALL演算子を等しい演算子と一緒に使用すると、クエリは、column_nameの値がサブクエリによって返されるどの値とも等しいすべての行を見つけます。

SELECT 
    *
FROM
    table_name
WHERE
    column_name = ALL (subquery);
Code language: SQL (Structured Query Language) (sql)

次の例は、マーケティング部門の従業員の最高給与と等しい給与を受け取っている従業員全員を見つけます。

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary = ALL (SELECT 
            MAX(salary)
        FROM
            employees
        WHERE
            department_id = 2);
Code language: SQL (Structured Query Language) (sql)
SQL ALL with the equal operator example

このチュートリアルでは、SQL ALL演算子を使用して、値がサブクエリによって返される値の集合と一致するかどうかをテストする方法を学びました。

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