サブクエリの利用 - 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 テーブル
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やデータベースの記事なども担当。