SQLD 보수교육

이형석·2025년 4월 6일

오라클 공부

목록 보기
3/6

SQLD 유효기간 영구 전환을 위한 보수교육을 들었다.
그 중 메모해두고 싶은 부분만 기록으로 남긴다.


1. SQL 절의 실행 순서에 따른 별칭(alias) 사용 가능 여부

SELECT절의 alias는 ORDER BY절에선 사용할 수 있지만, WHERE 또는 HAVING 절에선 사용할 수 없다.
* SQL의 실행 순서가 다음과 같기 때문
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

2. 페이징 쿼리 3가지 방법

1. ROWNUM을 이용한 데이터 검색 최소화

  • 쿼리를 두 번 감싸줘야 함 (Oracle의 ROWNUM은 ORDER BY보다 먼저 적용되기 때문)
  • 가장 좋은 성능
    ex)
SELECT A1.*
  FROM (
	    SELECT ROWNUM AS RNUM, B1.*,
	      FROM (
		        SELECT 
                       NO
                     , NAME
		          FROM ACCOUNT
		         ORDER BY NO ASC
		       ) AS B1
	     WHERE ROWNUM <= #{endNum}
	   ) AS A1
 WHERE RNUM >= #{startNum}

2. WINDOW 함수(ROW_NUMBER()) 이용

  • ROW_NUMBER()를 사용하여 numbering 후 특정 범위 가져옴
ex)
SELECT A1.*
  FROM (
     	SELECT 
               NO
             , NAME
             , ROW_NUMBER() OVER (ORDER BY NO) AS RNUM
	      FROM ACCOUNT
	   ) AS A1
 WHERE RNUM BETWEEN #{startNum} AND #{endNum}
 ORDER BY NO ASC

3. OFFSET n ROWS FETCH NEXT m ROWS 구문 사용 (오라클12c 부터)

  • 가장 간편하고 쿼리 가독성이 높음
ex) 
SELECT 
       NO
     , NAME
  FROM ACCOUNT
 ORDER BY NO ASC
OFFSET #{offsetNum} ROWS FETCH NEXT #{fetchNum} ROWS ONLY
profile
금융IT 개발자

0개의 댓글