pseudo.sql

성혜·2024년 2월 20일
0

Oracle

목록 보기
21/26
post-thumbnail

의사 컬럼, Pseudo column

: 실제 컬림이 아닌데 컬럼처럼 행동하는 객체

rownum
: 행번호
: 시퀀스 객체 상관 x
: 테이블의 행번호를 가져오는 역할
: 오라클 전용

select 
    name, buseo, --컬럼(속성) > 객체(레코드)의 특성에 따라 다른 값을 가진다.
    100, -- 상수 > 모든 객체(레코드)가 동일한 값을 가진다.
    substr(name,2), -- 함수 > I/O > 객체(레코드)의 특성에 따라 다른 값을 가진다.
    rownum -- 의사컬럼 
from tblInsa;

  • 실습코드

📌 1. rownum은 from절이 호출될때 계산되어진다.

select name, buseo, rownum  -- 2. 소비 > 1에서 생성된 rownum을 가져온다. (여기서x)
from tblInsa;  -- 1. from절이 실행되는 순간 모든 레코드에 rownum 할당


📌 2. where절에 의해 결과셋의 변화가 발생할 때 다시 계산되어진다.

select name, buseo, rownum     -- 3. 소비
from tblInsa                   -- 1. 할당
where rownum = 1;              -- 2. 조건

-- 1번이 아니면 다 안나옴
-- 3이니 물어보고 아니면 1번이 사라지고 다시 2번이 1번으로 다시 인덱싱됨 ... 무한반복
select name, buseo, rownum     -- 3. 소비
from tblInsa                   -- 1. 할당
where rownum = 3;              -- 2. 조건

💡 해결방안 = 서브쿼리

-- 급여가 5~10등까지 가져오시오.
select name, basicpay, rnum1, rnum2, rownum as rnum3 from
(select name, basicpay, rnum1, rownum as rnum2 from
    (select name, basicpay, rownum as rnum1
    from tblInsa --여기서 rownum이 생성되기 때문에 정렬할때도 변하지 않음 
    order by basicpay desc))
    where rnum2 between 5 and 10; --서브쿼리로 인해 rnum2가 고정됨
profile
하루를 정리하고 기록합니다.

0개의 댓글