サブクエリの利用 - selectの結果をwhere節の条件値にする select結果に対してselectする - SQL
selectの結果を条件式の条件値にしたり、selectの結果に対して、さらにselectしたい場合があります。
SQLサブクエリ(副問い合わせ)を利用すると上記を実現できます。
where句のサブクエリ
where句で判定する条件をレコードの問い合わせ結果を使う場合に利用します。
書式
select (列名) from (テーブル名) where (条件式列名) > (select (関数等) from (テーブル名))
select (列名) from (テーブル名) where (条件式列名) > (select (列名) from (テーブル名))
記述例
select * from products where price > (select AVG(price) from products)
from句のサブクエリ
select文で抽出した結果に対し、さらにソートやJOIN、結果の編集などをする場合に利用します。主問い合わせの列名でサブクエリの列名を正しく参照するために、サブクエリの後には
as エイリアス名
を記述する必要があります。
書式
select (列名) from (select (列名) from (テーブル名) where (条件式) ) as (エイリアス名)
select (列名) from (select (列名) from (テーブル名) where (条件式) ) as (エイリアス名) where (条件式)
記述例
select句のサブクエリ
列にレコードの値をもとにした演算結果を表示する場合などに利用します。
書式
select (列名... (select (関数) from (テーブル名) ) from (テーブル名)
select (列名... (select (関数) from (テーブル名) where (条件式)) from (テーブル名)
記述例
having句のサブクエリ
having句の詳細は
こちらの記事を参照して下さい。
書式
記述例
例1:集計結果の値を条件とする
products テーブル
id | model | name | category | price |
1 | C-XM01 | モーダンチェア | チェア | 56000 |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
上記のテーブルでpriceの平均値より高いpriceの値を持つレコードを列挙する場合は以下のSQLを実行します。(下記のうちどちらでも可)
select * from products where price > (select AVG(price) from products)
select * from products where price > (select AVG(price) as average from products)
結果
結果は以下になります。
id | model | name | category | price |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。