Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

EXISTS (SQL)

指定されたオブジェクトの存在を確認します。

Synopsis

テーブルに少なくとも 1 行が存在するかを確認

EXISTS select-statement

DROP コマンドの実行対象が存在しない場合にエラーを抑制

DROP-command IF EXISTS name

CREATE TABLE コマンドの実行対象が既に存在する場合にコマンドを無視し、エラーを抑制

CREATE TABLE IF NOT EXISTS name

引数

引数 説明
select-statement 一般的に条件式を含む単純なクエリ
DROP-command DROP AGGREGATEDROP DATABASEDROP FUNCTIONDROP INDEXDROP METHODDROP PROCEDUREDROP QUERYDROP ROLEDROP TABLEDROP TRIGGERDROP USERDROP VIEW のいずれかのコマンド

概要

述語 EXISTS は、主にテーブルに行が 1 つ以上存在するかどうかを調べるために、指定されたテーブルをテストします。EXISTS に続く SELECT 文は、何を含むかについてチェックされます。その節は多くの場合以下の形式です。

EXISTS (SELECT... FROM... WHERE...)

一般的な文は、以下のようになります。

SELECT name
     FROM Table_A
     WHERE EXISTS
     (SELECT *
          FROM Table_B
          WHERE Table_B.Number = Table_A.Number)

この例では、サブクエリによって指定された単独あるいは複数の行が存在するかどうかを、述語がテストします。

このテストは、UNION 文ではなく SELECT 文で実行しなければならないことに注意してください。

以下の例のように、NOT EXISTS 節は、テーブル内に行が存在しないことをテストします。

SELECT EmployeeName,Age
     FROM Employees
     WHERE NOT EXISTS (SELECT * FROM BonusTable
     WHERE NOT (BonusTable.Result = 'Positive'
     AND Employees.EmployeeNum = BonusTable.EmployeeNum))

述語条件を指定できる場所であればどこでも、EXISTS を使用できます。詳細は、このドキュメントの "述語の概要" ページを参照してください。

該当する場合、システムは、EXISTS または NOT EXISTS サブクエリに集合値サブクエリの最適化 (SVSO) を自動的に適用します。この最適化の詳細、および %NOSVSO キーワードを使用したこの最適化のオーバーライドの詳細は、"FROM 節" のリファレンス・ページで “クエリ最適化オプション” を参照してください。

以下の文に示すように、バリエーションの IF EXISTS を使用して、DROP TABLE などの DROP コマンドで、実行対象が存在するかどうかをそのコマンドの実行条件とすることができます。

DROP TABLE IF EXISTS Records

この例では、テーブル Records が存在しない場合はエラーが発生しません。この文は SQLCODE 1 とメッセージを返します。この動作は、管理ポータルまたは構成パラメータ・ファイル (CPF) で DDL 文を制御する設定Opens in a new tabよりも優先されます。これにより、通知なしでエラーが抑制されます。

同様に、以下の文のように、CREATE TABLE コマンドを使用するときに IF NOT EXISTS を指定できます。

CREATE TABLE IF NOT EXISTS Records (...)

この例では、Records テーブルが既に存在する場合、コマンドは何も実行しません。エラーは発生せず、この文は SQLCODE 1 とメッセージを返します。この動作は、管理ポータルまたは構成パラメータ・ファイル (CPF) で DDL 文を制御する設定よりも優先されます。これによって、実質的に既存のテーブルが上書きされ、通知なしでエラーが抑制されます。詳細は、CREATE TABLE のリファレンス・ページで、既存のテーブルのチェック方法に関するセクションを参照してください。

関連項目

FeedbackOpens in a new tab