*SQL_Oracle*

DML < SELECT > SUBQUERY(서브쿼리)

깐부로부터 2021. 11. 6. 15:00

하나의 주된 SQL문(SELECT, INSERT, UPDATE, DELET, CREATE.....)
안에 포함된 또 하나의 SELECT 문
메인 SQL문을 보조역할을 하는 쿼리문

 

서브쿼리를 이용해 노옹철씨와 같은 부서 사원들을 조회해냄

 

 

 

[서브쿼리 구분]
    

서브쿼리를 수행한 결과값이 몇행 몇열이냐에 따라서 분류
    
- 단일행 서브쿼리 : 서브쿼리를 수행한 결과값이 오로지 1개일 때
- 다중행 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행일 때
- 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 열일 때
- 다중행 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행 여러열 일 때
    
=> 서브쿼리를 수행한 결과가 몇행 몇열이냐에 따라 사용가능한 연산자도 달라짐

 

 

1. 단일행 서브쿼리 (SINGLE ROW SUBQUERY)
    서브쿼리의 조회 결과값이 오로지 1개일 때
    
    일반 연산자 사용가능(=, !=. >=, <)

 

오라클 구문으로 작성한 JOIN

 

 

ANSI구문으로 JOIN

 

 

 

 2. 다중행 서브쿼리 (MULTI ROW SUBQUERY)
    서브쿼리의 조회 결과값이 여러행일 때
    
    - IN (10, 20, 30)
    - NOT IN : 아예 없으면
    
    - > ANY : 여러개의 결과 값 중에서 하나라도 클 경우
    - < ANY : 여러개의 결과 값 중에서 하나라도 작을 경우
    - OR

 

 

 

 

 

3. 다중열 서브쿼리
조회 결과 값은 한 행이지만 나열된 컬럼수가 여러 개일 때

 

 

 

 

4. 다중행 다중열 서브쿼리
서브쿼리 조회 결과값이 여러행 여러 컬럼일 경우  

 

 

 

5. 인라인 뷰 (INLINE-VIEW)

FROM 절에 서브쿼리 제시!

서브쿼리를 수행한 결과!(REUST SET)을 테이블 대신 사용함

-->> 인라인 뷰를 주로 사용하는 예
-- TOP-N분석 : 데이터베이스 상에 존재하는 자료 중 최상위 몇 개 자료를 보기 위해 사용
-- 전 직원 중 급여가 가장 높은 5명
-- * ROWNUM : 오라클에서 제공해주는 컬럼, 조회된 순서대로 1부터 .... 순번을 부여해 줌

부서별 평균급여 TOP3 뽑기

 

 

 

6. 순위 매기는 함수

※ SELECT 절에서만 사용이 가능하다!!!

 

- RANK() OVER(정렬기준)

: 공동 1위가 2명이라고 한다면 그 다음 순위를 3위로 하겠다.


- DENSE()_RANK() OVER(정렬기준)

: 공동 1위가 2명이라고 해도 그 다음 순위는 2위로 하겠다.

 

DENSE_RANK()를 사용했기때문에 19위 두명이 나왔음에도 불구하고 다음순위는 20위가 나온다.

 

급여를 내림차순으로 정렬한 쿼리에서 1~5위까지만 뽑아내겠다

'*SQL_Oracle*' 카테고리의 다른 글

DDL <CREATE> SUBQUERY를 이용한 테이블생성  (0) 2021.11.10
DDL < CREATE >  (0) 2021.11.08
DML < SELECT > GROUP BY , HAVING , 집합 연산자  (0) 2021.11.06
DML < SELECT> JOIN  (0) 2021.11.05
DML <SELECT> 함수 - 그룹 함수  (0) 2021.11.04