개발 지식/[DBMS] Oracle

[Oracle] 서브쿼리(1) - 서브쿼리의 개념과 특징

devGSP 2022. 6. 2. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

서브쿼리의 개념과 특징

 

서브쿼리(Subquery)의 개념

 

하나의 SQL 문 안에 포함되어 있는 또 다른 SQL문

 

 

서브쿼리의 예시

 

만약 SCOTT의 봉급(SAL)보다 봉급이 높은 직원들을 출력하고 싶다고 가정하자. 그러면 아래의 쿼리를 통해 SCOTT의 봉급을 구할 것이다.

SELECT SAL
  FROM EMP
 WHERE ENAME = 'SCOTT';

sq1_q1

 

그렇게 봉급을 확인한 뒤에, 다시 쿼리문을 아래와 같이 작성할 것이다.

SELECT ENAME, SAL
  FROM EMP
 WHERE SAL > 3000;

 

이제 이 과정을 아래에 정리해 보자.

Q1. SCOTT의 SAL을 알려 줘!
A1. SCOTT의 SAL은 3000이야.
Q2. 그러면 이제 SAL이 3000보다 높은 직원을 알려 줘!
A2. SAL이 3000보다 높은 직원은 ...

그리고 우리는 정리된 과정을 보고 이런 의문을 가질 것이다.애초에 질문을 이렇게 하면 되잖아?

Q. SCOTT보다 SAL이 높은 직원을 알려 줘!
A. SCOTT보다 SAL이 높은 직원은 ...

간단한 예시를 가정했기 때문에 별것 아닌 것처럼 느낄 수도 있겠지만, 프로그래밍에 불필요한 과정이 존재한다는 것은 좋지 않은 프로그래밍이라고 할 수 있다.위의 예시에서는 아래와 같은 쿼리문으로 과정을 줄일 수 있다.

SELECT *
  FROM EMP
 WHERE SAL > (SELECT SAL
                FROM EMP
               WHERE ENAME = 'SCOTT');

sq1_q2

 

 

서브쿼리의 특징

 

1. 서브쿼리는 연산자와 같은 비교 또는 조회 대상의 오른쪽에 놓이며 괄호 ()로 묶어서 사용
2. 특수한 몇몇 경우를 제외한 대부분의 서브쿼리에서는 ORDER BY절을 사용할 수 없음
3. 서브쿼리의 SELECT절에 명시한 열은 메인쿼리의 비교 대상과 같은 자료형과 같은 개수로 지정해야 함. 즉 메인쿼리의 비교 대상 데이터가 하나라면 서브쿼리의 SELECT절 역시 같은 자료형인 열을 하나 지정해야 함
4. 서브쿼리에 있는 SELECT문의 결과 행 수는 함께 사용하는 메인쿼리의 연산자 종류와 호환 가능해야 함. 예를 들어 메인쿼리에 사용한 연산자가 단 하나의 데이터로만 연산이 가능한 연산자라면 서브쿼리의 결과 행 수는 반드시 하나여야 함.

반응형