SQL 副問合せのサンプル(サブクエリ)

SQLの副問合せ(サブクエリ)のサンプルです。

目次

副問合せとは

副問い合わせとは、あるselect文の結果を別のSQL文で利用することです。
サブクエリとも呼ばれます。サブのクエリ=副の問い合わせ。

select文使用時の副問合せがある場所は以下です。
1.where句にある副問合せ
2.from句にある副問合せ
3.select句にある副問合せ
4.having句にある副問合せ

テストデータ

次のテーブルは、以降のSQLで使用するテストデータです。

tokuisakiテーブル
tokuisaki YYYYMM uriage
A社 201302 200
A社 201303 150
B社 201303 100

1.where句にある副問合せ

where句にある副問合せのサンプルです。

2行目は、where句に売上の平均を求める副問合せがあります。

select * from tokuisaki
where uriage > (select AVG(uriage) from tokuisaki);
実行結果
tokuisaki YYYYMM uriage
A社 201302 200

 

2.from句にある副問合せ

from句にある副問合せをのサンプルです。

2行目は、from句に売上の平均を求める副問合せがあります。
from句にある副問合せのselect文の結果は、テーブルとみなすことができます。

select b.tokuisaki,b.uriage,b.YYYYMM
from (select AVG(uriage) as heikin from tokuisaki) a,tokuisaki b
where a.heikin < b.uriage;
実行結果
tokuisaki YYYYMM uriage
A社 201302 200

 

3.select句にある副問合せ

select句にある副問合せをのサンプルです。

4行目は、select句に売上の平均を求める副問合せがあります。
項目の「hantei」には、売上の平均を超えていたら1,それ以外の場合は0が入っています。

select tokuisaki,
YYYYMM,
uriage,
uriage > (select AVG(uriage) from tokuisaki ) as hantei
from tokuisaki;
実行結果
tokuisaki YYYYMM uriage hantei
A社 201302 200 1
A社 201303 150 0
B社 201303 100 0

 

4.having句にある副問合せ

having句にある副問合せのサンプルです。

4行目は、having句に売上の平均を求める副問合せがあります。

SELECT tokuisaki,MAX(uriage) 
FROM `tokuisaki` 
group by tokuisaki 
having MAX(uriage) > (SELECT AVG(uriage) FROM `tokuisaki`);
実行結果
tokuisaki MAX(uriage)
A社 200

 

副問合せの結果が複数件のとき

副問合せの結果が複数件のときのサンプルです。

テストデータ

次のテーブルは、以降のSQLで使用するテストデータです。

tokuisakiテーブル
tokuisaki YYYYMM uriage
A社 201302 200
A社 201303 150
B社 201303 100
company_mテーブル
company
A社
C社

inを使用したサンプル

2行目の副問合せのSQLは結果が複数件返ってきます(A社とC社)。
そのため条件は、イコール(=)ではなくinを使用します。

select * from tokuisaki 
where tokuisaki in (select company from company_m);
実行結果
tokuisaki YYYYMM uriage
A社 201302 200
A社 201303 150

=anyを使用したサンプル

上記SQLのinを=anyにしても同じ結果になります。

select * from tokuisaki 
where tokuisaki = any (select company from company_m);

<>allを使用したサンプル

否定(<>all)を使用した場合のサンプルです。

2行目の副問合せのSQLは結果が複数件返ってきます(A社とC社)。
company_mテーブルにない会社を抽出するため条件に<>allを使用しています。

select * from tokuisaki 
where tokuisaki <> all (select company from company_m);
実行結果
tokuisaki YYYYMM uriage
B社 201303 100

関連の記事

SQL INSERT文のサンプル
SQL UPDATE文とDELETE文のサンプル
SQL 重複行を表示しないサンプル(distinct)
SQL 複数の行をまとめる(集約関数/group by/having)
SQL 内部結合のサンプル(inner join)
SQL 外部結合のサンプル(left outer join/right outer join)
SQL 自己結合のサンプル
SQL UNIONのサンプル

△上に戻る