728x90
인라인 뷰(INLINE-VIEW)
FROM절에서 서브쿼리 제시
-- 보너스 포함 연봉이 3000만원 이상인 사원들 조회
SELECT EMP_ID
, EMP_NAME
, (SALARY + (SALARY * NVL(BONUS, 0))) * 12 "보너스 연봉"
, DEPT_CODE
FROM EMPLOYEE
WHERE (SALARY + (SALARY * NVL(BONUS, 0))) * 12 >= 30000000;
-- 인라인 뷰 사용
SELECT EMP_NAME
FROM (SELECT EMP_ID
, EMP_NAME
, (SALARY + (SALARY * NVL(BONUS, 0))) * 12 "보너스 연봉"
, DEPT_CODE
FROM EMPLOYEE)
WHERE "보너스 연봉" >= 30000000;
인라인 뷰를 주로 사용하는 예
TOP-N : 데이터베이스 상에 존재하는 자료 중 최상위 몇 개 자료를 보기 위해 사용
-- 급여가 가장 높은 직원을 조회
-- 전 직원 중 급여가 가장 높은 5명
-- ROWNUM : 오라클에서 제공해주는 컬럼, 조회된 순서대로 1부터 ... 순번을 부여해 줌
SELECT ROWNUM --실행순서
, EMP_NAME
, SALARY --3
FROM EMPLOYEE --1
WHERE ROWNUM <= 5 --2
ORDER BY SALARY DESC; --4
SELECT ROWNUM
, EMP_NAME
, SALARY
FROM (SELECT EMP_NAME
, SALARY
FROM EMPLOYEE
ORDER BY SALARY DESC)
WHERE ROWNUM <= 5;
728x90
순위를 매기는 함수
SELECT절에서만 사용 가능
RANK() OVER(정렬기준)
: 공동1위가 2명이라고 한다면 그 다음 순위는 3위
DENSE_RANK() OVER
: 공동1위가 2명이라 해도 그 다음 순위는 2위
-- 급여가 높은 순서대로 순위매기기
SELECT EMP_NAME
, SALARY
, RANK() OVER(ORDER BY SALARY DESC) 순위
FROM EMPLOYEE;
SELECT EMP_NAME
, SALARY
, DENSE_RANK() OVER(ORDER BY SALARY DESC) 순위
FROM EMPLOYEE;
-- 5위까지만 조회
SELECT EMP_NAME
, SALARY
, RANK() OVER(ORDER BY SALARY DESC) 순위
FROM EMPLOYEE
WHERE RANK() OVER (ORDER BY SALARY DESC) <= 5;
-- 오류: RANK() OVER 은 SELECT절에서만 사용가능
SELECT *
FROM (SELECT EMP_NAME
, SALARY
, DENSE_RANK() OVER(ORDER BY SALARY DESC) 순위
FROM EMPLOYEE)
WHERE 순위 <= 5;
728x90
'Programming > SQL' 카테고리의 다른 글
[Oracle] DDL(데이터 정의 언어) / 테이블 생성하기(CREATE TABLE) / COMMENT ON COLUMN /자료형 (0) | 2024.02.23 |
---|---|
[Oracle] 계정생성 CREATE / 권한부여 GRANT (0) | 2024.02.20 |
[Oracle] 서브쿼리 (SUBQUERY) / 다중열 서브쿼리 / 다중행 다중열 서브쿼리 (0) | 2024.02.20 |
[Oracle] 서브쿼리 (SUBQUERY) / 다중행 서브쿼리(MULTI ROW SUBQUERY) (0) | 2024.02.20 |
[Oracle] 서브쿼리 (SUBQUERY) / 단일행 서브쿼리(SINGLE ROW SUBQUERY) (0) | 2024.02.20 |