サブクエリの利用 - SELECTの結果をWHERE節の条件値にする SELECT結果に対してSELECTする

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

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