概要: このチュートリアルでは、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の例
次のステートメントは、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)
各部署の平均給与と給与が等しい従業員をすべて検索するには、次のクエリを使用します。
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の例
同様に、次のクエリは、すべての部署の平均給与と給与が等しくない従業員をすべて検索します。
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の例
次のクエリは、すべての部署の平均給与よりも給与が多い従業員をすべて検索します。
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)
最低平均給与は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の例
次のクエリは、すべての部署の平均給与よりも給与が少ない従業員をすべて検索します。
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の例
各部署の平均給与以下の給与を持つ従業員を検索するには、次のクエリを使用します。
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演算子を使用して、値を値の集合と比較することで条件を形成する方法を理解できたはずです。