ANY/ IN条件(値リスト)

ANY または IN限定条件は、指定された値のリストと式(または式のリスト)を比較します。ANY条件は、ValueListの1つ以上の値が、式(または式のリスト)と比較演算子で指定された関係にある場合にTRUEと評価されます。同様に、IN条件は、式(または式のリスト)が、指定されたリスト内の値のいずれかと一致する場合にTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp {ANY | SOME} | IN} ValueList

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstructorList) |

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructorElementの構文は、次のとおりです。

Expression | NULL

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

ValueListの要素が1つの場合の構文は、次のとおりです(カッコは不要です)。

ConstantExpression

ValueListの要素が複数ある場合の構文は、次のとおりです。

({ConstantExpression} [,...] )

ValueListが空の場合の構文は、次のとおりです。

( )

パラメータ

構成要素 説明

Expression

取得する値を指定します。ValueListの値は、式と互換性がある必要があります。構文の詳細は、「式の指定」を参照してください。

ConstantExpression

定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(?または:DynamicParameter)、NULL、および定数値を返す関数のコールのサポートが含まれます。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

{ANY|

SOME}

ValueListの1つ以上の値が、式(または式のリスト)と比較演算子で指定された関係にある場合にTRUEになります。SOMEANYのシノニムです。

ValueList

値のリストはRowValueConstructorの値と比較されます。

ValueListは、空のリスト(SQL生成ツールで生成される場合もある)にすることも、ConstantExpressionのエントリで構成することもできます。

ValueListには、列参照、シーケンス、副問合せ、ROWID値、またはROWNUM値を含めることはできません

RowValueConstructorがリストの場合は、ValueListをネストできます。たとえば: (x, y) not in ((1+1, 2), (abs(-1), 5+1))

説明

  • Expressionの値がXで、(a,b, ..., z)ValueListの要素、OPが比較演算子の場合は、次の関係が成立します。

    • X OP ANY (a,b,...,z)は、X OP a OR X OP b OR...OR X OP zと同じです。

  • Expressionの値がXで、(a,b,..., z)Value­Listの要素である場合は、次の関係が成立します。

    • X IN (a,b,...,z)は、X = a OR X = b OR...OR X = zと同じです。

  • すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従って比較されます。

  • TimesTenで互換性のある異なるデータ型の値が比較される方法については、「数値データ型」を参照してください。

  • 空のValueListを評価すると、Expression INの結果はFALSEになります。

項目100、200または300の発注が含まれている項目番号をすべて選択します。

SELECT DISTINCT OrderItems.ItemNumber 
FROM OrderItems
WHERE OrderItems.Quantity = ANY (100, 200, 300)

重量が12、16、17の部品の番号を検索します。

SELECT Parts.PartNumber FROM Parts 
WHERE Parts.Weight IN (12, 16, 17);

シリアル番号が'1123-P-01''1733-AD-01':SerialNumberまたは:SerialIndである部品の部品番号を検索します。:SerialNumber:SerialIndは動的パラメータで、その値は実行時に指定されます。

SELECT PartNumber FROM Purchasing.Parts 
WHERE SerialNumber
IN ('1123-P-01', '1733-AD-01',:SerialNumber, :SerialInd);

次の例では、IN条件で空の選択リストを問い合せます。

SELECT * FROM t1 WHERE x1 IN ();

次の例では、INを使用した式のリストを使用します。

SELECT * FROM t1 WHERE (x1,y1) IN ((1,2), (3,4));

次の3つの例は、ttIsqlを使用した、定数式の使用を示しています。表TにはNUMBER型の列Xが1つあり、次のデータがあります。

Command> SELECT * FROM t;
< 1 >
< 2 >
< 3 >
< 4 >
< 5 >
5 rows found.

最初の例は、問合せで定数式を使用します。

Command> SELECT x FROM t WHERE x in (abs(1-2), TO_NUMBER('1')+2, 3);
< 1 >
< 3 >
2 rows found.

2番目の例は、動的パラメータも使用します。

Command> SELECT x FROM t WHERE x = ANY (1+?, 1+3, ?);

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 '_QMARK_1' (NUMBER) > 1
Enter Parameter 2 '_QMARK_2' (NUMBER) > 5
< 2 >
< 4 >
< 5 >
3 rows found.

3番目の例は、NULLも使用します。

Command> SELECT x FROM t WHERE x IN (null, 1, 3+1, 2);
< 1 >
< 2 >
< 4 >
3 rows found.

次の例では、DATE型の列MYDATEが1つあり、次のデータを持つ表T_DATEを考慮します。

Command> SELECT * FROM t_date;
< 2013-08-13 00:00:00 >
< 2013-08-14 00:00:00 >
< 2013-08-15 00:00:00 >
3 rows found.

この例では、日付の定数式を使用します。

Command> SELECT mydate FROM t_date 
         WHERE mydate IN (DATE '2013-08-12'+1, 
                          DATE '2013-08-12'+2);
< 2013-08-13 00:00:00 >
< 2013-08-14 00:00:00 >
2 rows found.

次の例では、VARCHAR2(32)型の列COL1が1つあり、次のデータを持つ表MYCHARSを考慮します。

Command> SELECT * FROM mychars;
< abc >
< def >
< ghi >
3 rows found.

この例は、定数式を戻す関数のコールを使用します。

Command> SELECT col1 FROM mychars WHERE col1 IN (ltrim('abcdef', 'abc'));
< def >
1 row found.

次に、IN条件に式のリストを使用した例を示します。この問合せは、DEPARTMENT_ID = 240およびLOCATION_ID = 1700である部門のDEPARTMENT_NAMEを返します。

ノート:

IN条件の右側の式は、二重カッコ(( ))で囲む必要があります。

Command> SELECT department_name FROM departments 
         WHERE (department_id, location_id) IN ((240,1700));
< Government Sales >
1 row found.