코딩하는 문과생

[SQL] 11. DDL(3) 본문

프로그래밍/SQL

[SQL] 11. DDL(3)

코딩하는 문과생 2020. 1. 23. 11:44

# 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 함수

  • 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