ヘッダーをスキップ
Oracle® TimesTen In-Memory Database SQLリファレンス
11gリリース(11.2.2)
B66446-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 検索条件

検索条件には、選択、更新または削除する行を選択するための条件を指定します。検索条件は、INSERT...SELECTUPDATEなどのDML文、およびCREATE VIEWなどの一部のDDL文の句や式に指定できるパラメータです。

検索条件の一般的な構文

検索条件は、単一の条件、または論理演算子ANDORによって連結された複数の条件です。条件は、式においてTRUEFALSEUNKNOWNとして評価される処理です。行に対して条件がTRUEと評価された場合、その行はそれ以降の処理対象になります。条件がFALSEまたはNULLと評価された場合、行は処理対象とはなりません。

SQL構文

[NOT] 
{BetweenPredicate | ComparisonPredicate | InPredicate |
    LikePredicate | NullPredicate | InfinitePredicate | NaNPredicate |
QuantifiedPredicate |(SearchCondition)} 
[{AND | OR} [NOT] 
{BetweenPredicate | ComparisonPredicate | InPredicate |
    LikePredicate | NullPredicate | QuantifiedPredicate | (SearchCondition)}
] [...]

パラメータ

構成要素 説明
NOTANDOR 論理演算子には、次のものがあります。
  • NOTは、それに続く条件の値を否定します。

  • ANDで結ばれた2つの条件がTRUEと評価された場合、TRUEと評価されます。

  • ORで結ばれた条件のいずれか一方がTRUEと評価された場合はTRUEと評価され、いずれもFALSEと評価された場合はFALSEと評価されます。

  • 条件がNULLと評価された場合の演算子の動作については、「説明」を参照してください。

BetweenPredicate 式が一定の値の範囲に含まれているかどうかを判断します。たとえば、A BETWEEN B AND CA >= B AND A<= Cと同じです。
ComparisonPredicate <<=>>==<>のいずれかの演算子を使用して、2つの式(または2つの式のリスト)を比較します。
InPredicate 指定したセット内の要素と式(または式のリスト)が一致するかどうかを判断します。
ExistsPredicate 副問合せが行を返すかどうかを判断します。
LikePredicate 特定の文字列パターンが式に含まれているかどうかを判断します。
NullPredicate 値がNULLであるかどうかを判断します。
InfinitePredicate 式が無限大(正または負の無限大)であるかどうかを判断します。
NaNPredicate 式が演算での未定義の結果(非数)であるかどうかを判断します。
QuantifiedPredicate 指定したセットと式(または式のリスト)に特定の関係があるかどうかを判断します。
(SearchCondition) 前述のいずれかの条件をカッコで囲みます。

説明

  • 検索条件の条件は、次のように評価されます。

    • カッコで囲んだ条件は、最初に評価されます。

    • NOTは、各条件に対して適用されます。

    • ANDは、右側の条件に、左から右の方向に適用されます。

    • ORは、末尾の条件に、左から右の方向に適用されます。

    図5-1は、論理演算によって算出される値を示します。疑問符(?)は、NULL値を示します。

図5-1 論理演算によって算出される値

図5-1の説明は次にあります
図5-1「論理演算によって算出される値」の説明

  • 行の検索条件がNULLと評価された場合、行は検索条件を満たさないため処理対象になりません。

  • 互換性のあるデータ型のみを比較できます。

    • TT_TINYINTTT_SMALLINTTT_INTEGERTT_BIGINTNUMBERBINARY_FLOATおよびBINARY_DOUBLEは、互換性があります。

    • CHARVARCHAR2BINARYおよびVARBINARYは、長さに関係なく互換性があります。

    • CHARVARCHAR2NCHARNVARCHAR2TT_TIMEDATEおよびTIMESTAMPは、互換性があります。

  • 比較演算での値の拡張については、第3章「式」を参照してください。

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

ALL/ NOT IN条件(副問合せ)

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の構文は、次のとおりです。

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

パラメータ

構成要素 説明
Expression 式の構文の詳細は、「式の指定」を参照してください。ALL条件には、数値式も数値以外の式も使用できますが、両方の式の型には互換性がある必要があります。
=
等しい。
<> 異なる。
> より大きい。
>= 以上。
<
未満。
<=
以下。
Subquery 副問合せの構文については、「副問合せ」を参照してください。

説明

  • 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/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値と比較されます。

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 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/ IN条件(副問合せ)

