728x90
- ROWID: 주소로서 row가 실제로 저장되어있는 공간을 표시
- ROWNUM: 번호로서 row의 주소 순서대로 출력되어짐.
- 출력되는 행에 대해 첫 행부터 순차적인 번호를 부여 (1,2,3,...)
SELECT empno, ename, sal, rownum FROM emp;
SELECT empno, ename, rownum FROM emp WHERE rownum <= 3;
-- 문제) 가장 많은 급여를 받는사람
SELECT empno, ename, sal --실행 3
FROM emp --실행 1
WHERE ROWNUM <=3 --실행 2
ORDER BY sal DESC; --실행 4
/*
ORDER BY로 내림차순 해주었으나 ORDER BY는 마지막에 실행되기에
오름차순된 결과에서 ROWNUM이 출력된다
*/
-- 쿼리문 사용으로 다시 실행
SELECT empno, ename, sal --실행 2
FROM( SELECT empno, ename, sal FROM emp ORDER BY sal DESC) --실행 1
WHERE rownum BETWEEN 1 AND 3; --실행 3
-- 문제) 가장 오래된 사원 3명
SELECT empno, ename, hiredate
FROM (SELECT empno, ename, hiredate FROM emp ORDER BY hiredate ASC)
WHERE rownum BETWEEN 1 AND 3;
-- 문제) 급여를 4번째로 많이받는 사원부터 6번째까지
SELECT empno, ename, sal
FROM (SELECT empno, ename, sal FROM emp ORDER BY sal desc)
WHERE rownum BETWEEN 4 AND 6;
--> 조회결과 없음. rownum은 항상 1부터 1씩 증가하는 값을 카운트해야함
--> 해결: rownum을 먼저 1부터 출력하게 하고 그 결과에서 중간번호(1아닌 값)을 조회
SELECT empno, ename, sal
FROM (SELECT empno, ename, sal, rownum rb
FROM (SELECT empno, ename, sal
FROM emp ORDER BY sal desc) --1차: 정렬
) --2차: 출력된 행에 1부터 순차적인 번호를 부여
WHERE rb BETWEEN 4 AND 6;
-- 별명 부여시
WHERE salNum.rownum BETWEEN 4 AND 6;
'Web develop > SQL' 카테고리의 다른 글
[SQL/ORACLE] SEQUENCE 사용법 (+ORACLE 11g에서 사용시 설정하는법) (0) | 2019.06.15 |
---|---|
[SQL/ORACLE] 제약조건 설명 및 사용법 (NOT NULL, UNIQUE, PK, FK, CHECK) (0) | 2019.06.15 |
[SQL/ORACLE] VIEW 형식 및 사용법 (0) | 2019.06.15 |
[SQL/ORACLE] CASCADE 사용법 및 예제 (0) | 2019.06.15 |
[SQL/ORACLE] 서브쿼리 , 다중행 서브쿼리 연산자 (0) | 2019.06.15 |