SQLのIN
演算子とANY
演算子の違いは何ですか?
SQL>
SQL> -- Use the ANY operator in a WHERE clause to compare a value with any of the values in a list.
SQL>
SQL>-ANYの前に=、<>、<、>、<=、または> =演算子を配置する必要があります。
SQL>
SQL> SELECT *
2 FROM employee
3 WHERE salary > ANY (2000, 3000, 4000);
For演算子
SQL> -- Use the IN operator in a WHERE clause to compare a value with any of the values in a list.
ただし、Inでは、=、<>、<、>、<=、または> =は使用できません
IN->リスト内のいずれかと等しい。
ANY->値をサブクエリによって返される各値と比較します。
ALL->サブクエリによって返されるすべての値と値を比較します。
例えば:
IN:(Q):給与が部門の最小投資と一致するすべての従業員の詳細を表示しますか?
(A):SQL> EmpからEname Sal Deptnoを選択し、Sal IN(DeptnoからEmp GroupからMin(Sal)を選択);
どれか:
リスト内の最大値未満の平均。
(Q):他の従業員を管理している最高の収入の従業員よりも少ない収入を得ているすべての従業員の詳細を取得しますか?
(A):SQL> Select Empno Ename Job Sl From Emp Where Sal
ANY:->リストの最小値を超える手段。
(Q):部門10の最低賃金以上の収益を上げているすべてのEmpsの詳細を取得
(A):SQL> Emp Where Ename Job Sal from Emp Where Sal> Any(Select Min(Sal)From Emp Where Deptno 10);
ANY:-> In Operatorと同等です。
注:「一部」は、任意の代わりに使用されます。
おそらく、より良い理解のために、これらの2つの条件は同等です。どちらを使用するかは好みの問題です(RDBMSが両方をサポートしている場合)
_... WHERE x IN (SELECT Y FROM THE_TABLE)
... WHERE x =ANY (SELECT Y FROM THE_TABLE)
_
これらも
_... WHERE x NOT IN (SELECT Y FROM THE_TABLE)
... WHERE x <>ALL (SELECT Y FROM THE_TABLE)
_
実際、私の個人的な習慣は、リスト式にIN
を使用することです(WHERE x IN (2,4,6,8)
や_=ANY
_など、サブクエリには_<>ALL
_を使用します。
すべてを使用しながら
SELECT empno、sal FROM emp WHERE sal> ALL(2000、3000、4000);
EMPNO SAL
7839 5000
クエリと同等の結果を返します:
SELECT empno、sal FROM emp WHERE sal> 2000 AND sal> 3000 AND sal> 4000;
任意を使用しながら
SELECT empno、sal FROM emp WHERE sal> ANY(2000、3000、4000);
EMPNO SAL
7566 2975
7698 2850
7782 2450
7788 3000
7839 5000
7902 3000
と同じ結果を返します
SELECT empno、sal FROM emp WHERE sal> 2000 OR sal> 3000 OR sal> 4000;
SQL Server 2008R2のすべての演算子。
比較演算子>を例として使用すると、> ALLはすべての値よりも大きいこと、つまり最大値よりも大きいことを意味します。たとえば、> ALL(1、2、3)は3より大きいことを意味します。> ANYは少なくとも1つの値より大きいこと、つまり最小値より大きいことを意味します。したがって、ANY(1、2、3)は1より大きいことを意味します。
同様に、> ANYは、外部クエリで指定された条件を満たす行について、サブクエリを導入する列の値が、サブクエリによって返される値のリストの値の少なくとも1つよりも大きくなければならないことを意味します。
ANYおよびALL演算子は、WHERE句またはHAVING句と共に使用されます。
サブクエリ値のいずれかが条件を満たしている場合、ANY演算子はtrueを返します。
すべてのサブクエリ値が条件を満たしている場合、ALL演算子はtrueを返します。
ANYでは、演算子が必要です:
WHERE X > ANY (SELECT Y FROM Z)
INでは、できません。常に平等をテストしています。
「IN」を使用して列の値を比較するとき、いくつかのセットは{value1,value2 ...}
その後、列の値がセットに存在する必要がありますが、ANYの場合は次のように比較します。
col.value > ANY ({value1,value2,...})
その場合、値は設定値のいずれよりも大きくなければなりません。
「ALL」の場合
col.value> ALL({value1,value2,...})
値はセット内のすべての値よりも大きくなければなりません。
理解を深めるために、次の画像を参照してください。
(in)は、指定した値のリストから1つずつ値を選択するために使用される特別な種類の演算子です。while(any)はwhere句で使用されます