サブクエリとは
データベースなどの問い合わせ(クエリ)文の内部に含まれる、別の問い合わせ文のこと。
よく用いられるのはSQLのSELECT文を利用したサブクエリで、ある条件に基づいて抽出したデータを他のクエリの対象や条件の記述に使うことができる。サブクエリ中の条件などの記述にさらにサブクエリを用いて、何段階も入れ子状にすることもできる。
##join句との比較
/*! join句 */
SELECT OrderID FROM Sales.OrderDetail AS SOD
INNER JOIN Production.Product AS Pdt
ON SOD.ProductID = Pdt.ProductID
WHERE Pdt.Name = 'desk'
/*!
サブクエリの構文
SELECT 列名 FROM テーブル名
WHERE 列名 演算子 (サブクエリ)
*/
SELECT OrderID FROM Sales.OrderDetail
WHERE ProductID =
(SELECT ProductID FROM Production.Product
WHERE Name = 'desk')
###複数の結果を返すサブクエリ
サブクエリとしてSELECT文を記述する際、単体の結果を返すSELECT文と複数行にわたる結果を返すSELECT文が存在する。単一の結果であれば、条件式を利用できます。結果が複数行となる場合、この条件式は利用できず、INを用いる必要がある
SELECT ProductID FROM Production.Product WHERE ProductModelID = 15
/*!
複数の結果を出力する。
SELECT文をサブクエリとして埋め込む場合、
IN句を利用した次のような構成となる。
*/
SELECT OrderID FROM Sales.OrderDetail
WHERE ProductID IN
(SELECT ProductID FROM Production.Product
WHERE ProductModelID = 15)
サブクエリでのSELECT文は複数の結果を出し、一致するデータが出力される。
結合の場合、同一の値を得れるが、サブクエリを利用した方が構成が簡潔になる。
###サブクエリが使えないパターン
自身の集計を使った更新を実行する場合はサブクエリが使えない。解決法はサブクエリ内にサブクエリを入れるか、サブクエリを結合する。