SQLD 유효기간 영구 전환을 위한 보수교육을 들었다.
그 중 메모해두고 싶은 부분만 기록으로 남긴다.
SELECT절의 alias는 ORDER BY절에선 사용할 수 있지만, WHERE 또는 HAVING 절에선 사용할 수 없다.
* SQL의 실행 순서가 다음과 같기 때문
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
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}
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
ex)
SELECT
NO
, NAME
FROM ACCOUNT
ORDER BY NO ASC
OFFSET #{offsetNum} ROWS FETCH NEXT #{fetchNum} ROWS ONLY