반응형
-- 번호는 안붙어있지만 순위는 매겨져있음
SELECT ename, sal
FROM emp
ORDER BY sal desc;
내림차순으로 정렬된 데이터 옆에
순위를 매기고 싶다.
이때 ROWNUM을 사용한다.
하드 디스크에 있는 데이터를
FROM emp로 퍼올리면
데이터를 하나씩 꺼내며
메모리에 올린다.
하나씩 꺼내 올리기 때문에
rownum이 3보다 작은것들은 찾을 수 있다.
-- 하나씩 꺼내기때문에 찾을 수 있음
SELECT ename, sal, rownum
FROM emp
WHERE rownum < 3;
하지만 바로 3을 찾으면
1과 2를 모르기 때문에 찾을 수 없다.
실행해봐도 아무런 결과값이 없을 것이다.
-- rownum이 동작(번호 생성)하는 시점은 프로젝션 할 때이다.
-- 1, 2를 모르니까 3도 모르는 것이다.
-- 어차피 이렇게 쓰지도 않음 !!!
SELECT ename, sal, rownum
FROM emp
WHERE rownum > 3;
rownum은 자바의 연결 리스트와 비슷하다.
1번이 누구인지 모르므로
3번도 찾을 수 없는 것이다.
-- FROM이 들고있는 rownum을 사용하려면 아래와 같이 별칭을 쓴다
SELECT ename, sal, R1
FROM(
SELECT ename, sal, rownum R1
FROM emp
ORDER BY sal desc
);
데이터베이스에서 뷰는 가짜를 의미한다.
뷰는 저장장치내에 물리적으로 존재하지는 않지만
사용자에게 있는것처럼 간주된다.
임시적인 작업을 위한
용도로 활용된다.
-- 인라인뷰, 데이터베이스에서 뷰는 가짜를 의미함
SELECT ename, sal, rownum
FROM(
SELECT ename, sal
FROM emp
ORDER BY sal desc
);
-- student 테이블에 키 순위를 구하고 5~8위 출력
SELECT name, height, rank
FROM(
SELECT e1.*, rownum rank
FROM(
SELECT name, height
FROM student
ORDER BY height desc
) e1
)
WHERE rank >= 5 AND rank <= 8;
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형