Excel関数をネストするかのようにSELECT文も同じようにネストすることが出来ます。
ネストとは
Excel関数では
Excel関数で言うネストとは、関数の中に別の関数を挿入して、1つの関数式で複数の処理を実行することを言います。
下記事例では
・INDEX関数
・MATCH関数
・MAX関数
の3つを使用しています。
ネストされた式は内側にある関数から順に処理していきます。
1. MAX関数で最高点数(96点)を算出
2. MATCH関数で最高点(96点)が上から何番目(2番目)にあるか算出
3. INDEX関数で生徒IDの上から2番目の値を算出
SQLでは
SQLでのネストはサブクエリという名称がついています。
サブクエリはSELECT文の中に別のSELECT文を挿入して1つのSQLで複数の処理を実行することを言います。
サブクエリもExcel関数のネストと同じように内側にあるSELECT文から実行します。
サブクエリとなる内側にあるSELECT文は () で括ります。
サブクエリを使用することでSQL文を元データに合わせて柔軟に自動変更することが出来るようになります。
サブクエリ使用例
Select文の列にサブクエリを使用して定数のように値を表示させることが出来ます。
サブクエリはSelectの列だけでなく他の場所に使用することも出来ます。
Select文の列、Fromでテーブルに、Where句やHaving句の条件式にと様々な値を動的に柔軟に自動変更することが出来ます。
次の例ではWhere句での条件式に使用しています。
- Whereの条件値に記載されている「select max(点数) from [データ$]」を実行(96点)
- 上記の結果を一番外側のSELECT文のWhere句に代入。「select 生徒ID as 最高点は? from [データ$] where 点数 = 96 」というSELECT文を実行
上記のように算出される値が単一の値になるサブクエリをスカラ・サブクエリといいます。
スカラ・サブクエリは上述のようなWhere句で比較演算子と組み合わせることで条件式を作成することが出来ます。
(複数の値が返ってきていると比較演算子と組み合わせることが出来ません)