LoginSignup
1
2

More than 3 years have passed since last update.

SQL 副問い合わせ(サブクエリ)

Posted at

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;

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2