0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL『サブクエリ』について

Posted at

サブクエリとは

データベースなどの問い合わせ(クエリ)文の内部に含まれる、別の問い合わせ文のこと。
よく用いられるのはSQLのSELECT文を利用したサブクエリで、ある条件に基づいて抽出したデータを他のクエリの対象や条件の記述に使うことができる。サブクエリ中の条件などの記述にさらにサブクエリを用いて、何段階も入れ子状にすることもできる。

##join句との比較

/*! join句 */

SELECT OrderID FROM Sales.OrderDetail AS SOD
INNER JOIN Production.Product AS Pdt
ON SOD.ProductID = Pdt.ProductID
WHERE Pdt.Name = 'desk'

/*! 
サブクエリの構文
SELECT 列名 FROM テーブル名

 WHERE 列名 演算子 (サブクエリ)
 */


SELECT OrderID FROM Sales.OrderDetail
WHERE ProductID = 
(SELECT ProductID FROM Production.Product
 WHERE Name = 'desk')

###複数の結果を返すサブクエリ
 サブクエリとしてSELECT文を記述する際、単体の結果を返すSELECT文と複数行にわたる結果を返すSELECT文が存在する。単一の結果であれば、条件式を利用できます。結果が複数行となる場合、この条件式は利用できず、INを用いる必要がある

SELECT ProductID FROM Production.Product WHERE ProductModelID = 15
/*!
複数の結果を出力する。
SELECT文をサブクエリとして埋め込む場合、
IN句を利用した次のような構成となる。
 */


SELECT OrderID FROM Sales.OrderDetail
WHERE ProductID IN 
(SELECT ProductID FROM Production.Product
 WHERE ProductModelID = 15)

サブクエリでのSELECT文は複数の結果を出し、一致するデータが出力される。
結合の場合、同一の値を得れるが、サブクエリを利用した方が構成が簡潔になる。

###サブクエリが使えないパターン
自身の集計を使った更新を実行する場合はサブクエリが使えない。解決法はサブクエリ内にサブクエリを入れるか、サブクエリを結合する。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?