検索条件には、選択、更新または削除する行を選択するための条件を指定します。検索条件は、INSERT...SELECT
、UPDATE
などのDML文、およびCREATE VIEW
などの一部のDDL文の句や式に指定できるパラメータです。
検索条件は、単一の条件、または論理演算子AND
やOR
によって連結された複数の条件です。条件は、式においてTRUE
、FALSE
、UNKNOWN
として評価される処理です。行に対して条件がTRUE
と評価された場合、その行はそれ以降の処理対象になります。条件がFALSE
またはNULL
と評価された場合、行は処理対象とはなりません。
SQL構文
[NOT] {BetweenPredicate
|ComparisonPredicate
|InPredicate
|LikePredicate
|NullPredicate
|InfinitePredicate
|NaNPredicate
|QuantifiedPredicate
|(SearchCondition
)} [{AND | OR} [NOT] {BetweenPredicate
|ComparisonPredicate
|InPredicate
|LikePredicate
|NullPredicate
|QuantifiedPredicate
| (SearchCondition
)} ] [...]
構成要素 | 説明 |
---|---|
NOT 、AND 、OR |
論理演算子には、次のものがあります。
|
BetweenPredicate |
式が一定の値の範囲に含まれているかどうかを判断します。たとえば、A BETWEEN B AND C はA >= B AND A<= C と同じです。 |
ComparisonPredicate |
< 、<= 、> 、>= 、= 、<> のいずれかの演算子を使用して、2つの式(または2つの式のリスト)を比較します。 |
InPredicate |
指定したセット内の要素と式(または式のリスト)が一致するかどうかを判断します。 |
ExistsPredicate |
副問合せが行を返すかどうかを判断します。 |
LikePredicate |
特定の文字列パターンが式に含まれているかどうかを判断します。 |
NullPredicate |
値がNULL であるかどうかを判断します。 |
InfinitePredicate |
式が無限大(正または負の無限大)であるかどうかを判断します。 |
NaNPredicate |
式が演算での未定義の結果(非数)であるかどうかを判断します。 |
QuantifiedPredicate |
指定したセットと式(または式のリスト)に特定の関係があるかどうかを判断します。 |
(SearchCondition ) |
前述のいずれかの条件をカッコで囲みます。 |
検索条件の条件は、次のように評価されます。
カッコで囲んだ条件は、最初に評価されます。
NOT
は、各条件に対して適用されます。
AND
は、右側の条件に、左から右の方向に適用されます。
OR
は、末尾の条件に、左から右の方向に適用されます。
図5-1は、論理演算によって算出される値を示します。疑問符(?
)は、NULL
値を示します。
行の検索条件がNULL
と評価された場合、行は検索条件を満たさないため処理対象になりません。
TT_TINYINT
、TT_SMALLINT
、TT_INTEGER
、TT_BIGINT
、NUMBER
、BINARY_FLOAT
およびBINARY_DOUBLE
は、互換性があります。
CHAR
、VARCHAR2
、BINARY
およびVARBINARY
は、長さに関係なく互換性があります。
CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、TT_TIME
、DATE
およびTIMESTAMP
は、互換性があります。
比較演算での値の拡張については、第3章「式」を参照してください。
互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。
ALL
またはNOT IN
条件は、副問合せが返すすべての値と同じ方法で比較の左側のオペランドを比較する必要があることを示します。ALL
条件は、式(または式のリスト)が、副問合せによって返されるすべての行と、比較演算子で指定したとおりの関係である場合にTRUE
と評価されます。同様に、NOT IN
条件は、式(または式のリスト)が副問合せによって返される値と一致しない場合にTRUE
と評価されます。
SQL構文
RowValueConstructor
{CompOp
ALL | NOT IN} (Subquery
)
RowValueConstructor
の構文は、次のとおりです。
RowValueConstructorElement
| (RowValueConstuctorList
) |Subquery
RowValueConstructorList
の構文は、次のとおりです。
RowValueConstructorElement
[{,RowValueConstructorElement
} ... ]
RowValueConstructorElement
の構文は、次のとおりです。
Expression
| NULL
CompOp
の構文は、次のとおりです。
{= | <> | > | >= | < | <= }
説明
ALL
条件では、0(ゼロ)行以上の行を返し、キーワードALLを使用して変更される比較演算子
を使用します。互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。
RowValueConstructorList
が指定されている場合は、演算子=
および<>
のみを使用できます。
例
副問合せのあるNOT IN
の例です。
SELECT * FROM customers WHERE cid NOT IN (SELECT cust_id FROM returns) AND cid > 5000; SELECT * FROM customers WHERE cid NOT IN (SELECT cust_id FROM returns) AND cid NOT IN (SELECT cust_id FROM complaints); SELECT COUNT(*) From customers WHERE cid NOT IN (SELECT cust_id FROM returns) AND cid NOT IN (SELECT cust_id FROM complaints);
exclBookList
以外の本または価格が$20より高いすべての本を選択する例を示します。
SELECT * FROM books WHERE id NOT IN (SELECT id FROM exclBookList) OR books.price>20;
次の問合せは、job_history表からemployee_id
およびjob_id
を返します。この例では、NOT IN
条件に式のリストおよび副問合せを使用しています。
Command> SELECT employee_id, job_id FROM job_history > WHERE (employee_id, job_id) > NOT IN (SELECT employee_id, job_id FROM employees); < 101, AC_ACCOUNT > < 101, AC_MGR > < 102, IT_PROG > < 114, ST_CLERK > < 122, ST_CLERK > < 176, SA_MAN > < 200, AC_ACCOUNT > < 201, MK_REP > 8 rows found.
ALL
/NOT IN
限定条件は、指定された値のリストと式(または式のリスト)を比較します。ALL
条件は、ValueList
のすべての値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUE
と評価されます。同様に、NOT IN
条件は、式(または式のリスト)が、指定されたリスト内の値のいずれとも一致しない場合にTRUE
と評価されます。
SQL構文
RowValueConstructor
{CompOp
ALL | NOT IN}ValueList
RowValueConstructor
の構文は、次のとおりです。
RowValueConstructorElement
| (RowValueConstructorList
) |
RowValueConstructorList
の構文は、次のとおりです。
RowValueConstructorElement
[{,RowValueConstructorElement
} ... ]
RowValueConstructorElement
の構文は、次のとおりです。
Expression
| NULL
CompOp
の構文は、次のとおりです。
{= | <> | > | >= | < | <= }
ValueList
の要素が1つの構文は、次のとおりです(カッコは不要です)。
ConstantExpression
ValueList
の要素が複数ある構文は、次のとおりです。
({ConstantExpression
} [,...] )
ValueList
が空の構文は、次のとおりです。
( )
パラメータ
構成要素 | 説明 |
---|---|
Expression |
取得する値を指定します。ValueList の値は、式と互換性がある必要があります。式の構文については、「式の指定」を参照してください。 |
ConstantExpression |
定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(? または:DynamicParameter )、NULL 、および定数値を返す関数のコールのサポートが含まれます。 |
= |
等しい。 |
<> |
異なる。 |
> |
より大きい。 |
>= |
以上。 |
< |
未満。 |
<= |
以下。 |
ALL |
ValueListのすべての値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUE となります。 |
ValueList |
値のリストはRowValueConstructor 値と比較されます。
|
説明
Expression
の値がX
で、(a,b, ..., z)
がValueList
の要素、OP
が比較演算子の場合は、次のような関係となります。
X OP ALL (a,b,...,z)
は、X OP a AND X OP b AND...AND X OP z
と同じです。
Expression
の値がX
で、(a,b,..., z)
がValueList
の要素である場合は、次のような関係となります。
X NOT IN (a,b,...,z)
は、NOT (X IN (a,b,...,z))
と同じです。
すべての文字データ型は、NLS_SORT
セッション・パラメータの現在の値に従って比較されます。
互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。
ALL
を設定した、NOT IN
またはNOT EXISTS
を、OR
式で指定できます。
ALL
を設定した、IN
またはEXISTS
を、OR
式で指定できます。
空のValueList
を評価すると、Expression
NOT IN
の結果はTRUEとなります。
RowValueConstructorList
が指定されている場合は、演算子=
および<>
のみを使用できます。
例
NOT IN
条件で空の選択リストを問い合せる例を示します。
SELECT * FROM t1 WHERE x1 NOT IN ();
ValueList
の例は、「ANY / IN条件(value list)」の例の項を参照してください。
ANY
条件は、比較演算子を使用して2つの式を比較します。最初の式が、副問合せによって返されるすべての
行と、比較演算子で指定したとおりの関係である場合、条件はTRUEと評価されます。同様に、IN
条件は、表の副問合せと式(または式のリスト)を比較します。式(または式のリスト)が副問合せによって返された値と等しい場合、IN
条件はTRUE
と評価されます。
SQL構文
RowValueConstructor
{CompOp
ANY | IN} (Subquery
)
RowValueConstructor
の構文は、次のとおりです。
RowValueConstructorElement
| (RowValueConstructorList
) |Subquery
RowValueConstructorList
の構文は、次のとおりです。
RowValueConstructorElement
[{,RowValueConstructorElement
} ... ]
RowValueConstructorElement
の構文は、次のとおりです。
Expression
| NULL
CompOp
の構文は、次のとおりです。
{= | <> | > | >= | < | <= }
説明
ANY
条件では、0(ゼロ)行以上の行を返し、キーワードANYを使用して変更される比較演算子
を使用します。互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。
例
この例では、1件以上の未発送の発注がある顧客のリストを取得します。
SELECT customers.name FROM customers WHERE customers.id = ANY (SELECT orders.custid FROM orders WHERE orders.status = 'unshipped');
これは、副問合せを含むIN
条件の例です。1件以上の未発送の発注がある顧客をSELECT
文で選択します。
SELECT customers.name FROM customers WHERE customers.id IN (SELECT orders.custid FROM orders WHERE orders.status = 'unshipped');
この例では、IN
条件に副問合せを指定する集計問合せを使用して、exclBookList
にある本の最高価格を検索します。
SELECT MAX(price) FROM books WHERE id IN (SELECT id FROM exclBookList);
IN
条件および副問合せに式のリストを使用した例を示します。
SELECT * FROM t1 WHERE (x1,y1) IN (SELECT x2,y2 FROM t2);
ANY
条件および副問合せに式のリストを使用した例を示します。
SELECT * FROM t1 WHERE (x1,y1) < ANY (SELECT x2,y2 FROM t2);
次に、ANY
条件に式のリストを使用した例を示します。
Command> columnlabels on; Command> SELECT * FROM t1; X1, Y1 < 1, 2 > < 3, 4 > 2 rows found. Command> SELECT * FROM t2; X2, Y2 < 3, 4 > < 1, 2 > 2 rows found.
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 |
|
ValueListの1つ以上の値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUE となります。SOME はANY のシノニムです。 |
ValueList |
値のリストはRowValueConstructor 値と比較されます。
|
説明
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
を評価すると、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.
BETWEEN
条件では、値が次のとおりであるかどうかを判断します。
2番目の値以上であること
および
3番目の値以下であること
値が指定した範囲内にあれば条件はTRUE
と評価されます。
パラメータ
パラメータ | 説明 |
---|---|
Expression1 、Expression2 、Expression3 |
式の構文の詳細は、「式の指定」を参照してください。BETWEEN 条件には、数値式も数値以外の式も使用できますが、すべての式の型には互換性がある必要があります。 |
説明
2番目の値が3番目の値より大きい場合、BETWEEN
ではFALSE
と評価され、NOT BETWEEN
ではTRUE
と評価されます。
BETWEENまたはNOT BETWEEN
のExpression2
またはExpression3
のいずれかが
NULL
である場合については、次の表を参照してください。
Expression2 | Expression3 | BETWEEN | NOT BETWEEN |
---|---|---|---|
<= Expression1 |
NULL |
NULL |
NULL |
> Expression1 |
NULL |
FALSE |
TRUE |
NULL |
>= Expression1 |
NULL |
NULL |
NULL |
< Expression1 |
NULL |
NULL |
Expression2
とExpression3
は使用できる値の範囲を表し、Expression2
が指定された範囲内で使用できる最小の値を、Expression3
が使用できる最大の値を示します。BETWEEN
条件では、小さい値を先に指定する必要があります。
比較については、「比較条件」を参照してください。
BETWEEN
条件は、NCHAR
型ではサポートされません。
比較条件は、比較演算子を使用して2つの式を比較します。最初の式が2番目の式と、比較演算子で指定したとおりの関係である場合に、条件はTRUE
と評価されます。
SQL構文
RowValueConstructor
CompOp
RowValueConstructor2
RowValueConstructor
の構文は、次のとおりです。
RowValueConstructorElement
| (RowValueConstructorList
) |ScalarSubquery
RowValueConstructorList
の構文は、次のとおりです。
RowValueConstructorElement
[{,RowValueConstructorElement
} ... ]
RowValueConstructor2
(1つの式)の構文は、次のとおりです。
Expression
RowValueConstructor2
(式のリスト)の構文は、次のとおりです。
((Expression
[,...]))
{= | <> | > | >= | < | <= }
説明
すべての文字データ型は、NLS_SORT
セッション・パラメータの現在の値に従って比較されます。
RowValueConstructorList
が指定されている場合は、演算子=
および<>
のみを使用できます。
互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。
比較条件の片方の辺がUNKNOWN
またはNULL
と評価された場合、これは条件および条件の否定のいずれもTRUE
ではないことを意味します。
NULL値自体は演算子または条件のオペランドとして直接使用できます。たとえば、(1 = NULL)
比較がサポートされます。これは、(1 = CAST(NULL AS INT))
のように、NULLを適切なデータ型にキャストする場合と同じです。両方の方法がサポートされ、同じ結果を返します。
例
20日未満の期間で配送する必要のある部品の番号を検索します。
SELECT PartNumber FROM Purchasing.SupplyPrice WHERE DeliveryDays < 20;
この問合せは、salary=9500
かつcommission_pct=.25
である従業員のlast_name
を返します。
注意: 等号の右側の式は、二重カッコ(( )) で囲む必要があります。 |
Command> SELECT last_name FROM employees > WHERE(salary,commission_pct) = ((9500,.25)); < Bernstein > 1 row found.
この問合せは、manager_id = 205
である従業員のlast_name
を返します。従業員のdepartment_id
およびmanager_id
は、employees
とdepartments
の両方の表に格納されています。departments
表から情報を抽出するには、副問合せを使用します。
Command> SELECT last_name FROM employees > WHERE (department_id, manager_id) = > (SELECT department_id, manager_id FROM departments > WHERE manager_id = 205); < Gietz > 1 row found.
EXISTS
条件は、表の副問合せの有無を確認します。EXISTS
の場合は副問合せで1行以上を返す場合、NOT EXISTS
の場合は行を返さない場合に、条件がTRUE
と評価されます。
説明
副問合せとEXISTS
を組み合せて指定すると、行の存在についてテストできます。EXISTS
は行の空のセットの有無をテストします。副問合せが1行以上の行を返す場合、副問合せはTRUEと評価されます。
副問合せとNOT EXISTS
を組み合せて指定すると、行の不在についてテストできます。NOT EXISTS
は行の空のセットの有無をテストします。副問合せが行を返さない場合、副問合せはTRUEと評価されます。
結合順序がNOT EXISTS
副問合せの結合順序の要件と競合するttOptSetOrder
組込みプロシージャを使用して発行される場合、指定された結合順序は無視され、警告が発行されて問合せが実行されます。
次の表に、TimesTenでのEXISTS
およびNOT EXISTS
の使用方法について、サポートの有無を示します。
問合せ/副問合せの説明 | NOT EXIST | EXIST |
---|---|---|
副問合せでの集計 | サポートされている | サポートされている |
メインの問合せでの集計 | サポートされている | サポートされている |
OR 句での副問合せ |
サポートされている | サポートされている |
ttOptSetOrder 組込みプロシージャを使用した結合順序 |
制限付きサポート | サポートされている |
例
1件以上の未発送の発注がある顧客を検索します。
SELECT customers.name FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE customers.id = orders.custid AND orders.status = 'unshipped');
未発送の発注がない顧客を検索します。
SELECT customers.name FROM customers WHERE NOT EXISTS (SELECT 1 FROM orders WHERE customers.id = orders.custid AND orders.status = 'unshipped');
IS INFINITE
条件は、式が無限大(正の無限大(INF
)または負の無限大(-INF
))であるかどうかを判断します。
説明
IS INFINITE
条件は、式が正または負の無限大の場合にTRUE
と評価されます。
IS NOT INFINITE
条件は、式が正および負の無限大ではない場合にTRUE
と評価されます。
式は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。
2つの正の無限大の値は等しくなります。2つの負の無限大の値は等しくなります。
浮動小数点値を含む式では、Inf
、-Inf
またはNaN
が生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf
、-Inf
またはNaN
の場合に生成される可能性があります。InfおよびNaN
は、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。
集計関数では、Inf
、-Inf
およびNaN
の値は無視されません。NULL
値は無視されます。集計(または任意の選択)からInf
およびNaN
を除外する場合は、IS NOT NAN
条件およびIS NOT INFINITE
条件の両方を使用します。
負の無限大(-INF
)は、他のすべての値より下位にソートされます。正の無限大(INF
)は、他のすべての値より上位、かつNaN
(非数)およびNULL
値より下位にソートされます。
Inf
およびNaN
の詳細は、「INFおよびNAN」を参照してください。
IS NAN
条件は、式が演算での未定義の結果(非数またはNaN
)であるかどうかを判断します。
説明
IS NAN
条件は、式が非数の場合にTRUE
と評価されます。
IS NOT NAN
条件は、式が非数ではない場合にTRUE
と評価されます。
式は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。
2つのNaN
(非数)の値は等しくなります。
浮動小数点値を含む式では、Inf
、-Inf
またはNaN
が生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf
、-Inf
またはNaN
の場合に生成される可能性があります。Inf
およびNaN
は、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。
集計関数では、Inf
、-Inf
およびNaN
の値は無視されません。NULL
値は無視されます。集計(または任意の選択)からInf
およびNaN
を除外する場合は、IS NOT NAN
条件およびIS NOT INFINITE
条件の両方を使用します。
NaN
(非数)は、正の無限大を含む他のすべての値より上位、かつNULL
値より下位にソートされます。
Inf
およびNaN
の詳細は、「INFおよびNAN」を参照してください。
IS NULL
条件は、式にNULL
値が含まれているかどうかを判断します。式がNULL
の場合、TRUE
と評価されます。NOT
オプションを使用すると、式がNOT NULL
の場合にTRUE
と評価されます。
パラメータ
パラメータ | 説明 |
---|---|
ColumnName |
値を取得する列の名前。列名の詳細は、第2章「名前、ネームスペースおよびパラメータ」を参照してください。 |
Constant |
特定の値。「定数」を参照してください。 |
Expression |
テストする式。 |
LOBDataType |
テストするCLOB 、BLOB またはNCLOB データ型の値。 |
例
IS NULL
を使用して、会社の社長(マネージャを持たない唯一の人物)を識別します。
Command> SELECT * FROM employees > WHERE manager_id IS NULL; < 100, Steven, King, SKING, 515.123.4567, 1987-06-17 00:00:00, AD_PRES, 24000, <NULL>, <NULL>, 90 > 1 row found.
次の文ではIS NULL
を使用して、州または都道府県を持たない場所をすべて識別しています。
Command> SELECT * FROM locations > WHERE state_province IS NULL; < 1000, 1297 Via Cola di Rie, 00989, Roma, <NULL>, IT > < 1100, 93091 Calle della Testa, 10934, Venice, <NULL>, IT > < 1300, 9450 Kamiya-cho, 6823, Hiroshima, <NULL>, JP > < 2000, 40-5-12 Laogianggen, 190518, Beijing, <NULL>, CN > < 2300, 198 Clementi North, 540198, Singapore, <NULL>, SG > < 2400, 8204 Arthur St, <NULL>, London, <NULL>, UK > 6 rows found.
ソースに特定のパターンが含まれている場合に、LIKE
条件はTRUE
と評価されます。LIKE
条件は、指定されたパターンをソースで検索して、文字値の部分間の突合せを行います。
SQL構文
Source [NOT] LIKE Pattern [ESCAPE {'EscapeChar' | {? | :DynamicParameter} }]
Pattern
の構文は次のとおりです。
Expression [ || Expression ] [ ... ]
パラメータ
パラメータ | 説明 |
---|---|
Source |
このソースに出現する指定されたパターンがすべて検出されます。ソースには、式、列、関数の結果の文字列またはこれらの任意の組合せを指定することができ、これがパターンの突合せが行われるソースに使用される文字列になります。ソースには、CHAR 、VARCHAR2 、NCHAR 、NVARCHAR2 、CLOB またはNCLOB を使用できます。式の詳細は、第3章「式」を参照してください。NCHAR 、NVARCHAR またはNCLOB 内の各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。 |
Pattern |
1つ以上の式により、ソース内で検索する文字パターンを示します。パターンのデータ型は、CHAR 、VARCHAR2 、NCHAR 、NVARCHAR2 、CLOB 、NCLOB などの文字列データ型である必要があります。
複数の式を連結して、パターンに使用する文字列を生成できます。 パターンは文字(数字と特殊文字を含む)で構成されます。たとえば、 次の1つ以上の記号を使用して、部分一致をテストする条件を使用することもできます。
|
Expression |
パターン内に含まれる式には、列、動的パラメータまたは文字列に評価される関数の結果を使用できます。式の構文の詳細は、「式の指定」を参照してください。 |
EscapeChar |
パターン内の_ と% 記号をリテラルとして解釈させる場合に使用できる、オプションのエスケープ文字を定義します。
エスケープ文字は単一の文字である必要があります。エスケープ文字をパターンに使用する場合は、その後に続けてエスケープ文字自体、 |
?
|
準備されたSQL文の動的パラメータです。パラメータの値は、文の実行時に設定されます。 |
説明
エスケープ文字が指定されている場合を除き、パターン内の_
または%
記号はワイルド・カード文字として機能します。エスケープ文字を指定した場合、それに後続するワイルド・カードまたはエスケープ文字はリテラルとして扱われます。エスケープ文字に後続する文字がワイルド・カードまたはエスケープ文字ではない場合、エラーになります。
式、列、文字列、動的パラメータまたは関数の結果を組み合せてパターンを指定する場合、||演算子を使用してアイテムを連結し、最終的なパターンを指定できます。
LIKE
条件を使用する文字式を比較するすべての条件において、大/小文字は区別されます。
式の値、パターン、エスケープ文字がNULL
の場合、LIKE
条件はNULL
と評価されます。
LIKE
条件がマルチバイト・キャラクタ・セットで使用される場合、処理に時間がかかることがあります。
NCHAR
、NVARCHAR
またはNCLOB
内の各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。
例
姓が'Sm'
で始まる従業員を検索します。
Command> SELECT employee_id, last_name,first_name FROM employees > WHERE last_name LIKE 'Sm%' > ORDER BY employee_id,last_name,first_name; < 159, Smith, Lindsey > < 171, Smith, William > 2 rows found.
姓が'SM'
で始まる従業員を検索します。last_name
が大文字の'SM'
で始まる従業員がいないため、この問合せでは結果は返されません。
Command> SELECT employee_id, last_name,first_name from employees > WHERE last_name LIKE 'SM%' > ORDER BY employee_id,last_name,first_name; 0 rows found.
ただし、姓列のソース値を大文字に変換することによって、'SM
'で始まるすべての名前を検出できます。
Command> SELECT employee_id, last_name, first_name FROM employees > WHERE UPPER(last_name) LIKE ('SM%'); < 159, Smith, Lindsey > < 171, Smith, William > 2 rows found.
?
で示される動的パラメータを使用して、姓が'Sm'
で始まる従業員を実行時に検索します。
Command> SELECT employee_id, last_name,first_name FROM employees > WHERE last_name like ? > ORDER BY employee_id,last_name,first_name; 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' (VARCHAR2) > 'Sm%' < 159, Smith, Lindsey > < 171, Smith, William > 2 rows found.
:a
で示されるバインド変数を使用して、姓が'Sm'
で始まる従業員を実行時に検索します。
Command> SELECT employee_id, last_name,first_name FROM employees > WHERE last_name LIKE :a > ORDER BY employee_id,last_name,first_name; 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 'A' (VARCHAR2) > 'Sm%' < 159, Smith, Lindsey > < 171, Smith, William > 2 rows found.
姓が'Smit'
で始まる従業員について、そのマネージャの姓を検索します。従業員の名前と姓、およびマネージャの姓を表示します。
Command> SELECT e1.first_name || ' ' || e1.last_name||' works for '||e2.last_name > FROM employees e1, employees e2 > WHERE e1.manager_id = e2.employee_id > AND e1.last_name like 'Smit'; < Lindsey Smith works for Partners > < William Smith works for Cambrault > 2 rows found.
この問合せパターンでは、検索対象のパターンとして、last_name
列を参照します。
Command> SELECT e1.first_name || ' ' || e1.last_name|| > ' works for ' || e2.last_name > FROM employees e1, employees e2 > WHERE e1.manager_id = e2.employee_id > AND 'Smith' like e1.last_name; < Lindsey Smith works for Partners > < William Smith works for Cambrault > 2 rows found.
パターンには、列または関数の結果を指定できます。次の例では、UPPER
関数を、ソースのlast_name
列と検索対象の'ma'
検索文字列の両方で使用します。
Command> SELECT last_name, first_name FROM employees > WHERE upper(last_name) LIKE UPPER('ma%'); < Markle, Steven > < Marlow, James > < Mallin, Jason > < Matos, Randall > < Marvins, Mattea > < Mavris, Susan > 6 rows found.
次の問合せは、動的パラメータを使用したパターンのリクエストを示します。
Command> SELECT first_name || ' ' || last_name > FROM employees WHERE last_name like ?; 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' (VARCHAR2) > 'W%' < Matthew Weiss > < Alana Walsh > < Jennifer Whalen > 3 rows found.
次の問合せでは、パターンで文字列と動的パラメータを組み合せています。
Command> SELECT first_name || ' ' || last_name > FROM employees WHERE last_name like 'W' || ?; 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' (VARCHAR2) > '%' < Matthew Weiss > < Alana Walsh > < Jennifer Whalen > 3 rows found.
LIKE
条件は、NCHAR
、NVARCHAR2
およびNCLOB
型の文字列のパターン一致に使用できます。パターン一致文字は、次のとおりです。
文字 | 説明 |
---|---|
U+005F SPACING UNDERSCORE |
単一のUnicode文字を表します。 |
U+0025 PERCENT SIGN |
0(ゼロ)文字以上のUnicode文字列を表します。 |
説明
エスケープ文字は、単一のUnicode文字またはパラメータと同様にサポートされます。
LIKE
オペランドの型は、すべてのキャラクタ・タイプの組合せになります。
LIKE
条件では、大/小文字およびアクセントを区別しないNLS_SORT
がサポートされています。
例
これらの例では、Unicode文字U+0021 EXCLAMATION MARK
は、Unicode文字U+005F SPACING UNDERSCORE
のエスケープとして使用されています。Unicode文字U+0025 PERCENT SIGN
はエスケープされず、パターン一致としてみなされます。
VendorName
は、NCHAR
またはNVARCHAR2
の列です。
SELECT VendorName FROM Purchasing.Vendors WHERE VendorName LIKE N'ACME!_%' ESCAPE N'!';
この例は次の例と同等です。
SELECT VendorName FROM Purchasing.Vendors WHERE VendorName LIKE N'ACME!\u005F\u0025' ESCAPE N'!';