■主問合せと異なる表を問合せる副問合せ
■複数の副問合せを使用する主問合せ
■副問合せの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を戻す。