본문 바로가기

Oracle 기본 개념

Oracle - 서브쿼리

728x90

 

 

 

 

 

서브쿼리란?
다른 select절에 내장된 select 문장



테이블 자체의 데이터에 의존하는 조건으로
테이블의 행을 검색할 필요가 있을 때 유용하다

 

 

 

다음의 예시를 통해 서브쿼리가 어떻게 쓰이는지 보자

first_name이 'Nancy'인 사람의 급여보다 많은 급여를 받는 사람의 first_name과 salary 출력

 

 

 

 


 

서브쿼리 사용할 때 반드시 지켜야 할 사항들

 

괄호로 둘러싸야 한다

비교 연산자의 오른쪽에 있어야 한다

order by 포함할 수 없다 ( where절, 스칼라 쿼리(단일값) )

⚠️인라인 뷰는 order by 사용 가능

 


 

 

 

단일 행 서브쿼리

 

 

 

 

단일행 연산자를 사용하는 서브쿼리는 반드시 한 개의 행 또는 0개의 행을 반환해야 함

where절에서 서브쿼리가 두 개의 행 이상 한다면 설명하는 다중 행 서브쿼리 연산자 이용해야 함

 

 

 

 

다중 행 서브쿼리

 

 

 

위의 예시가 오류가 나는 이유는 where절에 작성된 서브쿼리는 다중 행의 결과를 도출하는데

column 데이터와 비교하는 연산자는 단일 행 연산자를 사용하고 있기 때문에 오류가 발생하기 때문이다

 

 

따라서 다음의 다중 연산자를 사용해야 한다

 

any랑 all은 헷갈리니까 정확하게 알아두자

 

 

 

 

               How? 어떻게 사용하는 걸까?

 

                1) ANY 

 

                      = 'David'라는 이름을 갖고 있는 사원 중 가장 적은 급여를 받는 사원보다

                          많은 급여를 받는 사원의 이름과 급여 출력 (4800보다 많은 급여를 받는 사람 출력)

             

 

 

 

 

 

                 2) IN

 

                       = 'David'라는 이름을 갖고 있는 사원들과 같은 부서에 있는

                           사원들의 이름과 부서번호와 직무를 출력

 

 

 

         스칼라 서브쿼리

 

            스칼라 서브쿼리는 SELECT절에 사용하는 서브쿼리를 말한다

            이 쿼리는 조인을 수행할 시 조인할 행의 수를 줄여 성능을 향상시킬 수 있다

 

 

          1) 스칼라 서브쿼리 사용

 

 

 

 

 

          2) 조인 사용

 

 

 

 두 가지 방법을 사용해본 결과 cost를 확인해보면

스칼라 서브쿼리를 사용했을 때 실행에 있어서 더 효율적인 것을 알 수 있다

 

 

 

 

 

인라인 뷰 ( Inline view )

 

     인라인 뷰는  from절에 서브쿼리가 온 것을 말한다

     서브쿼리를 from절에 사용해 하나의 테이블 또는 뷰처럼 사용할 수 있다

 

 

     How? 어떻게 사용하는 걸까?

 

 

 


 

⭐ rownum에 대해 다시 한 번 짚고 갑시다

 

 

 

rownum은 일련번호를 붙여 차후에 정리할 때 편하려고 사용하는데 이는 조회가 무조건 첫 행부터만 가능하다

그렇담 중간 번호를 전혀 조회를 못 하는 것인가? 그건 아니다! 서브쿼리를 여러 번 사용하면 가능하다

 

 

 

3중쿼리