IN 述部

IN 述部は、1 つの値または複数の値を値の集合と比較します。

構文図を読む構文図をスキップするexpression1NOTIN(fullselect1)(,expression2)expression2row-value-expressionNOTIN(fullselect2)

全選択は、 IN キーワードの左側に指定されている式の数と同じ数の列を識別しなければなりません (SQLSTATE 428C4)。 全選択は、任意の行数を戻すことができます。

  • 次の形式の IN 述部があるとします。
       expression IN expression
    上記は、以下の形式の基本述部と同等です。
       expression = expression
  • 次の形式の IN 述部があるとします。
       expression IN (fullselect)
    上記は、以下の形式の比較述部と同等です。
       expression = ANY (fullselect)
  • 次の形式の IN 述部があるとします。
       expression NOT IN (fullselect)
    上記は、以下の形式の比較述部と同等です。
       expression <> ALL (fullselect)
  • 次の形式の IN 述部があるとします。
       expression IN (expressiona, expressionb, ..., expressionk)
    これは、以下と同じ意味になります。
       expression = ANY (fullselect)
    この fullselect は、values 節形式では次のようになります。
       VALUES (expressiona), (expressionb), ..., (expressionk)
  • 次の形式の IN 述部があるとします。
       (expressiona, expressionb,..., expressionk) IN (fullselect)
    上記は、以下の形式の比較述部と同等です。
       (expressiona, expressionb,..., expressionk) = ANY (fullselect)
    この形式のこれらの述部の左側にあるオペランドは、row-value-expression として参照されることに注意してください。

IN 述部の expression1 および expression2 の値、 または fullselect1 の列には、互換性が必要です。IN 述部の row-value-expression の各フィールドとそれに対応する fullselect2 内の列は互換でなければなりません。結果データ・タイプの規則を使って、比較で使用される結果の属性を判別することができます。

IN 述部の式の値 (全選択の対応する列を含めて) のコード・ページが異なっていても構いません。 変換が必要な場合にコード・ページを判別するには、まず IN リストに対してストリング変換の規則を適用し、 次に第 2 オペランドとして IN リストの派生コード・ページを使って同じ規則を述部に適用します。

例 1: DEPTNO 列で評価の対象となる行の値に D01、B01、または C01 が入っている場合、 以下の条件は真であると評価されます。
   DEPTNO IN ('D01', 'B01', 'C01')
例 2: 左側の EMPNO (従業員番号) が部門 E11 の従業員の EMPNO と一致する場合のみ、 以下の条件は真であると評価されます。
   EMPNO IN (SELECT EMPNO FROM EMPLOYEE WHERE WORKDEPT = 'E11')

例 3: 以下の情報に基づき、COL_1 列の行の特定の値が、 リスト内のいずれかの値と一致する場合、この例は真であると評価されます。

表 1. IN 述部の例
タイプ コード・ページ
COL_1 850
HV_2 ホスト変数 437
HV_3 ホスト変数 437
CON_1 定数 850
ここで、次のような述部を評価します。
   COL_1 IN (:HV_2, :HV_3, CON_4)
この場合、ストリング変換の規則に基づいて、2 個のホスト変数がコード・ページ 850 に変換されます。
例 4: EMENDATE に指定された年 (プロジェクトの従業員の活動が終了した日付) が、 リストに指定された値のいずれか (現在の年または過去 2 年) と一致する場合、 以下の条件は真と評価されます。
   YEAR(EMENDATE) IN (YEAR(CURRENT DATE),
                      YEAR(CURRENT DATE - 1 YEAR),
                      YEAR(CURRENT DATE - 2 YEARS))
例 5: 左側の ID と DEPT の両方が、 ORG 表の任意の行の MANAGER と DEPTNUMB にそれぞれ一致する場合、 以下の条件は真と評価されます。
   (ID, DEPT) IN (SELECT MANAGER, DEPTNUMB FROM ORG)