JOIN 없이도 가능하다? SQL에서 서브쿼리로 해결하는 3가지 실무 상황
SQL에서 데이터를 합치기 위해 가장 먼저 떠오르는 키워드는 JOIN입니다. 하지만 모든 상황에서 JOIN이 꼭 필요한 것은 아닙니다. 실무에서는 JOIN을 쓰기 복잡하거나 성능상 불리할 때, 서브쿼리(Subquery)를 이용해 문제를 해결하기도 합니다. 이번 글에서는 JOIN 없이 서브쿼리만으로 해결할 수 있는 3가지 실무 상황을 소개합니다.
1. 특정 조건에 해당하는 값만 가져올 때
예를 들어 각 사원의 부서 이름을 출력하고 싶은데, 특정 부서만 필터링하고 싶다면 JOIN 없이도 다음과 같이 서브쿼리로 처리할 수 있습니다.
SELECT emp_name,
(SELECT dept_name
FROM department d
WHERE d.dept_id = e.dept_id)
AS dept_name
FROM employee e
WHERE e.dept_id IN (10, 20);
JOIN을 사용하지 않고도 서브쿼리로 필요한 부서명을 함께 출력할 수 있습니다.
2. 조건 비교를 위해 필요한 보조 데이터를 가져올 때
각 제품의 가격이 전체 평균보다 높은 제품만 찾고 싶다면, 아래와 같이 서브쿼리를 WHERE 절에 활용할 수 있습니다.
SELECT product_name, price
FROM product
WHERE price > (SELECT AVG(price) FROM product);
이처럼 전체 집계 결과와 비교할 때도 서브쿼리를 사용하면 JOIN 없이 해결할 수 있습니다.
3. 최근 거래 내역 등 특정 조건의 1건만 가져올 때
각 고객의 최근 주문 내역을 보고 싶다면, 관련 테이블을 JOIN하기보다 상관 서브쿼리를 사용할 수 있습니다.
SELECT c.customer_id,
(SELECT order_date
FROM orders o
WHERE o.customer_id = c.customer_id
ORDER BY order_date DESC
FETCH FIRST 1 ROW ONLY)
AS latest_order
FROM customer c;
이 방식은 고객 수가 많아도 간결하고 효율적인 쿼리를 작성할 수 있게 해줍니다.
JOIN은 강력한 도구지만, 서브쿼리는 구조를 단순화하거나 불필요한 조인을 줄이는 데 유용하게 쓰일 수 있습니다. 실무에서는 복잡한 조인보다 오히려 서브쿼리로 명확하게 표현하는 것이 유지보수나 성능 측면에서 더 나은 선택이 되는 경우도 많습니다.
#SQL #서브쿼리 #JOIN #실무팁 #쿼리작성 #DB초보 #SQL기초
'SQL 기초 정리' 카테고리의 다른 글
CASE WHEN 구문의 활용법 – 조건 분기와 표현식을 동시에 해결하는 방법 (0) | 2025.04.11 |
---|---|
COUNT(*)와 COUNT(컬럼명)의 차이 – 결과는 비슷해도 의미는 다르다 (0) | 2025.04.11 |
DISTINCT vs GROUP BY – 결과는 같아도 목적은 다르다 (0) | 2025.04.11 |
WHERE 절과 HAVING 절, 헷갈리는 이유와 실무 기준 정리 (0) | 2025.04.11 |
LEFT JOIN 결과가 예상과 다를 때? 누락된 데이터의 진짜 원인 (0) | 2025.04.11 |