【SQL基礎】副問い合わせとは
副問い合わせとは
副問い合わせとは、SELECT文、INSERT文、UPDATE文、DELETE文などの特定の条件式の中にSELECT文を含むことで、そのSELECTの結果を条件として利用する記述方法です。
主にWHERE句で使用することが多いですが、FROM句やHAVING句など様々な場所で利用できます。
副問い合わせはクエリに含まれるクエリなので別名サブクエリとも呼ばれます。(クエリは問い合わせという意味です。)
副問い合わせの基本的な記述方法は下図の通りです。
副問い合わせのSELECT文はこのように全体を括弧で囲んで記述します。
副問い合わせを利用すると、まず括弧内に指定されたSQL文(副問い合わせ)を実行し、その結果を使って主問い合わせを実行します。
この副問い合わせを利用することで、SELECT文の結果を利用した1つのSQL文として記述することができます。
副問い合わせを利用するメリットは次の通りです。
・複数のクエリを1つのクエリで記述することができる。
・複雑な結合や集合処理を行わずにクエリを記述できる。
・1つのクエリで記述するため可読性が高い。
副問い合わせの種類
副問い合わせとしてSELECT文を記述する際、いくつか記述方法があるので以下で確認していきましょう。
・単一行副問い合わせ
主問い合わせに1件のデータを戻す副問い合わせは単一行副問い合わせと呼ばれます。単一行副問い合わせでは比較演算子(=、<、<=、>、>=、!=)やIN/NOT IN演算子、EXISTS/NOT EXISTS演算子などを使用することができます。IN演算子は副問い合わせの結果に検討対象の属性が含まれているかどうかを判定する場合に使用します。EXISTS演算子は副問い合わせの結果が空かどうかを判定します。空でない(1行以上ある)場合は真(TRUE)、そうでない場合は偽(FALSE)となります。
基本的な単一行副問い合わせの書き方は以下の通りです。赤字の部分が副問い合わせになります。
SELECT カラム名1,カラム名2, …
FROM テーブル名
WHERE カラム名 演算子 ( SELECT カラム名 FROM テーブル名 [WHERE 条件式])
・複数行副問い合わせ
主問い合わせに複数件のデータを戻す副問い合わせは複数行副問い合わせと呼ばれます。
WHERE句だけでなくFROM句でも記述できます。
複数行副問い合わせでは以下演算子を使用します。
IN:副問い合わせの結果のいずれかと等しい
ANY:副問い合わせの結果のいずれかと比較する
ALL:複数行副問い合わせの結果のすべてと比較する
いずれかの値と比較する点ではINとANYは同じですが、INは=で比較するのに対し、ANYは指定した演算子で比較することもできる点が異なります。
基本的な複数行副問い合わせの書き方は以下の通りです。
SELECT 列名1, 列名2, …
FROM テーブル名
WHERE 列名 演算子 ( SELECT 列名 FROM テーブル名 [WHERE 条件式])
・表副問い合わせ
検索結果がn行n列の表となる場合に表副問い合わせを利用します。(n,nは1以上)
SELECT文のFROM句やINSERT文などに記述できます。
・相関副問い合わせ
副問い合わせのSELECT文で主問い合わせのテーブルの列を参照するものを相関副問い合わせ(相関サブクエリ)と言います。通常の副問い合わせは内側のSELECT文の結果に基づき外側のクエリを実行するのに対し、相関副問い合わせは外側の実行結果1件に対して内側のSELECT文が実行されます。
相関副問い合わせの書き方は以下の通りです。
SELECT *
FROM テーブルA
WHERE カラム名 演算子 (SELECT カラム名 FROM テーブルB WHERE テーブルA .カラム名= テーブルB.カラム名);
主問い合わせにあるテーブルは「テーブルA」で、副問い合わせにあるテーブルは「テーブルB」です。そして副問い合わせのWHEREの条件に主問い合わせのテーブルAがあります。このように副問い合わせの中に主問い合わせの項目があるSQLは相関副問い合わせとなります。上記の場合相関となる部分が「WHERE テーブルA .カラム名= テーブルB.カラム名」です。外側のテーブルAの1行毎に、WHERE句に記述された副問い合わせが実行されます。
今回の学習ポイント
・副問い合わせを利用することで複数のクエリを1つのクエリで記述できる。
・SELECT句での副問い合わせは1つの列のみ指定する必要がある。
練習問題
問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。
[sql]CREATE DATABASE worldcup2014;
USE worldcup2014;
Source C</span>/worldcup2014.sql
[/sql]
- 単一行副問い合わせと複数行副問い合わせで使用できる演算子は何ですか?
以上、副問い合わせとはでした。