SQL ANY

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

SQL ANY演算子の紹介

ANY演算子は、論理演算子であり、値をサブクエリによって返される値の集合と比較します。ANY演算子には、比較演算子 >、>=、<、<=、=、<> を先行させ、サブクエリを後続させる必要があります。

以下にANY演算子の構文を示します。

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

サブクエリが行を返さない場合、条件はfalseと評価されます。サブクエリがゼロ行を返さない場合、各比較演算子で使用されるANY演算子の意味は以下のとおりです。

条件意味
x = ANY (…)列cの値が、集合内の1つ以上の値と一致する必要があります(trueとなる条件)。
x != ANY (…)列cの値が、集合内のいずれの値とも一致しない必要があります(trueとなる条件)。
x > ANY (…)列cの値が、集合内の最小値よりも大きい必要があります(trueとなる条件)。
x < ANY (…)列cの値が、集合内の最大値よりも小さい必要があります(trueとなる条件)。
x >= ANY (…)列cの値が、集合内の最小値以上である必要があります(trueとなる条件)。
x <= ANY (…)列cの値が、集合内の最大値以下である必要があります(trueとなる条件)。

SQL ANY の例

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

SQL ANY - Employees Table

等号演算子を使用したSQL ANYの例

次のステートメントは、AVG()関数とGROUP BY句を使用して、各部署の平均給与を求めます。

SELECT 
    ROUND(AVG(salary), 2)
FROM
    employees
GROUP BY 
    department_id
ORDER BY 
    AVG(salary) DESC;
Code language: SQL (Structured Query Language) (sql)
SQL ANY - average salary of each department

各部署の平均給与と給与が等しい従業員をすべて検索するには、次のクエリを使用します。

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,
    salary;   
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the equal to operator

不等号演算子を使用したSQL 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, 
    salary;   
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the not equal to operator

不等号演算子を使用したSQL ANYの例

次のクエリは、すべての部署の平均給与よりも給与が多い従業員をすべて検索します。

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

最低平均給与は4,150です。上記のクエリは、給与が最低給与よりも高いすべての従業員を返します。

以上または等号演算子を使用したSQL 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 , salary; 
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the greater than or equal to operator

不等号演算子を使用したSQL ANYの例

次のクエリは、すべての部署の平均給与よりも給与が少ない従業員をすべて検索します。

SELECT 
    first_name, 
    last_name, 
    salary
FROM
    employees
WHERE
    salary < ANY (SELECT 
            AVG(salary)
        FROM
            employees
        GROUP BY department_id)
ORDER BY salary DESC;    
Code language: SQL (Structured Query Language) (sql)
SQL ANY with the less than operator

この例では、すべての部署の最高の平均給与よりも給与が少ない従業員です。

以下または等号演算子を使用したSQL ANYの例

各部署の平均給与以下の給与を持つ従業員を検索するには、次のクエリを使用します。

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

スクリーンショットに示すように、結果セットには、すべての部署で最高の平均給与以下の給与を持つ従業員が含まれています。

これで、SQL ANY演算子を使用して、値を値の集合と比較することで条件を形成する方法を理解できたはずです。

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