5_oracle_서브쿼리

study/Oracle · 2019. 11. 20. 08:45

SUBQUERY

SELECT 문장안에 포함된 또 다른 SELECT 문장

SELECT문 해석 순서

 5 : SELECT 컬럼명 AS 별칭, 계산식, 함수식
  1 : FROM 참조할 테이블명 
     + JOIN
  2 : WHERE 컬럼명 | 함수식 비교연산자 비교값
  3 : GROUP BY 그룹을 묶을 컬럼명
  4 : HAVING 그룹함수식 비교연산자 비교값
  6 : ORDER BY 컬럼명 | 별칭 | 컬럼순번 정렬방식 [NULLS FIRST | LAST];

SUBQUERY 조건

1) 메인쿼리가 실행되기 전 한번만 실행

2) 비교 연산자의 오른쪽에 기술

3) 반드시 괄호로 묶어야함

4) 서브쿼리와 비교할 항목은 반드시 서브쿼리의

SELECT한 항목의 개수와 자료형을 일치시켜야함

서브쿼리의 유형

- 단일행 서브쿼리 : 서브쿼리의 조회 결과 값의 개수가 1개인 서브쿼리

- 다중행 서브쿼리 : 서브쿼리의 조회 결과 값의 개수가 여러개인 서브쿼리

- 다중열 서브쿼리 : 서브쿼리의 SELECT절에 나열된 컬럼수가 여러개인 서브쿼리

- 다중행, 다중열 서브쿼리 : 서브쿼리 조회 결과가 여러행, 여러 컬럼을 가지는 서브쿼리

- 상관 서브쿼리 : 메인쿼리가 사용하는 테이블 값을 서브쿼리가 이용해서 결과를 만드는 서브쿼리

  메인쿼리의 테이블값이 변경되면 서브쿼리의 결과값도 바뀌게됨

- 스칼라 서브쿼리 : SELECT절에 사용되는 서브쿼리

* 서브쿼리의 유형에 따라 서브쿼리 앞에 붙는 연산자가 달라짐

★ 서브쿼리는 WHERE 절 뿐만 아니라 SELECT, FROM, HAVING 절에서도 사용가능

1. 단일행 서브쿼리

- 단일행 서브쿼리 앞에는 비교 연산자 사용
->  <, >, <=, >=, =, !=, ^=, <>

2. 다중행 서브쿼리

- 다중행 서브쿼리 앞에는 일반 비교연산자 사용 X

-> IN / NOT IN
여러 개의 결과값 중 하나라도 일치하는 값이 있다면
일치하는 값이 없다면

->  >  ANY,  < ANY
 여러 개의 결과값 중에서 하나라도 큰 / 작은 경우
 여러 개의 결과 값 중에서 
 가장 작은 값보다 크냐? / 가장 큰 값보다 작냐?

-> >  ALL,  < ALL
  여러 개의 결과값의 모든 값보다 큰/작은경우
  여러 개의 결과값의 모든 값중에서 
  가장 큰 값보다 크냐? / 가장 작은 값보다 작냐?

- EXISTS / NOT EXISTS 
  값이 존재하냐? / 존재하지 않냐?

*ROWNUM : 조회된 순서대로 1부터 번호를 매기는 컬럼

*WITH : 서브쿼리에 이름붙여주고 서브쿼리 사용시 이름을 불러 사용하게함

인라인뷰로 사용될 서브쿼리에 주로 사용됨

실행속도가 빨라지고, 메인쿼리가 간결해짐

*RANK() OVER : 동일한 순위 이후의 등수를 동일한 인원 수 만큼 건너 뛰고 계산

EX) 공동1위 2명 -> 1등 1등 3등

*DENSE_RANK() OVER : 동일한 순위 이후의 등수를 건너뛰지 않고 차례대로 증가

EX) 공동1위 2명 -> 1등 1등 2등

'study > Oracle' 카테고리의 다른 글

6_oracle_DML, DCL, TCL  (0) 2019.11.22
5_oracle_DDL(CREATE)  (0) 2019.11.21
4_oracle_JOIN  (0) 2019.11.19
3_oracle_함수2  (0) 2019.11.16
2_oracle_연산자,정렬,함수  (0) 2019.11.15