DML < SELECT > SUBQUERY(서브쿼리)
하나의 주된 SQL문(SELECT, INSERT, UPDATE, DELET, CREATE.....)
안에 포함된 또 하나의 SELECT 문
메인 SQL문을 보조역할을 하는 쿼리문
[서브쿼리 구분]
서브쿼리를 수행한 결과값이 몇행 몇열이냐에 따라서 분류
- 단일행 서브쿼리 : 서브쿼리를 수행한 결과값이 오로지 1개일 때
- 다중행 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행일 때
- 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 열일 때
- 다중행 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행 여러열 일 때
=> 서브쿼리를 수행한 결과가 몇행 몇열이냐에 따라 사용가능한 연산자도 달라짐
1. 단일행 서브쿼리 (SINGLE ROW SUBQUERY)
서브쿼리의 조회 결과값이 오로지 1개일 때
일반 연산자 사용가능(=, !=. >=, <)
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부터 .... 순번을 부여해 줌
6. 순위 매기는 함수
※ SELECT 절에서만 사용이 가능하다!!!
- RANK() OVER(정렬기준)
: 공동 1위가 2명이라고 한다면 그 다음 순위를 3위로 하겠다.
- DENSE()_RANK() OVER(정렬기준)
: 공동 1위가 2명이라고 해도 그 다음 순위는 2위로 하겠다.