サブクエリの利用 - 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 テーブル
idmodelnamecategoryprice
1C-XM01モーダンチェアチェア56000
2X-XD05ラージデスクテーブル87000
3A-DA40ラウンドダイニングチェアチェア28000
4O-XX100ナチュラルオフィスチェア13800
5R-D400ラウンドダイニングテーブルテーブル128000
6R7000ウッドキャビネットその他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)

結果

結果は以下になります。
idmodelnamecategoryprice
2X-XD05ラージデスクテーブル87000
5R-D400ラウンドダイニングテーブルテーブル128000

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2014-07-29
iPentec all rights reserverd.