개발 지식/[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';
그렇게 봉급을 확인한 뒤에, 다시 쿼리문을 아래와 같이 작성할 것이다.
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');
서브쿼리의 특징
1. 서브쿼리는 연산자와 같은 비교 또는 조회 대상의 오른쪽에 놓이며 괄호 ()로 묶어서 사용
2. 특수한 몇몇 경우를 제외한 대부분의 서브쿼리에서는 ORDER BY절을 사용할 수 없음
3. 서브쿼리의 SELECT절에 명시한 열은 메인쿼리의 비교 대상과 같은 자료형과 같은 개수로 지정해야 함. 즉 메인쿼리의 비교 대상 데이터가 하나라면 서브쿼리의 SELECT절 역시 같은 자료형인 열을 하나 지정해야 함
4. 서브쿼리에 있는 SELECT문의 결과 행 수는 함께 사용하는 메인쿼리의 연산자 종류와 호환 가능해야 함. 예를 들어 메인쿼리에 사용한 연산자가 단 하나의 데이터로만 연산이 가능한 연산자라면 서브쿼리의 결과 행 수는 반드시 하나여야 함.
반응형