ANY / IN Predicate (Value List)
The ANY / IN quantified predicate compares an expression or list of expressions with a list of specified values. The ANY predicate evaluates to TRUE if one or more of the values in the ValueList relate to the expression or list of expressions as indicated by the comparison operator. Similarly, the IN predicate evaluates to TRUE if the expression or list of expressions is equal to one of the values in the list.
SQL syntax
RowValueConstructor {CompOp {ANY | SOME} | IN} ValueList
The syntax for RowValueConstructor:
RowValueConstructorElement | (RowValueConstructorList) |
The syntax for RowValueConstructorList:
RowValueConstructorElement[{, RowValueConstructorElement} ... ]
The syntax for RowValueConstructorElement:
Expression | NULL
The syntax for CompOp:
{= | <> | > | >= | < | <= }
The syntax for one element in the ValueList (no parentheses necessary):
ConstantExpression
The syntax for more than one element in the ValueList:
({ConstantExpression} [,...] )
The syntax for an empty ValueList:
( )
Parameters
| Component | Description |
|---|---|
|
|
Specifies a value to be obtained. The values in |
|
|
Specifies a constant value or an expression that evaluates to a constant value (such as a number, character string, or date). This includes support for bound values ( |
|
|
Is equal to. |
|
|
Is not equal to. |
|
|
Is greater than. |
|
|
Is greater than or equal to. |
|
|
Is less than. |
|
|
Is less than or equal to. |
|
{
|
The predicate is |
|
|
A list of values that are compared against the The The The |
Description
-
If
Xis the value ofExpression, and(a,b, ..., z)represents the elements inValueList, andOPis a comparison operator, then the following is true:-
X OP ANY (a,b,...,z)is equivalent toX OP a OR X OP b OR...OR X OP z.
-
-
If
Xis the value ofExpressionand(a,b,..., z)are the elements in aValueList, then the following is true:-
X IN (a,b,...,z)is equivalent toX = a OR X = b OR...OR X = z.
-
-
All character data types are compared in accordance with the current value of the
NLS_SORTsession parameter. -
See "Numeric Data Types" for information about how TimesTen compares values of different but compatible types.
-
When evaluating an empty
ValueList, the result ofExpressionINis false.
Examples
Select all item numbers containing orders of 100, 200, or 300 items.
SELECT DISTINCT OrderItems.ItemNumber FROM OrderItems WHERE OrderItems.Quantity = ANY (100, 200, 300)
Get part numbers of parts whose weight is 12, 16, or 17.
SELECT Parts.PartNumber FROM Parts WHERE Parts.Weight IN (12, 16, 17);
Get part number of parts whose serial number is '1123-P-01', '1733-AD-01', :SerialNumber or :SerialInd, where :SerialNumber and :SerialInd are dynamic parameters whose values are supplied at runtime.
SELECT PartNumber FROM Purchasing.Parts
WHERE SerialNumber
IN ('1123-P-01', '1733-AD-01',:SerialNumber, :SerialInd);
The following example queries an empty select list for IN condition.
SELECT * FROM t1 WHERE x1 IN ();
The following example uses a list of expressions with IN.
SELECT * FROM t1 WHERE (x1,y1) IN ((1,2), (3,4));
The next three examples, using ttIsql, show the use of constant expressions. Assume a table T with a single column named X of type NUMBER, with the following data:
Command> SELECT * FROM t; < 1 > < 2 > < 3 > < 4 > < 5 > 5 rows found.
This first example uses constant expressions in a query:
Command> SELECT x FROM t WHERE x in (abs(1-2), TO_NUMBER('1')+2, 3);
< 1 >
< 3 >
2 rows found.
This second example also uses dynamic parameters:
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.
This third example also uses NULL:
Command> SELECT x FROM t WHERE x IN (null, 1, 3+1, 2); < 1 > < 2 > < 4 > 3 rows found.
For the next example, consider a table T_DATE with a single column named MYDATE of type DATE, with the following data:
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.
The example uses constant expressions for dates:
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.
For the next example, consider a table MYCHARS with a single column named COL1 of type VARCHAR2(32), with the following data:
Command> SELECT * FROM mychars; < abc > < def > < ghi > 3 rows found.
The example uses a function call that returns a constant expression:
Command> SELECT col1 FROM mychars WHERE col1 IN (ltrim('abcdef', 'abc'));
< def >
1 row found.
The following example illustrates the use of a list of expressions for the IN predicate. The query returns the DEPARTMENT_NAME for departments with DEPARTMENT_ID = 240 and LOCATION_ID = 1700.
Note:
The expression on the right side of the IN predicate must be enclosed in double parentheses (( )).
Command> SELECT department_name FROM departments
WHERE (department_id, location_id) IN ((240,1700));
< Government Sales >
1 row found.