
실제 서비스에 사용중인 쿼리의 내용을 예시용으로 바꿔서 SQL 쿼리문을 해석하고, 서브쿼리의 활용 방법에 대해 정리해보겠습니다.
SELECT t1.*,
CASE WHEN t2.OrderID IS NOT NULL THEN 'Y'
ELSE 'N'
END AS OrderStatus
FROM (
-- t1 서브쿼리
SELECT '1001' AS CustomerID,
'John Doe' AS CustomerName,
o.OrderID,
p.ProductName,
od.Quantity
FROM Orders o
JOIN OrderDetails od ON o.OrderID = od.OrderID
JOIN Products p ON od.ProductID = p.ProductID
WHERE o.CustomerID = '1001'
) t1
LEFT OUTER JOIN
(
-- t2 서브쿼리
SELECT o.OrderID
FROM Orders o
JOIN OrderDetails od ON o.OrderID = od.OrderID
JOIN Products p ON od.ProductID = p.ProductID
WHERE p.Category = 'Electronics'
) t2
ON t1.OrderID = t2.OrderID;
t1과 t2 서브쿼리의 조인 결과를 가져오는 메인 쿼리입니다.
LEFT OUTER JOIN을 사용하여 t1을 기준으로 t2를 조인하고, 조건에 따라 OrderStatus 값을 결정합니다.
Orders, OrderDetails, Products 테이블에서 필요한 정보를 추출하는 서브쿼리입니다.
다양한 조건을 사용하여 특정 고객의 주문 정보를 추출하고, 이를 t1이라는 임시 테이블에 저장합니다.
Orders, OrderDetails, Products 테이블을 활용하여 특정 카테고리의 제품이 주문된 주문 정보를 추출하는 서브쿼리입니다.
t2라는 임시 테이블에 결과를 저장하고, 메인 쿼리에서 활용됩니다.
서브쿼리를 메인 쿼리에서 필요한 정보를 추출하거나 특정 조건을 만족하는 데이터를 조합하는 데에 활용해보았습니다.