1. 핵심 원리
서브쿼리(Subquery)는 특정 값에 대한 조건을 메인 쿼리 내에서 참조하기 위해 사용됩니다. 이 경우, 단일행 서브쿼리와 다중행 서브쿼리로 구분되며, 다중행 서브쿼리는 서브쿼리 결과가 여러 개의 행을 반환할 때 사용됩니다.
2. 실무에서 쓰이는 이유
다중행 서브쿼리는 복수의 값을 비교하거나, 집합 연산을 수행할 때 실무에서 자주 활용됩니다. 예를 들어, 여러 직책을 가진 직원들의 급여를 비교하거나 특정 부서의 평균 급여보다 높은 직원들을 찾는 작업 등에 사용됩니다.
3. 실무에서 구체적으로 사용되는 상황 예측
- 특정 직책을 가진 직원들과 같은 급여를 받는 직원들을 검색할 때.
- 특정 제품의 가격과 동일한 가격을 가진 다른 제품들을 검색할 때.
- 특정 고객의 구매 이력과 동일한 조건을 가진 다른 고객들을 찾을 때.
4. 자주 사용되는 윈도우 표시 및 설명
이번에 학습한 서브쿼리와 관련된 자주 사용하는 윈도우 함수는 RANK()
와 DENSE_RANK()
입니다. 이 함수들은 다중행 서브쿼리와 함께 사용할 수 있으며, 특정 조건에 따라 순위를 매기거나, 동일한 순위의 행을 그룹화할 때 유용합니다.
SQL 코드 예시:
SELECT ename, sal
FROM (
SELECT ename, sal, RANK() OVER (ORDER BY sal DESC) as rnk
FROM emp
)
WHERE rnk = 1;
5. 연습 문제
직업이 SALES
인 사원들과 동일한 급여를 받는 사원들의 이름과 급여를 출력하는 SQL 쿼리를 작성하시오.
6. 연습 문제 해답 및 테이블 표시
SELECT ename, sal
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE job='SALES');
ENAME | SAL |
---|---|
MARTIN | 1250 |
WARD | 1250 |
ALLEN | 1600 |
TURNER | 1500 |
7. 응용 문제
특정 부서에서 평균 급여보다 낮은 급여를 받는 직원들의 이름과 급여를 검색하는 SQL 쿼리를 작성하시오.
8. 응용 문제 해답 및 테이블 표시
SELECT ename, sal
FROM emp
WHERE sal < (SELECT AVG(sal) FROM emp WHERE deptno = 10);
ENAME | SAL |
---|---|
CLARK | 2450 |
MILLER | 1300 |
9. 전자상거래 업계에서 쓰일 수 있는 경우 예측
전자상거래 업계에서 다중행 서브쿼리는 다음과 같은 상황에서 유용하게 쓰일 수 있습니다:
- 특정 고객이 구매한 상품들과 동일한 가격대의 다른 상품을 추천할 때.
- 특정 카테고리에서 평균보다 높은 가격을 가진 상품들을 찾을 때.
10. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
- 특정 상품보다 비싼 가격을 가진 상품들을 출력하시오.
SELECT product_name, price
FROM products
WHERE price > (SELECT MAX(price) FROM products WHERE product_id IN (101, 102));
- 특정 고객이 구매한 상품들과 동일한 가격대의 다른 상품들을 추천하시오.
SELECT product_name, price
FROM products
WHERE price IN (SELECT price FROM purchases WHERE customer_id = 1001);
11. 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성
PRODUCT_NAME | PRICE |
---|---|
Product X | 120 |
Product Y | 150 |
Product Z | 130 |
위의 예시에서 특정 상품 ID 101, 102에 해당하는 상품 가격보다 높은 가격을 가진 다른 상품들이 검색될 것입니다.