前回の続き
今回は、サブクエリを勉強します。
サブクエリとは入れ子ともいわれ、例えば、親のSELECT文の中に子のSELECT文をいれるなどあります。
今回は、このSELECT文を使ったサブクエリを紹介します。
FROM句をサブクエリにする。
前回、HAVINGを紹介しましたが、サブクエリを使うとHAVINGと同様な出力を得ることができます。
ちなみに、前回のクエリはこちら。
SELECT PersonType, COUNT(BusinessEntityID) FROM Person.Person WHERE MiddleName IS NOT NULL GROUP BY PersonType HAVING COUNT(BusinessEntityID) > 100
これと同じ出力になるのはこちら、
SELECT * FROM ( SELECT PersonType, COUNT(BusinessEntityID) AS CNT FROM Person.Person WHERE MiddleName IS NOT NULL GROUP BY PersonType ) TBL1 WHERE CNT > 100
FROM句に集計した結果のテーブルを作っておいて、このテーブルをTBL1という名前のテーブルとして、扱います。
これにより、集計されたカラムはWHERE句によって、抽出可能になります。
FROM句以外にも使える。
サブクエリはFROM句以外にも、どこでも扱えます。
ためしに、カラムをサブクエリにしてあげます。
SELECT BusinessEntityID, ( SELECT PhoneNumber FROM Person.PersonPhone PPP WHERE PPP.BusinessEntityID = PP.BusinessEntityID ) AS PhoneNumber FROM Person.Person PP
出力は以下の通り
2列目カラムについて、Person.PersonPhoneのBusinessEntityIDをキーにしてレコードを抽出し、PhoneNumberを表示します。
サブクエリはテーブルで返せるものと、スカラで返さなくてはならないものの違いがある。
以下はエラーになります。
SELECT BusinessEntityID, ( SELECT PhoneNumber FROM Person.PersonPhone PPP ) AS PhoneNumber FROM Person.Person PP
FROM句に入れるサブクエリと違うのは、カラムとして出力させるうえでは、結果がスカラ(単一)になる必要があります。
上記のSQLでは、複数の結果を返すので、エラーになります。
以上、今回はここまで。