Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 연산자메서드
- EC2
- 파이썬 #python #class #클래스 #상속
- 파이썬 #python #file #i/o #input #output
- jsonb
- 파이썬 #python #함수 #function
- 약수 수하기
- 파이썬 #python #Comprehension
- 파이썬 #python #lambda #람다
- Git
- 사용자정의예외
- aw3
- 민감 정보 관리
- aws
- 프로그래머스
- 파이썬 #python #filter #map #reduce
- redis
- docker
- spring boot
- 파이썬 #python #예외처리 #exception
- PostgreSQL
- 파이썬 #python #os #os.path #glob
- 파이썬 #python #모듈 #module #import #random #time #calendar #sys
- 파이썬 #python #가변매개변수 #키워드가변매개변수 #args #kwargs
- 파이썬 #python #전역변수 #지역변수 #eval
- 파이썬 #python #enumerate
- 배포
- 파이썬기본문법 #파이썬 #python
- 파이썬 #python #지역함수
- 파이썬 #python #docstring
Archives
- Today
- Total
Yeonnnnny
[2과목] 2-13. TOP N QUERY 본문
■ TOP N QUERY
- 페이징 처리를 효과적으로 수행하기 위해 사용
- 전체 결과에서 특정 N개 추출
- ex) 성적 상위자 3명
■ TOP-N 행 추출 방법
- ROWNUM
- RANK
- FETCH
■ ROWNUM
- 출력된 데이터 기준으로 행 번호 부여
- 절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없음 (=연산 불가)
- 첫 번째 행이 증가한 이후 할당되므로 '>'연산 사용 불가 (0은 가능)
ex) ROWNUM 의 출력 형태
select rownum, emp.*
from emp
where sal>=1500;
ex) ROWNUM의 잘못된 사용
select *
from emp
where rownum>1;
※ 크다 조건 혹은 '=' 연산자 단독 전달 불가능함
ex) ROWNUM의 올바른 사용
select empno, ename, deptno, sal
from emp
where rownum<=5;
- EQAUL 비교 시 작다(<)와 함께 사용하면 1부터 순서대로 뽑을 수 있기 때문에 출력 가능함
- 정렬 순서에 따라 출력되는 ROWNUM이 달라짐
ex) emp 테이블에서 급여가 높은 순서대로 상위 5명의 직원 정보 출력
select *
from (select * from emp order by sal desc)
where rownum <=5
order by sal desc;
※ ROWNUM이 결정되기 전에 먼저 데이터 정렬 순서를 바꿔 놓는 방법
ex) emp 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원정보 출력
select *
from (select rownum as rn, A.*
from(select * from emp order by sal desc) A) B
where rn between 4 and 6
order by sal desc;
→ 서브퀴리를 통해 얻은 결과에 ROWNUM을 다시 부여하여 새로운 테이블인 것처럼 사용(인라인 뷰)
** RANK 함수 사용
select *
from (select emp.* , rank() over(order by sal desc) as rn from emp) A
where rn between 4 and 6
order by sal desc;
■ FETCH 절
- 출력될 행의 수를 제한하는 절
- ORACLE 12C 이상부터 제공(이전버전에는 ROWNUM 주로 사용)
- SQL-Server 사용 가능
- ORDER BY 절 뒤에 사용 (내부 파싱 순서도 ORDER BY 뒤)
select
from
where
group by
having
order by
offset n {row | rows}
fetch {first | next} n {row | rows} only;
- offset : 건너뛸 행의 수 (ex) 성적 높은 순 1등 제외, 나머지 3명)
- n : 출력할 행의 수
- fetch : 출력할 행의 수를 전달하는 구문
- first : offset을 쓰지 않았을 때 처음부터 n행 출력 명명
- next : offset을 사용했을 경우 제외한 행 다음부터 n행 출력 명령
- row | rows : 행의 수에 따라 하나일 경우는 단수, 여러 값이면 복수형(특별히 구분하지 않아도 됨)
ex) emp에서 sal 순서대로 상위 5명
select empno, ename, job, sal
from emp
order by sal desc fetch first 5 rows only;
ex) emp 테이블에서 급요가 높은 순서대로 4~6번째 해당하는 직원정보 출력
select *
from emp
order by sal desc
offset 3 row
fetch next 3 rows only;
'SQLD' 카테고리의 다른 글
[2과목] 2-15. PIVOT과 UNPIVOT (1) | 2024.03.08 |
---|---|
[2과목] 2-14. 계층형 질의 (0) | 2024.03.07 |
[2과목] 2-12. 윈도우 함수 (0) | 2024.03.07 |
[2과목] 2-11. 그룹 함수 (1) | 2024.03.06 |
[2과목] 2-10. 집합 연산자 (2) | 2024.03.06 |