SQL Engine Reference (v11)

EXISTS

EXISTS キーワードを使用して、サブクエリの結果に行があるかどうかを確認します。サブクエリに行が含まれていれば、True が返されます。

構文

EXISTS (サブクエリ) 

備考

外部クエリが評価する各行について、Pervasive PSQL で、サブクエリからの関連する行があるかどうかが確認されます。Pervasive PSQL は、外部クエリの中でサブクエリからの関連する行に対応する各行を、ステートメントの結果テーブルに含めます。

EXISTS はストアド プロシージャ内のサブクエリにも使用できます。ただし、ストアド プロシージャ内のサブクエリ SELECT ステートメントに COMPUTE 句または INTO キーワードが含まれていてはいけません。

多くの場合、EXISTS を含むサブクエリは IN を使って書き直すことができます。クエリが IN を使用している場合、Pervasive PSQL はより効率的にクエリを処理できます。

次のステートメントは、成績評価点平均が 4.0 の人だけを含むリストを返します。

SELECT * FROM Person p WHERE EXISTS 
  (SELECT * FROM Enrolls e WHERE e.Student_ID = p.id 
   AND Grade = 4.0) 

IN を使って、このステートメントを書き直すことができます。

SELECT * FROM Person p WHERE p.id IN 
  (SELECT e.Student_ID FROM Enrolls WHERE Grade = 4.0) 
666

次のプロシージャは、入力パラメーターの値を使って、Person テーブルから ID を選択します。プロシージャの最初の実行(EXEC)では "Exists は true を返しました" が返り、2 番目の EXEC では "Exists は false を返しました" が返ります。

CREATE PROCEDURE ex1(IN :vID INTEGER) AS 
BEGIN 
  IF EXISTS ('SELECT id FROM person WHERE id < :vID) 
    THEN PRINT 'Exists は true を返しました'; 
  ELSE PRINT 'Exists は false を返しました'; 
  END IF; 
END; 
EXEC ex1(222222222) 
EXEC ex1(1) 

関連項目

SELECT


EXECUTE

FETCH