개발자 도전기
[SQL] 서브쿼리(Sub query) 본문
서브쿼리
하나의 SQL문 안에 있는 포함되어 있는 또 다른 SQL문을 말합니다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라 부르며 서브쿼리는 내부쿼리(inner query)라고도 부릅니다
1) 단일행 서브쿼리(SingleRow Subquery)
쿼리 결과가 하나의 열과 하나의 행만을 리턴하는 서브쿼리입니다
주로 연산자를 사용해 값을 비교합니다
# 서브쿼리 사용하지 않았을 때
SELECT AVG(Price)
FROM Products;
SELECT *
FROM Products
WHERE Price >= 28.866364;
# 서브쿼리로 변환
SELECT *
FROM Products
WHERE Price >= (SELECT AVG(Price)
FROM Products);
2) 다중행 서브쿼리(MultieRow Subquery)
쿼리 결과가 하나의 열과 다중행을 리턴하는 서브쿼리입니다
IN과 함께 사용할 수 있습니다
# 서브 쿼리 사용하지 않았을 때
SELECT CustomerID
FROM Customers
WHERE Country = 'mexico';
# mexico 고객이 주문한 건들 조회
SELECT *
FROM Orders
WHERE CustomerID IN (2, 3, 13, 58, 80);
# 서브쿼리 사용
SELECT *
FROM Orders
WHERE CustomerID IN (SELECT CustomerID
FROM Customers
WHERE Country = 'mexico');
3) 상관 서브쿼리(Correlative Subquery)
외부 쿼리의 값을 사용하는 서브쿼리입니다. 속도가 느린 편으로 상관 서브쿼리 대신 JOIN을 사용하는 것을 권장합니다
# 각 고객의 주문 횟수
SELECT CustomerName,
Country,
(SELECT COUNT(OrderID)
FROM Orders o
WHERE o.CustomerID = c.CustomerID)
FROM Customers c;
SELECT CustomerName, Country, COUNT(OrderID)
FROM Customers c
LEFT JOIN Orders o
ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID;
'개발공부 > Spring' 카테고리의 다른 글
[Spring] Ajax로 이메일 중복 확인하기 (0) | 2024.05.02 |
---|---|
[Spring] Service로 비즈니스 로직 처리하기 (0) | 2024.05.01 |
[Spring] MyBatis란? (0) | 2024.04.29 |
[Spring] IOC (제어의 역전) (0) | 2024.04.25 |
[Spring] JDBC로 데이터 수정하기 (UPDATE) (0) | 2024.04.23 |