第8章	副問合せによる問合せの解決方法

■主問合せと異なる表を問合せる副問合せ

■複数の副問合せを使用する主問合せ

■副問合せのWHERE句以外で使用

■FROM句での副問合せの使用
FROM句で、副問合せを使用することができる。
FROM句で、副問合せを使用して、その中で、GROUP BY句も使用可能である。

■IN演算子を使用した複数行副問合せ

■ANY演算子を使用した複数行副問合せ
=ANYとINは同じ意味となる。

ANY リスト内の値のいずれかよりも大きければ、TRUEを戻すので、リスト内の最小値よりも大きい場合という意味になる。
比較対象の列の値がリスト内の最小値よりも大きい場合にTRUEを戻す。
<ANY 比較対象の列の値がリスト内の最大値よりも小さい場合にTRUEを戻す。

■ALL演算子を使用した複数行副問合せ

ALL 比較対象の列の値が、リスト内の最大値よりも大きい場合にTRUEを戻す
<ALL 比較対象の列の値が、リスト内の最小値よりも小さい場合にTRUEを戻す

<>ALLは、NOT INと同じ。
ANYの否定は、ALL
ALLの否定は、ANY

副問合せにおけるIN演算子とNULL値

NOT IN(値のリスト)
<>ALL(値のリスト)

NOT演算子は、IN、ANY、ALL演算子と一緒に使用できる。

SELECT文とSELECT句は別物なので、要確認すること。

副問合せは、SQL文のいくつかの句の中で使うことができる。
SELECT文の中では、WHERE句、FROM句、HAVING句で副問合せを使うことができる。
副問合せが最初に実行され、次にその結果を使って主問合せが実行される。

▼副問合せの仕様に関するガイドライン
副問合せは、ガッコで囲む
副問合せは、読みやすいように比較演算子の意義側に置く(左側に置くこともできる)
副問合せでは、単一行比較演算子と複数行比較演算子の2種類の比較演算子を使用できる。

■EXISTS演算子
EXISTS演算子は、表に特定の行が存在するか否かによって、問い合わせの結果が変化する問合せ(存在チェック)で使用する。
EXISTS演算子を指定すると、主問合せの各行に対して、1回ずつ副問合せが実行されるので、条件に合う行が存在するか否かをチェックできる。

IN演算子に置き換えができる。

NOT EXISTS演算子は、後続の副問合せからデータが1件も戻されない場合に、TRUEを戻し、1件以上戻された場合はFALSEを戻す。
EXISTS演算子は、後続の副問合せからデータが1件以上戻された場合に、TRUEを戻し、1県も戻されない場合はFALSEを戻す。