Database/SQL Server

SQL Server - 서브 쿼리 Subqueries, 상관 서브 쿼리 Correlated sub query

청렴결백한 만능 재주꾼 2020. 12. 9. 06:56
반응형

example

문제

한번도 안 팔린 제품은 무엇인가?

Select Id, Name
from tblProducts
where Id NOT IN (Select distinct ProductId from tblProductsales)

Join

Select tblProducts.Id, Name
from tblProducts
left join tblProductSales
on tblProducts.Id = tblProductSales.ProductId
where tblProductSales.ProductId is null

문제

Name이랑 TotalQuantity sold 를 나타나게하는 쿼리가 필요

Subquery

Select Name,
(Select SUM(QuantitySold) from tblProductSales where ProductId = tblProducts.Id) as QtySold
from tblProducts
order by Name

 

Join

Select Name, SUM(QuantitySold) as QtySold
from tblProducts
left join tblProductSales
on tblProducts.Id = tblProductSales.ProductId
Group by Name

 

이 예시들로 알겠지만 , 서브쿼리는 그냥 간단히 단일 값을 리턴하고 SELECT, UPDATE, INSERT or DELETE 같은 그런 문법에 중첩될 수 있는  SELECT 문이다. 마소피셜 서브쿼리 32개까지 중첩가능!

From these examples, it should be very clear that, a subquery is simply a select statement, that returns a single value and can be nested inside a SELECT, UPDATE, INSERT, or DELETE statement. It is also possible to nest a subquery inside another subquery. According to MSDN, subqueries can be nested up to 32 levels.

 

 

Inner query = Sub query이다. 이 sub query 혹은 inner query를 가지고 있는 쿼리를 outer query라고 한다. 서브쿼리 내에서 존재하는 테이블의 열은 외부 쿼리 안에 있는 SELECT 절에 사용 될 수 없다.   
Subqueries are always enclosed in paranthesis and are also called as inner queries, and the query containing the subquery is called as outer query. The columns from a table that is present only inside a subquery, cannot be used in the SELECT list of the outer query.

 


상관 하위 쿼리(Correlated sub query)

: 이해하기 쉽게 서브쿼리가 독자적으로 쓸 수 있으면 노 상관 하위 쿼리이고 외부쿼리의 열을 하나라도 참조하고 있으면 상관 하위 쿼리이다.

If the subquery depends on the ourter query for its values, then that sub query is called as correlated subquery.

Correlated subqueries get executed, once for every row that is selected by the outer query.
Correlated subquery, can not be executed independently of the outer query.

Select Name,
(Select SUM(QuantitySold) from tblProductSales where ProductId = tblProducts.Id)
from tblProducts
반응형