상세 컨텐츠

본문 제목

[오라클 DB 스터디] 서브쿼리

프로그래밍 도서

by DeepinDev 2025. 2. 2. 20:27

본문

1. Sub Query가 무엇일까

하나의 쿼리 안에 또 다른 하나의 쿼리가 담겨있는 것을 말한다. 

SELECT select_list
  FROM TABLE 또는 View
 WHERE 조건 연산자 ( SELECT select_list
 				    FROM TABLE
                   WHERE 조건 );

 

MAIN 쿼리와 SUB 쿼리 ( 항상 SUB 쿼리가 먼저 실행되는 것은 아니다 )

Sub Query 작성시 유의사항

  • Sub Query 부분은 WHERE절에 연산자 오른쪽에 위치해야 하며 반드시 괄호로 묶어야 한다.
  • 특별한 경우(Top-n 분석 등)를 제외하고는 Sub Query절에 Order by절이 올수 없다.
  • 단일행 Sub Query와 다중행 Sub Query에 따라 연산자를 잘 선택해야 한다.

 2. Sub Query의 종류

2. 1. 단일행  Sub Query (Single Row Sub Query)

Sub Query의 수행 결괏값이 1개의 행만 출력되는 것을 말한다. 

단일행 Sub Query일 경우 WHERE 절에서 사용되는 연산자
Student 테이블과 department 테이블을 사용하여 'Anthony Hopkins'학생과 1전공(depno1)이 동일한 학생들의 이름과 1전공 이름을 출력한다.
professor 테이블과 department 테이블을 조회하여 'Meg Ryan'교수보다 나중에 입사한 사람의 이름과 입사일, 학과명을 출력한다.

 

Student 테이블에서 1 전공(deptno1)이 201번인 학과의 평균 몸무게보다 몸무게가 많은 학생들의 이름과 몸무게를 출력한다.

2.2 다중행 Sub Query(Multi Row Sub Query)

다중행 Sub Query란 Sub Query의 결과가 2건 이상 출력되는 것을 말한다. 

단일행 연산자 대신 다음과 같은 별도의 연산자를 활용한다. 

  • ANY, ALL은 연산자의 방향에 따라 최대값, 최소값이 달라진다. 
  • Sub Query의 결과값이 (100, 200, 300) 인 경우(예를 들어) SAL > ANY(100, 200, 300)이 되면 우변은 100(최소값)을 반환하고
  • SAL < ALL(100, 200, 300) 이 되면 우변은 100(최소값)을 반환한다

emp2 테이블을 사용하여 전체 직원 중 'Section head'직급의 최소 연봉자보다 연봉이 높은 사람의 이름과 직급, 연봉을 출력하세요. 단, 연봉 출력 형식은 아래와 같이 천 단위 구분 기호와 $표시를 하세요.
Student 테이블을 조회하여 전체 학생 중에서 체중이 2학년 학생들의 체중에서 가장 적게 나가는 학생보다 몸무게가 적은 학생의 이름과 학년과 몸무게를 출력한다.

 

Emp2 테이블과 dept2 테이블을 조회하여 각 부서별 평균 연봉을 구하고 그중에서 평균 연봉이 가장 적은 부서의 평균 연봉보다 적게 받는 직원들의 부서명, 직원명, 연봉을 출력한다.

2.3 다중컬럼 Sub Query(Multi Column Sub Query)

다중 컬럼 Sub Query란 Sub Query의 결과가 여러 컬럼인 경우를 말한다. 

주로 Primary Key를 여러 컬럼을 합쳐서 만들 경우 한꺼번에 비교하기 위해서 자주 사용한다. 

Student 테이블을 조회하여 각 학년별로 최대 몸무게를 가진 학생들의 학년과 이름과 몸무게를 출력한다.

 

관련글 더보기

댓글 영역