サブクエリ (サブクエリ) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

サブクエリ (サブクエリ) の読み方

日本語表記

サブクエリ (サブクエリ)

英語表記

subquery (サブクエリ)

サブクエリ (サブクエリ) の意味や用語解説

サブクエリとは、SQL文の中に記述された別のSQL文のことだ。別名として副問い合わせとも呼ばれる。メインとなるクエリ(親クエリ)の結果を絞り込んだり、必要なデータを取り出したりするために使用される。一言で言うと、「クエリの中のクエリ」だ。 データベースから特定の情報を効率的に取得するために、サブクエリは非常に強力なツールとなる。例えば、「特定の部署の平均給与よりも高い給与をもらっている社員の情報」を取得したい場合、まず「特定の部署の平均給与」をサブクエリで取得し、その結果を基に「平均給与よりも高い給与をもらっている社員の情報」を親クエリで取得するという手順を踏む。 サブクエリは、SELECT、FROM、WHERE、HAVING句など、SQL文の様々な箇所で使用できる。しかし、一般的にWHERE句で使用されることが多い。WHERE句で使用される場合、サブクエリの結果を条件として、親クエリの対象となる行を絞り込む役割を果たす。 サブクエリには、大きく分けて「スカラサブクエリ」、「複数行サブクエリ」、「相関サブクエリ」の3種類がある。 スカラサブクエリは、単一の値(スカラー値)を返すサブクエリだ。WHERE句やHAVING句で比較演算子(=, <, >など)とともに使用され、親クエリの各行と比較される。例えば、「最も高い給与」を返すサブクエリはスカラサブクエリに該当する。スカラサブクエリは必ず1つの値を返す必要があり、複数の値を返したり、値を返さなかったりするとエラーになる。 複数行サブクエリは、複数の行を返すサブクエリだ。WHERE句でIN、ANY、ALLなどの演算子とともに使用される。IN演算子は、サブクエリの結果に含まれる値のいずれかと一致する行を選択する。ANY演算子は、サブクエリの結果のいずれかの値よりも大きい(または小さい)行を選択する。ALL演算子は、サブクエリの結果のすべての値よりも大きい(または小さい)行を選択する。例えば、「特定の部署に所属する社員のIDリスト」を返すサブクエリは複数行サブクエリに該当する。 相関サブクエリは、親クエリのカラムを参照するサブクエリだ。親クエリの各行に対して一度ずつ評価されるため、処理に時間がかかる場合がある。しかし、複雑な条件でデータを絞り込む場合に非常に有効だ。例えば、「各部署において、その部署の平均給与よりも高い給与をもらっている社員の情報」を取得する場合、サブクエリは親クエリの部署IDを参照して、その部署の平均給与を計算する必要がある。このような場合に相関サブクエリが用いられる。相関サブクエリは、サブクエリが親クエリに依存しているため、サブクエリ単独では実行できない。 サブクエリを使用する際の注意点として、パフォーマンスが挙げられる。サブクエリは、SQL文を簡潔に記述できる一方で、データベースの処理負荷が高くなる場合がある。特に、相関サブクエリは、親クエリの各行に対してサブクエリが実行されるため、大規模なテーブルに対して使用すると、非常に時間がかかる可能性がある。そのため、サブクエリを使用する際には、実行計画を確認し、必要に応じて結合(JOIN)など、より効率的な方法を検討することが重要だ。また、サブクエリの結果がNULLになる可能性がある場合は、NULL値を考慮した条件式を記述する必要がある。 サブクエリはSQLの強力な機能の一つだが、適切な場面で、適切な方法で使用することが重要だ。

サブクエリ (サブクエリ) とは | 意味や読み方など丁寧でわかりやすい用語解説