SQLの副問い合わせに関して学習したが、忘れそうなので自分用の備忘録。
●副問い合わせとは
他のSQL文の一部分として登場するSELECT文。サブクエリとも呼ばれる。丸括弧()で括って記載する。
例:
SELECT
(SELECT [列名] FROM [テーブル名1] WHERE [条件] ) AS 名前
FROM [テーブル名2]
WHERE [条件]
●副問い合わせを習得するには
・副問い合わせが処理される仕組みを理解する。
・副問い合わせの代表的な3パターンを学ぶ。
・副問い合わせが処理される仕組みとは
①まず、内側にあるSELECT文が実行され、結果に化ける。
②その後、外側のSQLが実行される。
・副問い合わせの代表的な3パターン
①単一の値の代わりとして、副問い合わせの検索結果を用いる。
②複数の値の変わりとして、副問い合わせの検索結果を用いる。
③表の値の代わりとして、服問い合わせの検索結果を用いる。
①単一行服問い合わせ
・検索結果が1行1列の1つの値となる副問い合わせ
・SELECT文の選択列リスト、FROM句、UPDATEのSET句、また1つの値の判定を行うWHERE句の条件式などに記述できる
SET句での例:
UPDATE [テーブル名A]
SET [列名] =
( SELECT AVG([列名])
FROM [テーブル名B] WHERE [条件] )
WHERE [条件];
選択列リストで利用する例:
SELECT [列名],
(SELECT [列名]
FROM [テーブル名B]
WHERE [条件])
FROM [テーブル名A]
WHERE [条件];
②複数行副問い合わせ
・検索結果がn行1列の複数の値となる副問い合わせ
・複数の値との判定を行うWHERE句の条件式、SELECT文のFROM句に記述できる。
例:
SELECT * FROM [テーブル名] WHERE [列名] IN
(SELECT DISTINCT [列名] FROM [テーブル名]);
・複数行と比較するときには
複数行副問い合わせは複数の値に化けるので、等号や不等号では比較できない。ANY/ALL演算子を組み合わせることで、複数の値との比較を行うことができる。
③表の結果となる副問い合わせ
・検索結果がn行m列の表となる副問い合わせ
・SELECT文のFROM句やINSERT文などに記述できる
FROM句で利用する例:
SELECT SUM(SUB.[列名])
FROM
(SELECT [列名]
FROM [テーブル名A]
UNION
SELECT [列名]
FROM [テーブル名B]
WHERE [条件]
) AS SUB;