본문 바로가기
Database

오라클 서브쿼리란 무엇인가?

by 굿센스굿 2024. 12. 3.
반응형


서브쿼리(Subquery)
는 SQL에서 하나의 쿼리 안에 포함된 또 다른 쿼리를 말합니다. 일반적으로 메인 쿼리(Main Query)에서 사용하는 데이터를 제공하거나 조건을 설정하기 위해 사용됩니다. 서브쿼리는 괄호 ( )로 감싸며, SELECT, INSERT, UPDATE, DELETE 쿼리의 일부로 활용할 수 있습니다.


서브쿼리의 특징과 활용

  1. 종속적 서브쿼리(Dependent Subquery)
    메인 쿼리의 결과에 의존하며, 메인 쿼리의 각 행에 대해 실행됩니다.
  2. 독립적 서브쿼리(Independent Subquery)
    메인 쿼리와 독립적으로 실행되어 결과를 제공합니다.
  3. 사용 위치
    • 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'
);
  1. 서브쿼리: department_name이 'Sales'인 department_id를 반환합니다.
  2. 메인 쿼리: 해당 department_id를 가진 직원을 조회합니다.

간단한 서브쿼리 예제

[예시 2: MAX 값 조건으로 서브쿼리 사용]

가장 높은 급여를 받는 직원 조회:

SELECT employee_id, employee_name, salary
FROM employees
WHERE salary = (
    SELECT MAX(salary)
    FROM employees
);
  1. 서브쿼리: MAX(salary)로 최고 급여를 계산합니다.
  2. 메인 쿼리: 급여가 서브쿼리 결과와 일치하는 직원 정보를 반환합니다.

[예시 3: EXISTS 연산자와 서브쿼리]

부서에 직원이 있는 부서만 조회:

SELECT department_id, department_name
FROM departments d
WHERE EXISTS (
    SELECT 1
    FROM employees e
    WHERE e.department_id = d.department_id
);
  1. 서브쿼리: 직원이 존재하는 부서의 department_id를 확인합니다.
  2. 메인 쿼리: 직원이 있는 부서를 반환합니다.

서브쿼리를 작성할 때 주의할 점

  1. 결과의 데이터 유형 일치
    서브쿼리의 결과 데이터 유형이 메인 쿼리와 일치해야 합니다. 예를 들어, 숫자 필드와 문자열을 비교하면 오류가 발생합니다.
  2. 다중 행 결과 처리
    서브쿼리가 여러 행을 반환하는 경우 IN, ANY, ALL 같은 연산자를 사용해야 합니다.
  3. SELECT employee_name FROM employees WHERE department_id IN ( SELECT department_id FROM departments WHERE location_id = 1700 );
  4. 성능 최적화
    서브쿼리는 종종 실행 시간이 길어질 수 있으므로 필요에 따라 조인을 사용해 대체하거나, 인덱스를 적절히 활용하세요.

결론

서브쿼리는 SQL에서 데이터를 세부적으로 필터링하거나 조건을 정의하는 데 매우 유용합니다. 단순한 쿼리에서 복잡한 데이터 추출까지 활용할 수 있으므로, 다양한 예제를 연습하며 이해도를 높이는 것이 중요합니다. 서브쿼리의 원리를 숙지하면 더 효율적이고 직관적인 SQL 작성이 가능합니다.

반응형