ROWNUM( 감추는 컬럼 ), 출력되는 행 제한
앞에서 배운 ROW_NUMBER 와 비슷한 기능을 갖는 함수이다.
ROW_NUMBER 함수는 : order by 절을 반드시 사용
ROWNUM 함수는 : order by 절 없이 출력되는, 행 그대로 번호를 부여할 수 있는 shadow (감춰진) 컬럼
-> 모든 테이블에 존재한다.
select rownum, empno, ename, sal
from emp;
select rownum, empno, ename, sal
from emp
where deptno = 20;
→ 부서번호가 20 번인 사원들만 출력하면서 rownum 번호를 부여해 준다.
문제 265
select rownum, empno, ename, sal
from emp
where deptno = 20
and rownum =1;
→ rownum 은 첫행만 출력되고 , 두번째 행 부터는 단일행으로 출력 할 수 없다.
이유는... Rownum 특성상 , 앞서 출력된 행을 바탕으로 다음행이 출력 되기 때문에 첫행은 기본출력이 가능하지만
첫행이 존재하지 않는 두번째행, 두번째행이 존재하지 않는 세번째행은 출력 할 수 없다.
만약 rownum 에서 2번을 출력하고싶다면 from 절에 서브쿼리 사용해야한다.
select *
from (
select rownum as 번호, empno, ename, sal
from emp
where deptno = 20
)
where 번호 = 2;
→ 반드시 from 절 서브쿼리 select 절 ROW에 별칭 을 써주어서
메인 쿼리 where 절에 별칭으로 입력해 주어야한다.
문제 266 : 통신사가 kt인 학생들의 이름, 나이, 통신사를 뽑고, 첫번째 행만 출력
select ename, age, telecom
from emp14_address
where telecom ='kt'
and rownum =1;
문제 267 : 통신사가 kt 인 학생들의 이름과 나이와 통신사를 출력하는데 출력되는 결과에서 두번째행 학생을 출력
select *
from (
select rownum as 번호, ename, age, lower(telecom)
from emp14
where telecom = 'kt'
)
where 번호 = 2;
문제 : kt 통신사를 이용하는 학생 이름,나이, 통신사와 나이순대로 출력되는 번호1~ 5번째까지만 뽑으시오
select *
from (
select ename, age, lower(telecom), row_number() over (order by age desc)번호
from emp14
where lower(telecom) = 'kt'
)
where 번호 <= 5;
'Oracle > SQL' 카테고리의 다른 글
SQL Oracle Join - Equi join 여러 테이블 조인 (공통컬럼 O) (0) | 2021.11.22 |
---|---|
SQL fetch first ___ rows only - 출력되는 행 제한시키기 (0) | 2021.11.22 |
SQL 데이터 변환 - Pivot , Unpivot (0) | 2021.11.22 |
SQL Sum + Decode 컬럼을 행으로 바꿔 출력 (0) | 2021.11.22 |
SQL 데이터 분석함수 - Row_number 출력결과 넘버링 (0) | 2021.11.22 |