Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

サブクエリというワードをご存じでしょうか?

SQLを使用する上でサブクエリが使えるようになると、非常にシンプルな記述が可能になります。

そこで今回はこのサブクエリについて解説してみようと思います。

SQLクエリの中でもサブクエリの使用頻度は非常に高いので、現在SQLを学習中の方はこの記事を読んで必ず習得するようにしましょう。

サブクエリとは

サブクエリは別名「副問い合わせ」とも呼ばれています。

このサブクエリは特定の条件式の中にSELECT文を埋め込むことにより、そのSELECTの結果を条件として利用する事を指します。

テーブル結合であるJOIN句や絞り込みの代表格であるWHERE句を利用することで条件などを指定することが出来ますが、サブクエリはその上位版に位置します。

基本的な記述方

サブクエリを使用する場合、基本的な記述方法は次の通りです。

SELECT
	列名
FROM
	テーブル名
WHERE
	列名 演算子
		(サブクエリ)

上の記述ではWHERE句を用いていますが、これ以外にもHAVING句などで使用できます。

使い方

それでは早速、実際にサブクエリを使いながら挙動を確認してみましょう。

まず次のようなテーブルデータがあったとします。

// Shop_A
ItemID      Name       Cost        Code                                         
----------- ---------- ----------- ----------
          1 item_a             300 dcjr6                                        
          2 item_b             400 tqh7o                                        
          3 item_c             350 up0nh                                        
          4 item_d             500 ocd18                                        
          5 item_e             350 5gasc

// Shop_B
ItemID      Name       Cost        Code                                         
----------- ---------- ----------- ----------
          1 item_a             500 ui3j3                                        
          2 item_b             100 uo83a                                        
          3 item_c             150 3fr6u                                        
          4 item_d             500 qkc6c                                        
          5 item_e             250 19318

「Shop_A」と「Shop_B」にはそれぞれ商品とその商品のコストがデータとして格納されています。

この二つのデータを使用し、「NameとCostが同一の商品のShop_AのCode」を検索してみます。

最初はJOIN句を使い、テーブルを結合させて検索する方法です。

SELECT
	SA.Code
FROM
	Shop_A AS SA
INNER JOIN
	Shop_B AS SB
ON
	SA.Name = SB.Name
WHERE
	SA.Cost = SB.Cost
GO

Code
----------------
ocd18

(1 行処理されました)

次に同じスクリプトで、サブクエリを使ってみます。

SELECT
	Code
FROM
	Shop_A
WHERE Cost = 
	(SELECT
		Cost
	FROM
		Shop_B
	WHERE
		SHop_A.Name = Shop_B.Name
	);
GO

Code
----------------
ocd18

(1 行処理されました)

サブクエリを使っているためINNER JOIN句でテーブルを結合させていないにもかかわらず、結果はINNER JOIN句を使った時と同じになっていることが確認できます。

複数の結果を返す

SELECT文には二通りの結果があります。

一つは単一結果を返すものでもう一つは複数行に渡って結果を返すものです。

単一結果に関しては特に問題なく条件式を利用できますが、これが複数行となると先ほどまでの条件式は使えなくなります。

ではそういうケースではどのようにするかというと、IN句を利用して組み立てます。

例えば次のクエリを見てください。

SELECT
	ProductID
FROM
	SalesLT.Product
WHERE
	ProductModelID = 11
GO

ProductID
-----------
        713
        714
        715
        716

(4 行処理されました)

これはAdventureWorksLT2019というサンプルデータを使い、通常通り条件式で検索をしたものですが、このSELECT文では複数の結果が返ってきていることがわかります。

サブクエリでこの記述を直接利用することは出来ない為、こういった場合には以下のようにIN句に置き換えます。

SELECT
	SalesOrderID
FROM
	SalesLT.SalesOrderDetail
WHERE
	ProductID IN (
		SELECT
			ProductID
		FROM
			SalesLT.Product
		WHERE
			ProductModelID = 11
	);
GO

SalesOrderID
------------
       71782
       71783
       71784
       71797
       71899
       71902
       71938
       71782
       71783
       71784
       71797
       71816
       71845
       71858
       71895
       71902
       71938
       71783
       71784
       71797

(20 行処理されました)

まとめ

いかがでしたか?

今回はサブクエリの基本について解説してみました。

使い慣れるまではあまり便利とは思えない方もいるかもしれませんが、非常に見やすい記述をすることが出来るため、出来るだけこういった形で記述出来るように心がけたいところです。

サブクエリについてはかなり幅広い使い方があるため、色々と調べてみるのも良いかもしれません。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。