서브쿼리와 조인에 대해

KUN·2025년 3월 25일

서브쿼리의 유형

서브쿼리는 사용되는 위치에 따라 여러 가지로 분류할 수 있습니다.

서브쿼리 유형설명예제
FROM 서브쿼리테이블처럼 동작하여 임시 데이터셋을 생성FROM (SELECT ...) AS alias
SELECT 서브쿼리개별 열의 값을 계산하여 반환 (스칼라 서브쿼리)SELECT (SELECT MAX(salary) FROM employees) AS max_salary
WHERE 서브쿼리특정 조건을 만족하는 데이터 필터링WHERE salary > (SELECT AVG(salary) FROM employees)
HAVING 서브쿼리그룹 조건 필터링HAVING SUM(sales) > (SELECT AVG(total_sales) FROM yearly_sales)

추가적인 서브 쿼리 종류

서브쿼리 종류설명예시
스칼라 서브쿼리하나의 값을 반환하는 서브쿼리. 주 쿼리에서 비교하거나 계산에 사용.SELECT name FROM employees WHERE salary = (SELECT MAX(salary) FROM employees)
인라인 뷰 (Inline View)서브쿼리를 FROM 절에 사용하여 가상의 테이블처럼 취급.SELECT dept, AVG(salary) FROM (SELECT department, salary FROM employees) AS subquery GROUP BY dept
상관 서브쿼리외부 쿼리의 값을 참조하는 서브쿼리. 일반적으로 WHERE 절에서 사용.SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees e WHERE e.department = employees.department)
다중 값 서브쿼리여러 값을 반환하며, IN 절과 함께 사용됨.SELECT name FROM employees WHERE department IN (SELECT department FROM employees WHERE salary > 80000)
복합 서브쿼리여러 개의 값을 반환하고, 주로 EXISTS 또는 NOT EXISTS와 함께 사용.SELECT name FROM employees e WHERE EXISTS (SELECT * FROM departments d WHERE d.dept_id = e.department_id)

조인(JOIN) vs 서브쿼리(SUBQUERY) 비교

데이터베이스에서 여러 테이블을 결합하는 방법으로 조인(JOIN)서브쿼리(SUBQUERY)가 있습니다.
두 방법은 각기 장단점이 있으며, 상황에 따라 적절히 선택해야 합니다.

조인과 서브쿼리의 차이점

비교 항목조인(JOIN)서브쿼리(SUBQUERY)
정의여러 테이블을 직접 결합하여 하나의 결과 집합 생성하나의 쿼리 안에서 다른 쿼리를 중첩하여 실행
사용 위치FROM 절에서 사용하여 테이블을 결합SELECT, WHERE, HAVING, FROM 등에서 사용 가능
성능대량 데이터 처리 시 성능이 좋음 (인덱스 활용 가능)데이터가 적을 때는 간단하지만, 큰 데이터셋에서는 느려질 수 있음
가독성테이블 관계가 명확해 가독성이 높음단순한 경우는 가독성이 좋으나, 복잡해질수록 이해하기 어려울 수 있음
응용 사례여러 테이블을 동시에 조회할 때 적합단일 값 조회, 조건 필터링, 가상 테이블 생성 등에 적합
예제sql SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.id; sql SELECT name FROM employees WHERE department_id = (SELECT id FROM departments WHERE department_name = 'IT');
FROM 절 서브쿼리 예제sql SELECT * FROM (SELECT name, salary FROM employees WHERE department_id = 1) AS dept_1_employees; sql SELECT dept_1_employees.name, dept_1_employees.salary FROM (SELECT name, salary FROM employees WHERE department_id = 1) AS dept_1_employees;

정리

  • 조인(JOIN)은 여러 테이블을 한 번에 결합하여 데이터를 조회할 때 적합합니다.
  • 서브쿼리(SUBQUERY)FROM 절에서 가상 테이블을 만들거나 조건을 동적으로 생성하는 데 유용합니다.
  • 성능이 중요한 경우 조인(JOIN)을 우선 고려하는 것이 일반적입니다.
profile
배우노라, 실험하노라, 기록하노라

0개의 댓글