본문 바로가기

Oracle/SQL

SQL 데이터 분석함수 - Row_number 출력결과 넘버링

ROW_NUMBER(출력되는결과를 원하는 컬럼별 순서대로넘버링)

row_number() over (order by sal desc) as 별칭

—> ____ 에 order by 문법을 꼭 부여해야한다.

→넘버링을 하는이유는, 어떤 출력 되는 결과의 몇번째 행을 출력 시킬때 유용하다.

예제 : row_number 데이터 분석함수는 출력되는 select 문의 결과의 행에 numbering(번호부여) 하는 함수이다.

넘버링의 장점은 : 출력되는 결과의 두번째, 세번째 등등 원하는 행을 출력,검색 할 수 있다.


select empno, ename, sal, row_number() over (order by empno asc)번호 
from emp 
where deptno= 20;

위의 식의결과에서 두번째행만 출력 하세요.

from 절에 서브쿼리를 사용해주어야한다.

→서브쿼리를 쓰게 되면, 서브쿼리가 먼저 실행된후에 메인쿼리가 실행된다.

select * 
from ( 
       select empno, ename, sal, row_number() over (order by empno asc) 번호
       from emp where deptno= 20
       ) 
where 번호 = 2;

→ 별칭을 꼭 주어야한다. 별칭 쓰지않고 row_number ~~~ 의 컬럼명을 쓰게 되면 오류

사원테이블 전체를 출력하면서 3번째행만 출력하세요

select *
from (
      select empno, ename, job, mgr, hiredate, sal,comm,deptno, 
             row_number() over (order by rowid asc)번호
      from emp 
      where deptno= 20
      )
where 번호 = 3;

→ rowid : 행의 주소 , 어느 테이블이든 다 존재한다.

→ 서브쿼리 select 절에 (*) 쓰고 싶다면? 컬럼명이 너무 많을 경우에는 다 기재하기 힘들기 때문,

select *
from ( 
       select e.*, row_number() over (order by rowid) 번호 
        from emp e
        )
where 번호 = 3;

전체 테이블을 출력하면서 같은행을 추가적으로 더 출력할때

select emp.* , deptno 
from emp;

또는

emp 에 별칭 e를 주어

select e.*, deptno
from emp e;

테이블의 모든 컬럼들을 다 출력하면서, 그옆에 기존 컬럼을 또 출력하고싶을때, 모든 컬럼을 편하게 출력할 수 있도록 [테이블.] 을 사용하거나 [테이블 별칭.] 을 쓰면 된다.