TOP
class="layout-aside-left paging-number">
본문 바로가기
자격증/SQLD

[SQLD] TOP N Query (보강)

by 기록자_Recordian 2024. 3. 1.
728x90
반응형

해당 범위는 2024년부터 새로 추가된 범위라 내용이 많이 부족하여 내용을 추가하였습니다.

기존 내용

 

 

SQLD 2과목 SQL 활용 - TOP N 쿼리

서브쿼리 집합연산자 그룹 함수 윈도우 함수 TOP N 쿼리 계층형 질의와 셀프 조인 PIVOT 절과 UNPIVOT 절 정규 표현식 ※ 자료출처: 데이터 자격검정 협회 5. TOP N 쿼리 A. TOP N 쿼리 개요 TOP N 쿼리: 인라

puppy-foot-it.tistory.com


TOP N Query
출처: 홍쌤의 데이터 랩 유튜브

 

  • 페이징 처리를 효과적으로 수행하기 위해 사용
  • 전체 결과에서 특정 N개 추출

◆ TOP N 추출 방법

1. ROWNUM

2. RANK

3. FETCH


 ROWNUM
  • 출력된 데이터 기준으로 행 번호 부여
  • 절대적인 행 번호가 아닌 가상의 번호이므로 특정 행을 지정할 수 없음 (=연산 불가)
  • 첫번째 행이 증가한 이후 할당되므로 '>' 연산 사용 불가 ('0', '=>' 가능)
예제1. EMPLOYEES 테이블에서 급여가 높은 순서대로 상위 5명 직원 출력

 

[SQL 문]

ORACLE

 

※ 먼저 서브쿼리를 사용하여 (인라인 뷰) SALARY 에 대해 내림차순 정렬을 해놓고 상위 5개 가져옴.

 

[결과]


예제2. EMPLOYEES 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원 정보 출력

 

[잘못된 SQL 문]

 

 

※ ROWNUM 시작값 (1) 이 정의되지 않았으므로 1을 건너뛰고 그 다음 행번호에 추출 불가

 

[정답 - 1]

 

※ 서브쿼리를 통해 얻은 결과에 ROWNUM을 다시 부여하여 새로운 테이블 인것처럼 사용 (인라인 뷰)


[정답 - 2] 

 

※ 윈도우 함수의 RANK 사용


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: 건너뛸 행의 수
  • N: 출력할 행의 수
  • FETCH: 출력할 행의 수를 전달하는 구문
  • FIRST: OFFSET 을 쓰지 않았을 때 처음부터 N행 출력 명령
  • NEXT: OFFSET 을 사용했을 경우 제외한 행 다음부터 N행 출력 명령
  • ROW | ROWS : 행의 수에 따라 하나일 경우 단수, 여러값이면 복수행 (특별히 구분하지 않아도 됨.)
예제1. EMPLOYEES 테이블에서 SALARY 순서대로 상위 5명의 EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY 추출하는 SQL 문 작성

 

[정답]

SQL문 실행 화면 (ORACLE)

 


예제2. EMPLOYEES 테이블에서 급여가 높은 순서대로 4~6번째 해당하는 직원의 EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY 추출하는 SQL 문 작성

 

[정답]

 

실행화면 (ORACLE)


[출처]

홍쌤의 데이터랩 유튜브 (2024 시험 범위 개정 관련 유용한 정보들이 많습니다, 강추!)

 

728x90
반응형