반응형
서브쿼리(Subquery)는 SQL에서 하나의 쿼리 안에 포함된 또 다른 쿼리를 말합니다. 일반적으로 메인 쿼리(Main Query)에서 사용하는 데이터를 제공하거나 조건을 설정하기 위해 사용됩니다. 서브쿼리는 괄호 ( )로 감싸며, SELECT, INSERT, UPDATE, DELETE 쿼리의 일부로 활용할 수 있습니다.
서브쿼리의 특징과 활용
- 종속적 서브쿼리(Dependent Subquery)
메인 쿼리의 결과에 의존하며, 메인 쿼리의 각 행에 대해 실행됩니다. - 독립적 서브쿼리(Independent Subquery)
메인 쿼리와 독립적으로 실행되어 결과를 제공합니다. - 사용 위치
- SELECT 절: 계산하거나 생성된 값을 반환할 때
- FROM 절: 임시 테이블 역할로 사용
- WHERE 절: 조건으로 활용
서브쿼리의 기본 구조
형식:
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 [연산자] (서브쿼리);
예시 1: WHERE 절에서 서브쿼리 사용
특정 부서에 소속된 직원의 정보를 가져오는 쿼리입니다.
SELECT employee_id, employee_name, department_id
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
- 서브쿼리: department_name이 'Sales'인 department_id를 반환합니다.
- 메인 쿼리: 해당 department_id를 가진 직원을 조회합니다.
간단한 서브쿼리 예제
[예시 2: MAX 값 조건으로 서브쿼리 사용]
가장 높은 급여를 받는 직원 조회:
SELECT employee_id, employee_name, salary
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
);
- 서브쿼리: MAX(salary)로 최고 급여를 계산합니다.
- 메인 쿼리: 급여가 서브쿼리 결과와 일치하는 직원 정보를 반환합니다.
[예시 3: EXISTS 연산자와 서브쿼리]
부서에 직원이 있는 부서만 조회:
SELECT department_id, department_name
FROM departments d
WHERE EXISTS (
SELECT 1
FROM employees e
WHERE e.department_id = d.department_id
);
- 서브쿼리: 직원이 존재하는 부서의 department_id를 확인합니다.
- 메인 쿼리: 직원이 있는 부서를 반환합니다.
서브쿼리를 작성할 때 주의할 점
- 결과의 데이터 유형 일치
서브쿼리의 결과 데이터 유형이 메인 쿼리와 일치해야 합니다. 예를 들어, 숫자 필드와 문자열을 비교하면 오류가 발생합니다. - 다중 행 결과 처리
서브쿼리가 여러 행을 반환하는 경우 IN, ANY, ALL 같은 연산자를 사용해야 합니다. - SELECT employee_name FROM employees WHERE department_id IN ( SELECT department_id FROM departments WHERE location_id = 1700 );
- 성능 최적화
서브쿼리는 종종 실행 시간이 길어질 수 있으므로 필요에 따라 조인을 사용해 대체하거나, 인덱스를 적절히 활용하세요.
결론
서브쿼리는 SQL에서 데이터를 세부적으로 필터링하거나 조건을 정의하는 데 매우 유용합니다. 단순한 쿼리에서 복잡한 데이터 추출까지 활용할 수 있으므로, 다양한 예제를 연습하며 이해도를 높이는 것이 중요합니다. 서브쿼리의 원리를 숙지하면 더 효율적이고 직관적인 SQL 작성이 가능합니다.
반응형
'Database' 카테고리의 다른 글
오라클 UNION, UNION ALL, INTERSECT, MINUS 사용법 (0) | 2024.12.03 |
---|---|
오라클 다중 행 서브쿼리와 단일 행 서브쿼리 비교 (0) | 2024.12.03 |
오라클 DB에서 SELF JOIN과 CROSS JOIN 이해하기 (0) | 2024.12.03 |
오라클 DB에서 JOIN 개념 이해하기: INNER JOIN과 OUTER JOIN (0) | 2024.12.03 |
오라클 집계 함수: COUNT, SUM, AVG (0) | 2024.12.03 |