레이블이 TopN쿼리인 게시물을 표시합니다. 모든 게시물 표시
레이블이 TopN쿼리인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 11일 토요일

오라클TopN쿼리, 상위N명구하기, 오라클12 행제한구,인라인뷰, WITH구문, ROWNUM이용(오라클학원/ORACLE학원교육)

 

오라클TopN쿼리, 상위N명구하기, 오라클12 행제한구,인라인뷰, WITH구문, ROWNUM이용(오라클학원/ORACLE학원교육)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=703 


오라클TopN쿼리, 상위N명구하기, 오라클12 행제한구,인라인뷰, WITH구문, ROWNUM이용

오라클TopN쿼리, 상위N명구하기, 오라클12 행제한구,인라인뷰, WITH구문, ROWNUM이용ORACLE SQL급여 상위 N명 구하기실습 : ORACLE 19C실습데이터 : http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=117&page=7실습 ; 사

ojc.asia


https://youtu.be/32YaMykHAbc



https://www.youtube.com/watch?v=BVeBkyIWUrU&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=33 


ORACLE SQL




급여 상위 N명 구하기


실습 : ORACLE 19C



실습데이터 : http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=117&page=7



실습 ; 사원테이블에서 급여 상위3명을 추출 하세요.


실습테이블 소개

-- 2000만건

SELECT * FROM MYEMP1;

 

-- 급여 컬럼에 생성된 인덱스 확인

SELECT   A.INDEX_NAME, A.COLUMN_NAME, B.VISIBILITY

 FROM     USER_IND_COLUMNS A, USER_INDEXES B

 WHERE  A.TABLE_NAME = 'MYEMP1'

 AND        A.INDEX_NAME = B.INDEX_NAME

 AND        A.COLUMN_NAME = 'SAL';


IDX_MYEMP1_SAL SAL VISIBLE


1. 인라인뷰 & ROWNUM 이용


-- 아래처럼 하지 마세요!
-- ORDER BY는 맨 나중에 실행됩니다.
SELECT ENAME, SAL
FROM   MYEMP1
WHERE  ROWNUM < 8
ORDER BY SAL DESC;

-- 2.5초 SAL 컬럼 인덱스를 이용못하고 MYEMP1 테이블 FULL SCAN함
SELECT *
FROM (
    SELECT ENAME, 
                   SAL
    FROM   MYEMP1
    ORDER BY SAL DESC
    ) T1
WHERE ROWNUM < 8;

-- 0초, WHERE절에 SAL 컬럼이 출현함에 따라 SAL 컬럼 인덱스를 이용함
SELECT *
FROM (
    SELECT ENAME, 
                   SAL
    FROM     MYEMP1
    WHERE  SAL > 0
    ORDER BY SAL DESC
    ) T1
WHERE ROWNUM < 8;

-- 0초, 힌트이용, ORDER BY 생략
-- SAL 컬럼 인덱스가 오름차순으로 생성되어 있어서 역순으로 스캔
SELECT *
FROM (
    SELECT /*+ INDEX_DESC(MYEMP1 IDX_MYEMP1_SAL) */ 
           ENAME, 
           SAL
    FROM   MYEMP1
    WHERE  SAL > 0
    ) T1
WHERE ROWNUM < 8;




2.ORACLE 12C 행제한구 이용



-- 2.5초 SAL 컬럼 인덱스를 이용못하고 MYEMP1 테이블 FULL SCAN함
-- 중복되는 급여가 있더라도 무조건 6개 자름
SELECT ENAME, SAL
FROM   MYEMP1
ORDER BY SAL DESC
FETCH FIRST 7 ROWS ONLY;

-- 0초, SAL 컬럼 인덱스를 이용함
-- 중복되는 급여가 있더라도 무조건 6개 자름
SELECT ENAME, SAL
FROM   MYEMP1
WHERE  SAL > 0
ORDER BY SAL DESC
FETCH FIRST 7 ROWS ONLY;

-- 0초, 오라클 힌트 이용, SAL 컬럼 인덱스를 이용함
-- ORDER BY절 생략(힌트구문 때문에 인덱스 영역에서 역순으로 이미 가져오니 생략됨)
SELECT /*+ INDEX_DESC(MYEMP1 IDX_MYEMP1_SAL) */ 
               ENAME, SAL
FROM   MYEMP1
WHERE  SAL > 0
FETCH FIRST 7 ROWS ONLY;

-- 0초, SAL 컬럼 인덱스를 이용함
-- 중복되는 급여가 있으면 모두 SELECT함
SELECT ENAME, SAL
FROM   MYEMP1
WHERE  SAL > 0
ORDER BY SAL DESC
FETCH FIRST 4 ROWS WITH TIES;



3.WITH구문과 ROWNUM 이용



-- 2.5초 SAL 컬럼 인덱스를 이용못하고 MYEMP1 테이블 FULL SCAN함
WITH A AS
  ( SELECT ENAME, SAL
    FROM   MYEMP1
    ORDER BY SAL DESC)
SELECT ENAME, SAL
FROM   A
WHERE  rownum <= 3;

-- 0초, WHERE절에 SAL 컬럼이 출현함에 따라 SAL 컬럼 인덱스를 이용함
WITH A AS
  ( SELECT ENAME, SAL
    FROM   MYEMP1
    WHERE  SAL > 0
    ORDER BY SAL DESC)
SELECT ENAME, SAL
FROM   A
WHERE  rownum <= 3;

-- 0초, 힌트이용, ORDER BY 생략
-- SAL 컬럼 인덱스가 오름차순으로 생성되어 있어서 역순으로 스캔
WITH A AS
  ( SELECT /*+ INDEX_DESC(MYEMP1 IDX_MYEMP1_SAL) */ 
           ENAME, SAL
    FROM   MYEMP1
    WHERE  SAL > 0 )
SELECT ENAME, SAL
FROM   A
WHERE  rownum <= 3;

 ​

#TopN쿼리, #상위N명쿼리, #오라클교육, #WITH구문, #인라인뷰, #행제한구문, #오라클강의, #오라클학원, #ORACLE교육, #ORACLE동영상, #SQL교육, #SQL학원, TopN쿼리, 상위N명쿼리, 오라클교육, WITH구문, 인라인뷰, 행제한구문, 오라클강의, 오라클학원, ORACLE교육, ORACLE동영상, SQL교육, SQL학원, 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...