SQLのIN
と演算子の違いは何ですか?ANY
11 に答える
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> SELECT *
2 FROM employee
3 WHERE salary > ANY (2000, 3000, 4000);
InOperatorの場合
SQL> -- Use the IN operator in a WHERE clause to compare a value with any of the values in a list.
SQL> SELECT *
2 FROM employee
3 WHERE salary IN (2000, 3000, 4000);
ただし、IN演算子を使用すると、=、<>、<、>、<=、または>=を使用できません。
IN-リスト内のすべてに等しい
ANY-値をサブクエリによって返される各値と比較します。
ALL-値をサブクエリによって返されるすべての値と比較します。
例えば:
の:
給与が部門の投資額が最も少ないすべての従業員の詳細を表示しますか?
Select Ename, Sal, Deptno
from Emp
Where Sal IN (Select Min(Sal)
From Emp
Group By Deptno);
どれか:
< ANY
リストの最大値未満を意味します。
収益が最も高いマネージャーよりも収益が少ないすべての従業員の詳細を取得しますか?
Select Empno, Ename, Job, Sal
From Emp
Where Sal < Any (Select Distinct MGR
From Emp);
> ANY
リスト内の最小値よりも大きいことを意味します。
部門10で最低支払額を超えて稼いでいるすべての従業員の詳細を取得しますか?
Select Empno, Ename, Job, Sal
From Emp
Where Sal > Any (Select Min(Sal)
From Emp
Where Deptno 10);
= ANY
in演算子と同等です。
注:SOME
の代わりに使用することもできますANY
。
理解を深めるために、これら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;
ANYでは、演算子が必要です。
WHERE X > ANY (SELECT Y FROM Z)
INではできません。それは常に平等をテストしています。
SQLSERVER2008R2のすべての演算子。
>比較演算子を例として使用すると、> ALLはすべての値よりも大きい、つまり最大値よりも大きいことを意味します。たとえば、> ALL(1、2、3)は3より大きいことを意味します。> ANYは、少なくとも1つの値より大きい、つまり最小値より大きいことを意味します。したがって、> ANY(1、2、3)は1より大きいことを意味します。
同様に、> ANYは、行が外部クエリで指定された条件を満たすために、サブクエリを導入する列の値が、サブクエリによって返される値のリストの値の少なくとも1つより大きくなければならないことを意味します。
IN-わかりやすいです。クエリは、「IN」句で指定された値のみを選択する必要があります。さて、クエリで「ANY」を理解しましょう。ANYは、リスト内のどの値よりも大きいか小さい必要があることを意味します。
OrderIDが1から10のOrdersテーブルを想定します
以下のクエリを確認します
。OrderID<ANY(3,5,7)である
OrdersからOrderIDを選択します。
上記のクエリに対する答えは次のとおり
です
。OrderID1,2,3,4,5,6
説明:クエリは、指定された値のいずれよりも小さいOrderIDを検索すると言います。したがって、データベースは次のようにOrderIDを検索して含めます。Is1
<3-はいしたがってOrderID1が含まれますIs2
<3-はいしたがってOrderID2が含まれますIs3
<3-いいえ、is 3 <5-はい(5が指定されているため)値)、したがって、 OrderID3が含まれますIs4
<3-いいえ、4 <5-はい、したがってOrderID4が含まれ
ますIs5 <3-いいえ、5 <5-いいえ、5 <7です(5が指定されているため)値)-はい、したがってOrderID5が含まれ
ますIs6 <3-いいえ、6 <5-いいえ、6 <7です-はい、したがってOrderID6が含まれます
Is7 <3-いいえ、7 <5-いいえ、7です<7-いいえ、したがってOrderID 7は、比較する指定されたリストにこれ以上値がないため含まれていません
は8<3-いいえ、は8 <5-いいえ、は8 <7-いいえ、したがってOrderID 8は、比較する指定リストにこれ以上値がないため含まれていませ
んIs 9 <3-いいえ、9 <5-いいえ、 9 <7-いいえ、したがってOrderID 9は、比較する指定されたリストにこれ以上値がないため含まれません
Is 9 <3-いいえ、は9 <5-いいえ、は9 <7-いいえ、したがってOrderID9はこれ以上値がないため含まれません比較する指定されたリスト
OrderID> ANY(3,5,7)である
OrdersからOrderIDを選択するよりも大きい場合に同じロジックを適用します
上記のクエリに対する答えは次のとおり
です
。OrderID4,5,6,7,8,9,10
ANYおよびALL演算子は、WHERE句またはHAVING句とともに使用されます。
サブクエリ値のいずれかが条件を満たす場合、ANY演算子はtrueを返します。
ALL演算子は、すべてのサブクエリ値が条件を満たしている場合にtrueを返します。
=ANYはIN演算子と同等です。"<>、<、>、<=、または>="これらのいずれかを任意の演算子の前に配置できます。<>ANY演算子はNOTINとは異なることに注意してください。
ANYおよびALL演算子は、WHERE句またはHAVING句とともに使用されます。
サブクエリ値のいずれかが条件を満たす場合、ANY演算子はtrueを返します。
ALL演算子は、すべてのサブクエリ値が条件を満たしている場合にtrueを返します。
「IN」を使用して列の値を比較する場合、あるセット{value1,value2 ...}
は列の値がセットに存在する必要がありますが、いずれの場合も次のように比較します。
col.value > ANY ({value1,value2,...})
その場合、値は設定値のいずれよりも大きくなければなりません。
「ALL」の場合
col.value> ALL({value1,value2,...})
値は、セット内のすべての値よりも大きくなければなりません。
理解を深めるために、次の画像を参照してください。
(in)は、指定した値のリストから値を1つずつ選択するために使用される特殊な種類の演算子です。while(any)はwhere句で使用されます。