副問合せの解説(基本情報技術者シラバス用語)

目次

副問合せ(サブクエリ)とは

副問合せ(サブクエリ)とは、あるSQL文(メインの問い合わせ)の中に埋め込まれた、別のSELECT文(サブの問い合わせ)のことです。内側の副問合せが実行された結果が、外側のメインSQL文の検索条件などに渡されます。これにより、データがあらかじめ決まっていない場合や、動的に変化する数値を基準にして検索を行いたい場合に、1回の手続きで複雑な条件の検索を実現できるようになります。

具体例

「全商品の平均価格よりも高い商品」の一覧を取得したい場合、平均価格はその時々で変動します。そこで以下のように、カッコ内の副問合せで平均価格(AVG)を求め、それを超える商品を外側のSELECT文で検索します。

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

もう少し詳しく

副問合せ(サブクエリ)は、SQLの表現力を大きく広げるための重要なテクニックです。副問合せが返す結果の形式によって、以下のような種類に分類されます。

1. スカラサブクエリ(単一値サブクエリ):実行結果として「1行1列の単一の値(スカラ値)」のみを返します。具体例にある平均価格(AVG)の取得などがこれに該当します。このタイプの副問合せは、比較演算子(=, >, < など)と直接組み合わせて使用できます。
2. 複数行サブクエリ:実行結果として「複数行かつ1列のデータ(値のリスト)」を返します。例えば、「売上がある商品のIDリスト」を返すようなクエリです。この場合は比較演算子は使えず、リスト内に含まれているかを判定する「IN演算子」や、いずれかを満たすかを判定する「ANY / SOME演算子」、すべてを満たすかを判定する「ALL演算子」などと組み合わせて使用します。
3. 表形式(複数行複数列)サブクエリ:テーブルと同じ形式のデータを返します。FROM句の中に記述して「一時的なテーブル」のように扱ったり、JOIN(結合)の対象として利用したりできます。

さらに高度なものとして「相関副問合せ(そうかんふくといあわせ)」があります。これは、外側のメインSQLの各行を評価するたびに、その行のデータ(例えば「部署ID」など)を内側の副問合せに引き渡して処理を実行する仕組みです。「各部署における平均給与より高い給与の社員」を検索する際などに使用され、SQLの動的処理において非常に強力な力を発揮します。

試験でのポイント

IT試験においては、提示されたSQL文の挙動を理解する問題や、空欄になっているWHERE句の中に適切な副問合せと演算子(= や IN など)を当てはめる問題が出題されます。

試験対策としての重要ポイントは以下の通りです。
・カッコ `( )` で囲むルール:副問合せは必ずカッコで囲んで記述することを覚えておきましょう。
・結果の行数と演算子の不一致(エラー原因): - スカラサブクエリ(1行のみを返す)には `=` や `>` などの単一値用演算子を使います。 - 複数行を返すサブクエリに対して `=` などを適用すると、実行時にエラーとなります。複数行を返す場合は、必ず `IN` や `EXISTS` などの演算子を組み合わせる必要があります。この制約は記述・選択問題でよく狙われます。
・相関副問合せの理解:「外側のテーブルのエイリアス(別名)を、内側のWHERE句で参照している」構文を見たら、それは相関副問合せであり、1行ずつループ処理を行うような挙動をすることを理解できるようにしましょう。

関連する用語

副問合せのベースとなる「SQL」や「SELECT文」は最重要の関連用語です。また、副問合せの結果リストに対して含まれるかを判定する「IN演算子」、存在するかを判定する「EXISTS演算子」、メインとサブで連動する複雑な「相関副問合せ」、および副問合せを定義として保存し、仮想のテーブルのように扱う「ビュー」も深い繋がりを持っています。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