EXISTS 述部

EXISTS 述部は、特定の行の存在を調べるためのものです。 全選択は列をいくつでも指定でき、結果は真または偽になります。

構文図を読むビジュアルシンタックスダイアグラムをスキップするEXISTS( 全選択1)
注:
  • 1 全選択の外部 SELECT リストには配列値を含めることはできません。

EXISTS 述部の結果:

  • 全選択によって指定された行数がゼロでない場合のみ、真。
  • 全選択によって指定された行数がゼロの場合のみ、偽。
  • 不明になることはありません。
全選択で戻される値は無視されるので、 全選択内の SELECT 文節は列をいくつでも指定することができます。 次の文節を使えば簡単です。
  SELECT *
NULL、LIKE、および IN の各述部とは異なり、EXISTS 述部には NOT という語を含む 形式はありません。 EXISTS 述部を否定する場合は、次のように論理演算子の NOT を その前に置いてください。
  NOT EXISTS (fullselect)

この場合は、EXISTS 述部が真の時に偽の結果となり、述部が 偽の時に真の結果となります。 ここでは、NOT は論理演算子であり、述部の一部ではありません。 論理演算子については、 検索条件で説明しています。

例 1 : 次のクエリは、DSN8C10.EMP に登録されている社員のうち、少なくとも1人の給与が20000未満の部署で働く社員の社員番号をリストアップします。 多くの EXISTS 述部と同様に、この照会の述部も相関変数を含んでいます。
  SELECT EMPNO
    FROM DSN8C10.EMP X
    WHERE EXISTS (SELECT * FROM DSN8C10.EMP
                   WHERE X.WORKDEPT=WORKDEPT AND SALARY<20000);
例 2: 2009 年の第 1 四半期に少なくとも 1 回は電話をかけたことのある、カリフォルニア州の加入者 (SNO) をリストします。 結果を SNO 順に並べます。 各 MONTHnn 表は、SNO、CHARGES、および DATE の列を持ちます。 CUST 表は、SNO と STATE の列を持ちます。
  SELECT C.SNO
    FROM CUST C
    WHERE C.STATE = 'CA'
    AND EXISTS (
    SELECT * 
      FROM MONTH1
      WHERE DATE BETWEEN '01/01/2009 AND '01/31/2009'
      AND C.SNO = SNO
    UNION ALL
    SELECT * 
      FROM MONTH2
      WHERE DATE BETWEEN '02/01/2009 AND '02/28/2009'
      AND C.SNO = SNO
    UNION ALL
    SELECT * 
    FROM MONTH3
    WHERE DATE BETWEEN '03/01/2009 AND '03/31/2009'
    AND C.SNO = SNO
    )
    ORDER BY C.SNO;