서브쿼리란?
다른 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중쿼리
'Oracle 기본 개념' 카테고리의 다른 글
Oracle - 트랜잭션이란 무엇인가 (0) | 2022.11.21 |
---|---|
Oracle - DML (0) | 2022.11.20 |
Oracle 함수의 모든 것 - 그룹함수 (0) | 2022.11.13 |
Oracle 함수의 모든 것 - 단일 행 함수 (0) | 2022.11.09 |
Oracle이 Miracle이 되는 그 날까지 - SQL문 (0) | 2022.11.08 |