220428
실제 컬럼이 아닌데 컬럼처럼 행동하는 객체
SELECT문에서 행번호를 부여한다.
-- 각각 비교해보세요.
select
name, buseo, -- 컬럼(속성) > output > 객체의 특성에 따라 다른 값을 가진다.
rownum, -- 의사 '컬럼' > output > 컬럼의 모습이나 특성과 가장 유사함.
substr(name, 2), -- 함수 > input + output > 객체의 특성에 따라 다른 값을 가진다.
sysdate, -- 함수 > output > 모든 레코드가 동일한 값을 가진다. 너나할거 없이 모두 같은 값
'상수' -- 상수 > 모든 레코드가 동일한 값을 가진다. 너나할거 없이 모두 같은 값
from tblInsa;
-- 게시판 > 페이지
-- 1페이지 > rownum between 1 and 20
-- 2페이지 > rownum between 21 and 40
-- !!1부터 순차적으로 결과를 가지고 오는것만 가능!!
select name, buseo, rownum from tblInsa where rownum = 1;
select name, buseo, rownum from tblInsa where rownum <= 5;
select name, buseo, rownum from tblInsa where rownum = 10; -- x
select name, buseo, rownum from tblInsa where rownum > 5; -- x
select name, buseo, rownum -- 2. 소비 > 1에서 이미 할당된 숫자를 rownum 표현을 통해서 가져온다. > 여기서 rownum 생성하는거 X
from tblInsa; -- 1. 생성 > from절 실행되는 순간 모든 레코드의 rownum이 할당된다.
select name, buseo, rownum -- 3. 소비
from tblInsa -- 1. 생성
where rownum = 1; -- 2. 조건 > 1에서 생성된 번호를 조건으로 검색
-- where절의 영향을 받아 reindexing을 한다.(*************) > 이것때문에 불가능
select name, buseo, rownum -- 3. 소비
from tblInsa -- 1. 생성
where rownum = 3; -- 2. 조건 > 1에서 생성된 번호를 조건으로 검색
-- rownum 쿼리당 1번씩 실행.
-- 아래의 절에서는 rownum 2개, rnum - 서브쿼리, rownum - 외부쿼리
select
name, buseo, basicpay,
rownum, -- B절의 행번호
rnum
from (select -- B절
name, buseo, basicpay,
rownum as rnum -- A절 실행될 때 할당된 행번호
from tblInsa -- A절
order by basicpay desc)
where rownum <= 3; -- 하나의 테이블이라고 생각
-- rnum(고정), rownum(계산)
select name, buseo, basicpay, rnum, rownum
from (select
name, buseo, basicpay,
rownum as rnum
from (select
name, buseo, basicpay
from tblInsa
order by basicpay desc)) -- rnum 고정시키기 위해서
where rnum >=3 and rnum <=7;
이것만 이해하면 ok ★★★
-- 고객 명단 > 페이지 단위 출력 > 10명씩
select * from tblAddressBook;
-- 1. 원하는 정렬 > order by한 쿼리는 rownum 쓸모 없음
select * from tblAddressBook order by name;
-- 2. 1을 인라인 뷰로 생성 + rownum 생성 + 별칭 사용
select a.*, rownum as rnum from (select * from tblAddressBook order by name) a;
-- 3. 2를 인라인 뷰로 생성 + 사용 (rnum 고정)
select * from (select a.*, rownum as rnum from (select * from tblAddressBook order by name) a)
where rnum between 1 and 10;
select * from (select a.*, rownum as rnum from (select * from tblAddressBook order by name) a)
where rnum between 11 and 20;
select * from (select a.*, rownum as rnum from (select * from tblAddressBook order by name) a)
where rnum between 21 and 30;
-- 반복적으로 사용할거면 뷰 생성
create or replace view vwAddressBook
as
select a.*, rownum as rnum from (select * from tblAddressBook order by name) a;
select * from vwAddressbook where rnum between 31 and 40;
rownum은 From절에서 생성, where절에서 reindexing