SQL 構文リファレンス : EXISTS
 
このページをシェアする                  
EXISTS
EXISTS キーワードを使用して、サブクエリの結果に行があるかどうかを確認します。サブクエリに行が含まれていれば、True が返されます。
構文
EXISTS (サブクエリ)
備考
外部クエリが評価する各行について、PSQL で、サブクエリからの関連する行があるかどうかが確認されます。PSQL は、外部クエリの中でサブクエリからの関連する行に対応する各行を、ステートメントの結果テーブルに含めます。
EXISTS はストアド プロシージャ内のサブクエリにも使用できます。ただし、ストアド プロシージャ内のサブクエリ SELECT ステートメントに COMPUTE 句または INTO キーワードが含まれていてはいけません。
多くの場合、EXISTS を含むサブクエリは IN を使って書き直すことができます。クエリが IN を使用している場合、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)
============ 
次のプロシージャは、入力パラメーターの値を使って、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