코딩하는 문과생
[SQL] 11. DDL(3) 본문
# VIEW
- 가상 테이블, 선택적인 정보만 취할 수 있다.
- 베이스 테이블(Base Table)에 데이터가 존재, VIEW에는 데이터가 존재하지 않는다.
- 단일 뷰는 INSERT, UPDATE,DELETE(DML 작업)가 가능하지만, 복합뷰는 불가능하다.
CREATE OR REPLACE VIEW view_name AS Subquery ... ;
DROP VIEW view_name ;
# Top N 분석
Top N 분석은 데이터베이스 상에 있는 자료 중 최상위 몇 개의 자료를 보기 위해 사용하는 자료다.
//ROWNUM = 1인 경우는 출력되지만
//ROWNUM = 3인 경우는 출력되지 않는다.
SELECT ROWNUM, EMP_NAME, SALARY
FROM (SELECT NVL(DEPT_ID, 'N/A') AS "Did",
ROUND(AVG(SALARY), -3) AS "Davg"
FROM EMPLOYEE
GROUP BY DEPT_ID) INLV
JOIN EMPLOYEE ON ( NVL(DEPT_ID, 'N/A') = INLV."Did")
WHERE SALARY > INLV."Davg"
--ORDER BY 3 DESC;
AND ROWNUM = 1;
// 1 한선기 9000000
//**************************************************
SELECT ROWNUM, EMP_NAME, SALARY
FROM ( SELECT EMP_NAME, SALARY
FROM (SELECT NVL(DEPT_ID, 'N/A') AS "Did",
ROUND(AVG(SALARY), -3) AS "Davg"
FROM EMPLOYEE
GROUP BY DEPT_ID) INLV
JOIN EMPLOYEE ON ( NVL(DEPT_ID, 'N/A') = INLV."Did")
WHERE SALARY > INLV."Davg"
ORDER BY 2 DESC )
WHERE ROWNUM <=5;
해당 컬럼의 값이 null 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고,
null 값이 아닐경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다.
# 순위 함수: RANK() OVER, ROW_NUMBER() OVER
//RANK 부여
SELECT EMP_NAME
, SALARY
, RANK() OVER (ORDER BY SALARY DESC) AS RANK
FROM EMPLOYEE;
//****************************
//ROW_NUMBER 부여
SELECT EMP_NAME
, SALARY
, ROW_NUMBER() OVER (ORDER BY SALARY DESC) AS ROW_NUMBER
FROM EMPLOYEE;
-
RANK는 동일한 값에 동일한 순위를 부여
-
ROW_NUMBER는 동일한 값도 다른 순위를 부여
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 13. DML (0) | 2020.01.29 |
---|---|
[SQL] 12. SEQUENCE, INDEX (0) | 2020.01.23 |
[SQL] 10. DDL(2) (0) | 2020.01.23 |
[SQL] 9. DDL (0) | 2020.01.23 |
[SQL] 8. Subquery (0) | 2020.01.22 |