ANY条件は、比較演算子を使用して2つの式を比較します。最初の式が、副問合せによって返されるすべてのと、比較演算子で指定したとおりの関係である場合、条件はTRUEと評価されます。同様に、IN条件は、表の副問合せと式(または式のリスト)を比較します。式(または式のリスト)が副問合せによって返された値と等しい場合、IN条件はTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp ANY | IN} (Subquery)

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

RowValueConstructorElement | (RowValueConstructorList) | Subquery

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

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

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

Expression | NULL

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

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

パラメータ

構成要素 説明
Expression 式の構文の詳細は、「式の指定」を参照してください。ANY条件には、数値式も数値以外の式も使用できますが、両方の式の型には互換性がある必要があります。
=
等しい。
<> 異なる。
> より大きい。
>= 以上。
<
未満。
<=
以下。
Subquery 副問合せの構文については、「副問合せ」を参照してください。

説明

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または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)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条件

BETWEEN条件では、値が次のとおりであるかどうかを判断します。

  • 2番目の値以上であること

および

  • 3番目の値以下であること

値が指定した範囲内にあれば条件はTRUEと評価されます。

SQL構文

Expression1 [NOT] BETWEEN Expression2 AND Expression3

パラメータ

パラメータ 説明
Expression1Expression2Expression3 式の構文の詳細は、「式の指定」を参照してください。BETWEEN条件には、数値式も数値以外の式も使用できますが、すべての式の型には互換性がある必要があります。

説明

  • 2番目の値が3番目の値より大きい場合、BETWEENではFALSEと評価され、NOT BETWEENではTRUEと評価されます。

  • BETWEENまたはNOT BETWEENExpression2またはExpression3のいずれかがNULLである場合については、次の表を参照してください。

    Expression2 Expression3 BETWEEN NOT BETWEEN
    <= Expression1 NULL NULL NULL
    > Expression1 NULL FALSE TRUE
    NULL >= Expression1 NULL NULL
    NULL < Expression1 NULL NULL

  • Expression2Expression3は使用できる値の範囲を表し、Expression2が指定された範囲内で使用できる最小の値を、Expression3が使用できる最大の値を示します。BETWEEN条件では、小さい値を先に指定する必要があります。

    比較については、「比較条件」を参照してください。

  • BETWEEN条件は、NCHAR型ではサポートされません。

$250.00以下および$1500.00以上の価格の部品を25%割り引きます。

UPDATE Purchasing.Parts 
SET SalesPrice = SalesPrice * 0.75
WHERE SalesPrice NOT BETWEEN 250.00 AND 1500.00;

比較条件

比較条件は、比較演算子を使用して2つの式を比較します。最初の式が2番目の式と、比較演算子で指定したとおりの関係である場合に、条件はTRUEと評価されます。

SQL構文

RowValueConstructor CompOp RowValueConstructor2

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

RowValueConstructorElement | (RowValueConstructorList) | ScalarSubquery

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

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructor2(1つの式)の構文は、次のとおりです。

Expression

RowValueConstructor2(式のリスト)の構文は、次のとおりです。

((Expression[,...]))

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

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

パラメータ

構成要素 説明
Expression 式の構文の詳細は、「式の指定」を参照してください。比較条件には、数値式も数値以外の式も使用できますが、両方の式には互換性がある必要があります。
ScalarSubquery 単一の値を返す副問合せ。スカラー副問合せとその制限については、「副問合せ」を参照してください。
=
等しい。
<> 異なる。
> より大きい。
>= 以上。
<
未満。
<=
以下。

説明

  • すべての文字データ型は、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は、employeesdepartmentsの両方の表に格納されています。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条件は、表の副問合せの有無を確認します。EXISTSの場合は副問合せで1行以上を返す場合、NOT EXISTSの場合は行を返さない場合に、条件がTRUEと評価されます。

SQL構文

[NOT] EXISTS (Subquery)

パラメータ

EXISTS条件には、次のパラメータがあります。

パラメータ 説明
Subquery 副問合せの構文については、「副問合せ」を参照してください。

説明

  • 副問合せと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条件

IS INFINITE条件は、式が無限大(正の無限大(INF)または負の無限大(-INF))であるかどうかを判断します。

SQL構文

Expression IS [NOT] INFINITE

パラメータ

パラメータ 説明
Expression テストする式。

説明

  • 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条件

IS NAN条件は、式が演算での未定義の結果(非数またはNaN)であるかどうかを判断します。

SQL構文

Expression IS [NOT] NAN

パラメータ

