■ SUBQUERY
- SQL 문 안에 SQL 문 또 있는 것
- () 안에 넣어 표현해야 함
- 메인 쿼리 실행 전 한 번만 실행됨
1. 단일행 서브쿼리
- 서브 쿼리 결과 한 개의 행, 한 개의 열
2. 다중행 서브쿼리
- 서브 쿼리 결과 여러 개의 행, 한 개의 열
- IN, NOT IN, ANY, ALL 사용 가능
3. 다중열 서브쿼리
- 서브 쿼리 결과 한 개의 행, 여러 개의 열
4. 다중행 다중열 서브쿼리
- 서브 쿼리 결과 여러 개의 행, 여러 개의 열
-- 다중행 서브쿼리
SELECT EMP_ID, EMP_NAME, DEPT_CODE, '사수' AS "구분"
FROM EMPLOYEE
WHERE EMP_ID IN (
SELECT DISTINCT MANAGER_ID
FROM EMPLOYEE
WHERE MANAGER_ID IS NOT NULL
);
■ 인라인 뷰
- 메인 쿼리 FROM 절에 서브쿼리 사용하는 것
- 서브 쿼리 결과를 테이블 대신 사용함
SELECT ROWNUM, A.EMP_NAME, A.SALARY
FROM (
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC
) A
WHERE ROWNUM <= 5;
■ WITH
- 서브 쿼리에 이름 붙여주고 인라인 뷰 대신 사용하는 것
- 동일 서브쿼리의 중복 작성 피할 수 있음
WITH TOPN_SAL AS (
SELECT NVL(DEPT_CODE, '부서 없음') AS "부서코드",
AVG(NVL(SALARY, 0)) AS "평균급여"
FROM EMPLOYEE
GROUP BY DEPT_CODE
ORDER BY "평균급여" DESC
)
SELECT 부서코드, ROUND(평균급여)
FROM TOPN_SAL
WHERE ROWNUM <= 3;
■ RANK 함수
- 데이터 순위 함수
1. RANK() OVER(정렬 기준) : 동일 순위 있을 경우 다음 등수 건너뜀 (순위 1224557)
2. DENSE_RANK() OVER(정렬 기준) : 동일 순위 있어도 다음 등수 건너뛰지 않음(순위 1223445)
'국비과정 > Oracle' 카테고리의 다른 글
| 국비 34일차 - [DDL] 외래 키 삭제룰, 서브 쿼리 이용한 테이블 생성, ALTER (0) | 2022.05.14 |
|---|---|
| 국비 33일차 - [DDL] CREATE, DROP, 제약조건(NOT NULL, UNIQUE, CHECK, PRIMARY KEY FOREIGN KEY) (0) | 2022.05.12 |
| 국비 31일차 - [JOIN] OUTER JOIN, CROSS JOIN, NON EQU JOIN, SELF JOIN, 다중 JOIN (0) | 2022.05.10 |
| 국비 30일 차 - [평가] 데이터베이스 구현 (0) | 2022.05.09 |
| 국비 29일 차 - [GROUP BY & HAVING, JOIN] GROUPING SETS, INNER JOIN (0) | 2022.05.09 |
댓글