INがリテラルのリストともに使用された場合、expression_1の値が次のときに結果が真になります。
- リスト内のいずれかのliteralに等しい。
- signed_literal_1とsigned_literal_2の間(これらの値を含む)にある(signed_literal_1がsigned_literal_2より小さいか等しい場合)。
- signed_literal_2とsigned_literal_1の間(これらの値を含む)にある(signed_literal_2がsigned_literal_1より小さい場合)
expression_1の値がNULLの場合、結果は不明となります。
expression_1の値が非NULLの場合は、結果が真意なるためのいずれの条件も満たされないので、結果は偽になります。
この形式を使用すると、式がリテラル リスト内のいずれかと等しい場合、IN検索条件が満たされます。式がリテラルのリスト内のどの値とも等しくない場合は、NOT IN条件が満たされます。
条件が真になる形式 | 条件 |
---|---|
expression_1 IN expression_2 | expression_1 = expression_2 |
expression_1 NOT IN expression_2 | expression_1 <> expression_2 |
expression_1 IN (const_1, const_2) | (expression_1 = const_1) OR (expression_1 = const_2) |
expression_1 NOT IN (const_1, const_2) | (expression_1 <> const_1) AND (expression_1 <> const_2) |
expression_1 IN (signed_const_1 TO signed_const_2) signed_const_1 <= signed_const_2 |
(signed_const_1 <= expression_1) AND (expression_1 <= signed_const_2) |
expression_1 IN (signed_const_1 TO signed_const_2) signed_const_2 < signed_const_1 |
(signed_const_2 <= expression_1) AND (expression_1 <= signed_const_1) |
expression_1 NOT IN (signed_const_1 TO signed_const_2) signed_const_1 <= signed_const_2 |
(expression_1 < signed_const_1) OR (expression_1 > signed_const_2) |
expression_1 NOT IN (signed_const_1 TO signed_const_2) signed_const_2 < signed_const_1 |
(expression_1 < signed_const_2) OR (expression_1 > signed_const_1) |
以下に例を示します。
文 | 等価である文 |
---|---|
SELECT DeptNo FROM Department WHERE DeptNo IN (500, 600); |
SELECT DeptNo FROM Department WHERE DeptNo IN (500) OR (DeptNo = 600); |
UPDATE Employee SET Salary=Salary + 200 WHERE DeptNo NOT IN (100, 700); |
UPDATE Employee SET Salary=Salary + 200 WHERE (DeptNo ^= 100) AND (DeptNo ^= 700); |