[sql] 서브쿼리를 사용한 데이터 필터링
일부 쿼리에는 외부 쿼리의 결과를 기반으로 내부 쿼리를 실행하는 서브쿼리(subquery) 가 필요합니다. 서브쿼리를 사용하면 복잡한 조건을 만족하는 데이터를 필터링할 수 있습니다. 경우에 따라 서브쿼리 와 조인을 대체하여 사용할 수도 있습니다. 이 글에서는 서브쿼리를 사용하여 데이터 필터링하는 방법을 알아보겠습니다.
단일 행 서브쿼리
서브쿼리 를 사용하여 단일 행을 반환하는 예시를 살펴보겠습니다. 아래는 employees
테이블에서 최고 급여를 받는 직원의 이름과 급여를 조회하는 예시입니다.
SELECT employee_name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
위 쿼리 에서, 외부 쿼리는 employees
테이블에서 직원의 이름과 급여를 선택하고, 내부 쿼리는 employees
테이블에서 가장 높은 급여를 조회합니다. 내부 쿼리의 결과는 외부 쿼리의 조건에 사용되어 결과 집합을 필터링합니다.
다중 행 서브쿼리
이제 서브쿼리 가 다중 행을 반환하는 경우에 대해 알아봅시다. 아래는 orders
테이블에서 최근 주문한 고객의 주문 수를 조회하는 예시입니다.
SELECT customer_id
FROM orders
WHERE order_date = (SELECT MAX(order_date) FROM orders);
위 쿼리 에서, 내부 쿼리는 orders
테이블에서 가장 최근 주문일자를 찾습니다. 이후 외부 쿼리는 내부 쿼리의 결과를 활용하여 해당 주문일자에 주문한 고객을 반환합니다.
서브쿼리를 활용한 데이터 필터링
서브쿼리를 활용하면 복잡한 필터링을 간단하게 할 수 있습니다. 다양한 상황에서 서브쿼리 를 유연하게 활용하여 데이터를 필터링할 수 있습니다. 이를 통해 데이터베이스 쿼리의 효율성을 높일 수 있습니다.
참고 자료:
- MySQL 공식 문서: https://dev.mysql.com/doc/
- SQL Server 공식 문서: https://docs.microsoft.com/en-us/sql/