반응형
오라클에서 서브쿼리란 쉽게 말해,
하나의 쿼리 문장 안에 또 다른 쿼리 문장이 들어있는 것을 말합니다.
서브쿼리 사용 시 주의사항
- 서브 쿼리를 괄호로 감싸서 사용해야 한다.
- 서브 쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다.
- 단일 행 비교 연산자는 서브 쿼리 결과가 반드시 1건 이하여야 한다.
- 복수 행 비교 연산자는 서브쿼리의 결과 개수와 상관없다.
- 서브 쿼리에는 'ORDER BY'절을 사용하지 못한다.(ORDER BY 절은 메인쿼리에서만 사용 가능)
서브쿼리 사용 가능 위치
- SELECT 뒤
- FROM 뒤
- WHERE 뒤
- HAVING 뒤
- ORDER BY 뒤
- INSERT VALUES 뒤
- UPDATE SET 뒤
거의 다 사용 가능하다..
서브쿼리 종류
- 비연관/연관 서브 쿼리
- 비연관 서브 쿼리(Un-Correlated)
: 서브 쿼리가 메인 쿼리 컬럼을 가지고 있지 않은 형태
메인 쿼리에 값을 제공하기 위한 목적으로 주로 사용 - 연관 서브 쿼리(Correlated)
: 서브 쿼리가 메인 쿼리 컬럼을 가지고 있는 형태
일반적으로 메인 쿼리가 먼저 수행되고 읽힌 데이터와 서브 쿼리의 데이터가
조건이 맞는지 확인하고자 할 때 주로 사용
- 비연관 서브 쿼리(Un-Correlated)
- Single Row/Multi Row/Multi Column 서브쿼리
- Single Row(단일 행) 서브쿼리
: 서브쿼리의 실행 결과가 항상 1건 이하
단일 행 비교 연산자와 함께 쓰인다.
cf) 단일 행 비교 연산자 = {<, <=, >, >=, <>} - Multi Row(다중 행) 서브쿼리
: 서브쿼리의 실행 결과가 여러 건인 서브쿼리
다중 행 비교 연산자와 함께 쓰인다
cf) 다중 행 비교 연산자 = {IN, ALL, ANY, SOME, EXISTS} - Multi Column(다중 컬럼) 서브쿼리
: 서브쿼리의 실행 결과로 여러 컬럼이 나오는 서브쿼리
메인쿼리의 조건절에서 여러 컬럼을 동시에 비교 가능
서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.
- Single Row(단일 행) 서브쿼리
단일 행 서브 쿼리
- 가장 일반적이며 단순한 형태
- 서브쿼리의 결과가 단일 행인 경우
- 예제 : TEMP 테이블에서 연봉이 가장 많은 직원의 ROW를 찾아,
동일한 연봉을 받는 직원의 사번과 성명을 읽어오자
다중 행 서브 쿼리
- IN, ANY, ALL, EXISTS 등의 연산 시에 사용 가능한 서브 쿼리
- 단일 행 서브 쿼리와 달리 서브쿼리 결과가 여러 건이 나올 수 있음
- 예제 : TEMP 테이블과 TDEPT 테이블을 활용해 직원 중 인천에 근무하는 직원의 사번과 성명을 읽어오자
다중 컬럼 서브 쿼리
- 다중 컬럼 서브 쿼리는 서브 쿼리 결과로 나오는 행이 여러 컬럼인 경우
- 보통 PRIMARY KEY 컬럼이 두 개 이상인 경우에 KEY 값을 묶어서 비교하기 위해 자주 사용
- 예제 : TDEPT의 부서 코드와 BOSS_ID 컬럼을 사용해 두 개의 컬럼이
TEMP의 부서코드와 사번에 일치하는 사람의 사번과 성명을 읽어오자
연관 서브 쿼리(Correlated)
- 서브 쿼리 내에 메인쿼리 칼럼이 사용되는 서브쿼리
- 예제 : TEMP 테이블을 활용하여 직원 중 자신의 연봉이 자신이 속한
직급의 평균 연봉보다 높은 직원의 사번과 성명을 읽어오자
그밖에 위치에서 사용되는 서브 쿼리
- SELECT 절에 서브 쿼리 사용
- SELECT 절에 사용되는 서브 쿼리는 스칼라 서브쿼리(Scalar Subquery)라 한다.
- 스칼라 서브쿼리는 한 행, 한 컬럼만을 반환한다.
- 예제 : EMP 테이블에서 부서별로 평균 급여보다 높은 급여를 받는 사원의 이름과 연봉,
그리고 부서별 평균 연봉을 스칼라 서브쿼리를 사용해 알아보자
- FROM 절에 서브쿼리 사용
- FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다.
- 인라인 뷰는 테이블 명이 올 수 있는 곳에서 사용할 수 있다.
- 예제 : EMP 테이블에서 부서별로 평균 급여보다 높은 급여를 받는 사원의 이름과 연봉,
그리고 부서별 평균연봉을 인라인뷰를 사용해 알아보자
- 이외에도 HAVING 절, UPADTE문의 SET 절, INSERT문의 VALUES 절 등에서 사용 가능하다.
반응형
'내가 공부하려고 올리는 > DB' 카테고리의 다른 글
오라클 - 계층형 쿼리(Hierachical Select) 알아보기 (0) | 2021.11.17 |
---|---|
오라클 - ROWNUM 쉽게 알아보기 (0) | 2021.11.17 |
오라클 - MIN 함수 실습(서브쿼리 대신 하기) (0) | 2021.11.16 |
오라클 - 조인(JOIN) 정리해보기 (0) | 2021.11.16 |
오라클 - 날짜와 숫자를 문자로 나타내는 법 (0) | 2021.11.16 |
댓글