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の値が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)がValueListの要素である場合は、次の関係が成立します。-
X IN (a,b,...,z)は、X = a OR X = b OR...OR X = zと同じです。
-
-
すべての文字データ型は、
NLS_SORTセッション・パラメータの現在の値に従って比較されます。 -
TimesTenで互換性のある異なるデータ型の値が比較される方法については、「数値データ型」を参照してください。
-
空の
ValueListを評価すると、ExpressionINの結果は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.