서브쿼리(Subquery)란?
- 하나의 쿼리에 포함된 또 다른
SELETE문을 의미
- 서브쿼리는 괄호로 감싸야함
- 주로 데이터 조회, 필터링, 계산 등 다양한 상황에서 활용
서브쿼리 종류
스칼라 서브쿼리
- 서브쿼리 결과로 반드시 하나의 행만을 반환
SELECT 절에서 컬럼값으로 사용
- 데이터의 양이 많을수록 실행속도가 느려지기 때문에 주의
SELECT employee_id,
(SELECT department_name
FROM departments
WHERE departments.department_id = employees.department_id) AS department_name
FROM employees;
SELECT employee_id, name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department_id = 10
);
인라인 뷰(Inline View)
- 메인 쿼리의
FROM 절에서 사용하는 서브쿼리
- 즉, 서브쿼리 자체가 하나의 테이블처럼 사용 되는 것 => 뷰(View)처럼 사용
- 여러 개의 컬럼이나 행을 반환할 수 있음
- 서브쿼리 결과를 별칭(alias)으로 참조해야함
SELECT department_id, AVG(salary) AS avg_salary
FROM (SELECT department_id, salary FROM employees WHERE salary > 5000) high_salary_employees
GROUP BY department_id;
중첩 서브쿼리(Nested Sub Query)
WHERE절에서 조건절의 일부로 사용하는 서브쿼리
- 즉, 메인쿼리 테이블의 컬럼값과 비교할때 주로 사용
- 인라인 뷰처럼 여러 개의 컬럼, 여러 개의 행을 반환할 수 있음
SELECT *
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
SELECT *
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 100);
SELECT e.*
FROM employees e
WHERE (e.department_id, e.location_id) IN (
SELECT department_id, location_id
FROM departments
WHERE location_id = 100
);