SQL-92/99 Oracle Db2 SQL Server MySQL PostgreSQL Access

WHERE [ NOT ] EXISTS ( 副問い合せ )

EXISTSは副問い合せの結果が存在するかを調べるときに使用します。

このとき副問い合せの結果が存在するとき真になります。


関連キーワード





SQL実行例の説明(1)

・T1_SAMPLE表から副問い合せの結果が真のときデータを取得します。

・副問い合わせの結果が偽であればT1_SAMPLE表からデータは取得しません。



SQL実行の結果(1-1)

・条件式に一致する副問い合わせの結果リストはI1_NAME車体部品が存在するか。(左)

・副問い合わせの結果が真となるのでT1_SAMPLE表からデータを取得します。(右)


SELECT * FROM T1_SAMPLE
WHERE EXISTS (
SELECT * FROM T2_SAMPLE
WHERE I1_NAME = '車体部品'
);

I1_CODEI1_NAMEI1_PRICE
101汎用部品 500
201車体部品2300
202車体部品2400
301特殊部品4500

T2_SAMPLE


SERIALI1_CODEI_COST
2030011012500
2030022016500
2030033019800
2030042015500
2030052015600
2030062025600

T1_SAMPLE

SQL Result
SERIALI1_CODEI_COST
2030011012500
2030022016500
2030033019800
2030042015500
2030052015600
2030062025600



SQL実行の結果(1-2)

・条件式に一致する副問い合わせの結果リストはI1_NAME特殊部品が存在するか、かつ、I1_CODEの値がT1_SAMPLE表のI1_CODEと等しいの値が存在するか。(左)

・副問い合わせの結果が真となるのでT1_SAMPLE表からデータを取得します。(右)


SELECT * FROM T1_SAMPLE AS T1
WHERE EXISTS (
SELECT * FROM T2_SAMPLE AS T2
WHERE I1_NAME = '特殊部品'
AND T2.I1_CODE = T1.I1_CODE
);

I1_CODEI1_NAMEI1_PRICE
101汎用部品 500
201車体部品2300
202車体部品2400
301特殊部品4500

T2_SAMPLE


SERIALI1_CODEI_COST
2030011012500
2030022016500
2030033019800
2030042015500
2030052015600
2030062025600

T1_SAMPLE

SQL Result
SERIALI1_CODEI_COST
2030033019800



SQL実行例の説明(2)

・NOTが指定された場合には副問い合わせの結果が真であれば偽、偽であれば真と否定されます。



SQL実行の結果(2-1)

・条件式に一致する副問い合わせの結果リストはI1_NAMEエンジン部品が存在するか。(左)

・副問い合わせの結果は偽となるが、NOTが指定されているので副問い合わせの結果は真(偽の否定)となるのでT1_SAMPLE表からデータを取得します。(右)


SELECT * FROM T1_SAMPLE
WHERE NOT EXISTS (
SELECT * FROM T2_SAMPLE
WHERE I1_NAME = 'エンジン部品'
);

I1_CODEI1_NAMEI1_PRICE
101汎用部品 500
201車体部品2300
202車体部品2400
301特殊部品4500

T2_SAMPLE


SERIALI1_CODEI_COST
2030011012500
2030022016500
2030033019800
2030042015500
2030052015600
2030062025600

T1_SAMPLE

SQL Result
SERIALI1_CODEI_COST
2030011012500
2030022016500
2030033019800
2030042015500
2030052015600
2030062025600



SQL実行の結果(2-2)

・条件式に一致する副問い合わせの結果リストはI1_NAME車体部品が存在するか。(左)

・副問い合わせの結果は真となるが、NOTが指定されているので副問い合わせの結果は偽(真の否定)となるのでT1_SAMPLE表からデータを取得しません。(右)


SELECT * FROM T1_SAMPLE
WHERE NOT EXISTS (
SELECT * FROM T2_SAMPLE
WHERE I1_NAME = '車体部品'
);

I1_CODEI1_NAMEI1_PRICE
101汎用部品 500
201車体部品2300
202車体部品2400
301特殊部品4500

T2_SAMPLE


IDL_NAMEF_NAMESEX
100101山田晴男1
100102山田2
100103鈴木二郎1
100104田中栄吉1
100105木村1

T1_SAMPLE

SQL Result

問い合せ結果はありません。