パラメータ 説明
Expression テストする式。

説明

  • 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条件

IS NULL条件は、式にNULL値が含まれているかどうかを判断します。式がNULLの場合、TRUEと評価されます。NOTオプションを使用すると、式がNOT NULLの場合にTRUEと評価されます。

SQL構文

{ColumnName | Constant | Expression | LOBDataType} IS [NOT] NULL

パラメータ

パラメータ 説明
ColumnName 値を取得する列の名前。列名の詳細は、第2章「名前、ネームスペースおよびパラメータ」を参照してください。
Constant 特定の値。「定数」を参照してください。
Expression テストする式。
LOBDataType テストするCLOBBLOBまたは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条件

ソースに特定のパターンが含まれている場合に、LIKE条件はTRUEと評価されます。LIKE条件は、指定されたパターンをソースで検索して、文字値の部分間の突合せを行います。

SQL構文

Source [NOT] LIKE Pattern 
 [ESCAPE {'EscapeChar' | {? | :DynamicParameter} }]

Patternの構文は次のとおりです。

Expression [ || Expression ] [ ... ]

パラメータ

パラメータ 説明
Source このソースに出現する指定されたパターンがすべて検出されます。ソースには、式、列、関数の結果の文字列またはこれらの任意の組合せを指定することができ、これがパターンの突合せが行われるソースに使用される文字列になります。ソースには、CHARVARCHAR2NCHARNVARCHAR2CLOBまたはNCLOBを使用できます。式の詳細は、第3章「式」を参照してください。NCHARNVARCHARまたはNCLOB内の各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。
Pattern 1つ以上の式により、ソース内で検索する文字パターンを示します。パターンのデータ型は、CHARVARCHAR2NCHARNVARCHAR2CLOBNCLOBなどの文字列データ型である必要があります。

複数の式を連結して、パターンに使用する文字列を生成できます。

パターンは文字(数字と特殊文字を含む)で構成されます。たとえば、NAME LIKE 'Annie'は、空白を含まないAnnieという名前にかぎりTRUEと評価されます。

次の1つ以上の記号を使用して、部分一致をテストする条件を使用することもできます。

  • _記号は、単一の文字を表します。次に例を示します。

    BOBTOMは、ともに条件NAME LIKE '_O_'を満たします。

  • %記号は、0(ゼロ)文字以上の文字列を表します。次に例を示します。

    MARIERENATEは、ともに条件NAME LIKE '%A%'を満たします。

_%記号は、パターンの中で自由に組み合せて繰り返し使用できます。ただし、記号をパターン内のリテラルとして使用するには、ESCAPE句を使用し、EscapeCharパラメータで定義したエスケープ文字を、それらの記号の前に指定する必要があります。

Expression パターン内に含まれる式には、列、動的パラメータまたは文字列に評価される関数の結果を使用できます。式の構文の詳細は、「式の指定」を参照してください。
EscapeChar パターン内の_%記号をリテラルとして解釈させる場合に使用できる、オプションのエスケープ文字を定義します。

エスケープ文字は単一の文字である必要があります。エスケープ文字をパターンに使用する場合は、その後に続けてエスケープ文字自体、_記号または%記号と指定する必要があります。そのようなペアによって、パターンの2番目文字の単一リテラルの出現が表現されます。エスケープ文字では、大文字と小文字は常に区別されます。_または%をエスケープ文字として使用することはできません。

?

DynamicParameter

準備されたSQL文の動的パラメータです。パラメータの値は、文の実行時に設定されます。

説明

  • エスケープ文字が指定されている場合を除き、パターン内の_または%記号はワイルド・カード文字として機能します。エスケープ文字を指定した場合、それに後続するワイルド・カードまたはエスケープ文字はリテラルとして扱われます。エスケープ文字に後続する文字がワイルド・カードまたはエスケープ文字ではない場合、エラーになります。

  • 式、列、文字列、動的パラメータまたは関数の結果を組み合せてパターンを指定する場合、||演算子を使用してアイテムを連結し、最終的なパターンを指定できます。

  • LIKE条件を使用する文字式を比較するすべての条件において、大/小文字は区別されます。

  • 式の値、パターン、エスケープ文字がNULLの場合、LIKE条件はNULLと評価されます。

  • LIKE条件がマルチバイト・キャラクタ・セットで使用される場合、処理に時間がかかることがあります。

  • NCHARNVARCHARまたは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.

NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致

LIKE条件は、NCHARNVARCHAR2および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'!';