728x90
슈도컬럼(Pseudo-Column) 이란?
- 가상컬럼이라고 하기도 하며 의사컬럼이라고도 한다.
- 오라클에서는 ROWNUM이 대표적으로 가장 많이 쓰인다.
참고 : https://blog.naver.com/zeddn2/221124792747
[SQL] 슈도컬럼이란? PSEUDO COLUMN, 가상컬럼
슈도컬럼(PSEUDO COLUMN) 가상컬럼 ROWNUM / ROWID 슈도컬럼(Pseudo-Column)이란...
blog.naver.com
select rowid, rownum, empno, ename
from emp;
select * from emp;
-- rowid가 책의 색인(index)정보
-- where deptno = 10;
-- rownum은 테이블에 저장되어있는 순서대로 순서값을 나타냄
select rowid, rownum, empno, ename
from emp
where rownum <= 5; -- 정상적으로 출력
where rownum <= 5; 라고 썼으므로 index가 5까지만 출력된다.
select rowid, rownum, empno, ename
from emp
where rownum = 5;
rowid, rownum는 emp테이블에 속해있는 컬럼이 아니다.
rownum은 emp테이블로부터 1행(레코드)씩 읽어서 화면에 출력할 때 number를 부여한다.
where rownum = 5; 이 조건이 거짓이면 rownum값을 부여하지 않는다.
select rowid, rownum, empno, ename
from emp
where rownum = 1; -- 여기에는 1만 올 수 있다.
rownum의 기본 값은 1이다.
select deptno, trunc(AVG(sal)) avg_sal
from emp
group by deptno
order by avg_sal desc;
< from 절에 서브쿼리를 사용 >
위의 값 중에서 평균 급여가 가장 높은 상위 Top2개 부서를 출력하시오
select deptno, trunc(AVG(sal)) avg_sal
from emp
where rownum <= 2 -- 우리가 원하는 결과 출력이 안됨
group by deptno
order by avg_sal desc;
< 해결방법 >
select *
from (select deptno, trunc(AVG(sal)) avg_sal
from emp
group by deptno
order by avg_sal desc)
where rownum <= 2;
- from절에 서브쿼리를 작성한 내용을 뷰 또는 인라인 뷰라고 한다.
- 일반적으로 from 다음에는 테이블 명이 오는데 서브쿼리도 사용 가능하다.
select a.*
from (select deptno, trunc(AVG(sal)) avg_sal
from emp
group by deptno
order by avg_sal desc) a
where a.rownum <= 2; -- 오류발생(rownum은 a테이블의 소속이 아니다.)
rowid, rownum은 그냥 오라클에서 제공해주는 컬럼이므로 어떤 테이블에 소속돼있는 것이 아니다.
rownum은 어떤 테이블에 종속된 컬럼이 아니다. (오라클에서 제공해주는 슈도컬럼)
select a.*
from (select deptno, trunc(AVG(sal)) avg_sal
from emp
group by deptno
order by avg_sal desc) a
where rownum <= 2; -- 이렇게 쓰면 됨
이렇게 작성하면 정상적으로 출력된다.
728x90
'Programming > Database' 카테고리의 다른 글
[Database] 다중행 서브쿼리 (0) | 2021.08.20 |
---|---|
[Database] 서브쿼리 (0) | 2021.08.20 |
댓글