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 |