[1] 서브쿼리 이해하기
by DoctorMarvin
3 days ago
Views: 13
오늘은 실무에서 자주 사용하는 서브쿼리(Subquery)에 대해 배워보겠습니다.
🧭 1. 시작하기
SQL은 데이터를 조회하고 가공하는 도구이자, 비즈니스 문제를 해결하는 사고 도구입니다. 수업에서는 SQL의 기본 구조인 SELECT - FROM - WHERE
의 흐름을 파악하는 것이 얼마나 중요한지 강조했어요.
SELECT name, salary FROM employees WHERE department = 'Sales';
이처럼 단순한 조건문을 바탕으로, 복잡한 상황에서 서브쿼리를 통해 좀 더 유연하고 정교한 조건을 걸 수 있습니다.
🧩 2. 서브쿼리(Subquery)
서브쿼리는 쿼리 안에 또 다른 쿼리를 포함시켜 사용하는 방식으로, 다음과 같이 세 가지 주요 위치에서 활용됩니다.
🔹 2-1. WHERE 절 서브쿼리
- 단일행 서브쿼리: 하나의 값을 반환해 비교할 때 사용합니다.
SELECT name, salary FROM employees WHERE salary > ( SELECT AVG(salary) FROM employees );
→ 전체 평균 급여보다 높은 사원을 조회합니다.
- 다중행 서브쿼리:
IN
,ANY
,ALL
과 함께 여러 값을 조건에 활용합니다.
SELECT name FROM employees WHERE department_id IN ( SELECT id FROM departments WHERE location = 'Seoul' );
→ 서울에 있는 부서의 직원 목록을 조회합니다.
- 다중컬럼 서브쿼리:
(col1, col2)
형태로 여러 컬럼을 비교할 때 사용합니다.
🔹 2-2. FROM 절 서브쿼리 + WITH 문
- 테이블처럼 서브쿼리를 활용할 수 있어 지표 계산이나 중간 데이터 가공에 유용합니다.
SELECT dept, AVG(salary) as avg_salary FROM ( SELECT department as dept, salary FROM employees WHERE position = 'Manager' ) AS managers GROUP BY dept;
→ 부서별 매니저의 평균 급여를 계산합니다.
- WITH 문은 반복적으로 쓰이는 서브쿼리를 가독성 좋게 정의할 수 있는 방법이에요.
WITH high_earners AS ( SELECT name, salary FROM employees WHERE salary > 5000 ) SELECT * FROM high_earners;
🔹 2-3. SELECT 절 서브쿼리
- 특정 컬럼 옆에 추가 정보를 계산해서 붙일 때 유용합니다.
SELECT name, (SELECT department_name FROM departments WHERE departments.id = employees.department_id) AS dept_name FROM employees;
→ 직원 정보와 함께 부서 이름도 함께 조회합니다.
📝 마무리
오늘은 SQL 문장의 기본 구조를 이해하고, 서브쿼리를 통해 데이터를 보다 유연하게 다루는 방법을 배웠습니다. 처음에는 조금 낯설 수 있지만, 실제 데이터를 분석할 때 굉장히 강력한 도구가 될거에요.
다음 시간에는 리텐션 분석을 통해 실전 감각을 키워볼 예정이에요 💪