< 서브쿼리 >
ㅇ 서브쿼리의 개념
ㅇ 서브쿼리의 위치에 따른 명칭
- SELECT문에 있는 서브쿼리 : 스칼라 서브쿼리
- FROM절에 있는 서브쿼리 : 인라인 뷰
- WHERE절에 있는 서브쿼리 : 서브쿼리
@인라인 뷰 임시적으로 생성되는 동적인 뷰이기 때문에 해당 정보가 저장되지않는다
ROWNUM과 INLINE VIEW의 특성을 이용하여 페이징 처리 등의 작업을 수행할 수 있다.
ㅇ 서브쿼리의 반환 값에 따른 서브쿼리 종류
- 단일 행 서브쿼리(Single-Row Subquery)
서브 쿼리의 실행 결과가 항상 1건 이하인 것을 의미한다
단일 행 비교 연산자에는 =, <, <=, >, >=, <>이 있다
- 다중 행 서브쿼리(Multiple-Row Subquery)
서브쿼리의 결과가 여러 행일 때를 의미한다
다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다
- IN(서브쿼리)
서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미
- 비교연산자 ALL(서브쿼리)
메인쿼리는 서브쿼리 결과 값의 모든 값을 만족해야하므로 비교연산자 <,>올 때 다른값 반환한다
서브쿼리의 값이 1,2,3 일 때 비교연산자 > 일 때 서브쿼리는 3의 값으로 비교 된다
- 비교연산자 ANY(서브쿼리)
메인쿼리는 서브쿼리의 결과 값들 중 어떤 값이라도 만족하면 되므로 비교연산자 <,>올 때 다른값 반환한다
서브쿼리의 값이 1,2,3 일 때 비교연산자 > 일 때 서브쿼리는 1의 값으로 비교 된다
- EXISTS (서브쿼리)
EXISTS는 존재하는지 여부를 확인하여 정보를 조회하는 경우사용된다, 즉 필요한 정보는
메인쿼리에 정보가 존재하지만 필요한 조건에 해당하는 다른 테이블에 있을 때 사용한다
그래서 항상 연관 서브 쿼리로 사용
- 다중 컬럼 서브쿼리(Multi-Column Subquery) :
서브 쿼리의 실행결과로 여러 칼럼을 반환한다
메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야한다
메인 쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다
다중 행 비교 연산과 같은 의미를 가지고 있으며 동시 비교가 가능하다
- HAVING 절 서브쿼리
그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해서 사용한다.
ㅇ 스칼라 서브쿼리(Scala Subquery)
- SELECT문에서 사용하는 서브쿼리로 1행만 반환
ㅇ 상호연관 서브쿼리(Correlated Subquery)
- 메인쿼리의 값을 서브쿼리가 사용하고, 서브쿼리의 값을 받아서 메인쿼리가 계산하는 구조의 쿼리
'IT_Web > Oracle' 카테고리의 다른 글
Oracle 비교, 논리, 산술, 합성연산자 문법 (0) | 2020.02.26 |
---|---|
Oracle GROUP BY & HAVING 절 활용 문제 (0) | 2020.02.26 |
Oracle GROUP BY & HAVING 절 특징 (0) | 2020.02.26 |
Oracle 집계함수 문법 (0) | 2020.02.26 |
Oracle 공집합에대한 NVL 함수 사용법 (0) | 2020.02.25 |