EXISTS
EXISTS キーワードを使用して、サブクエリの結果に行があるかどうかを検査します。サブクエリに行が含まれていれば、True が返されます。
構文
EXISTS (サブクエリ)
備考
外部クエリが評価するすべての行について、PSQL はサブクエリ内に関連する行が存在するかどうかを検査します。PSQL は、外部クエリの結果のうち、サブクエリ内の関連する行に対応する各行を、ステートメントの結果テーブルに含めます。
EXISTS はストアド プロシージャ内のサブクエリにも使用できます。ただし、ストアド プロシージャ内のサブクエリ SELECT ステートメントに COMPUTE 句または INTO キーワードを含めることはできません。
多くの場合、EXISTS を含むサブクエリは IN を使って書き直すことができます。PSQL は、IN を使用しているクエリの方がより効率的に処理できます。
例
次のステートメントは、成績評価点平均が 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)
============
次のプロシージャは、入力パラメーターの値を使って、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)
関連項目