Mysql을 쓰다 보면 Oracle처럼 rownum을 써야 하는 경우가 생깁니다.
따라서 오늘은 Mysql에서 ROWNUM의 사용 방법에 대해 소개해드리고자 합니다.
자 우선 간단한 TEST 테이블의 데이터입니다.
REG_DATE(등록 날짜)를 기준으로 오름차순을 한 경우입니다.
SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM,
T.*
FROM TEST T,(SELECT @ROWNUM := 0 ) TMP
ORDER BY REG_DATE ASC
REG_DATE(등록 날짜)를 기준으로 내림차순을 한 경우입니다.
SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM,
T.*
FROM TEST T,(SELECT @ROWNUM := 0 ) TMP
ORDER BY REG_DATE ASC
자 다음으로는 ROWNUM의 순서를 역순으로 매기는 방법입니다.
역순을 매기는 방법은 서브 쿼리를 이용하여 ROWNUM을 부여하고 이 ROWNUM으로 다시 정렬하는 방법입니다.
REG_DATE를 오름차순으로 정렬하고 이를 역순으로 출력하는 쿼리입니다.
SELECT *
FROM (SELECT
@ROWNUM := @ROWNUM + 1 AS ROWNUM,
T.*
FROM TEST T,
(SELECT @ROWNUM := 0 ) TMP
ORDER BY REG_DATE ASC)SUB
ORDER BY SUB.ROWNUM DESC
결과값을 보면 REG_DATE를 오름차순으로 ROWNUM을 매기고 이를 역순으로 출력합니다.
그리고 REG_DATE를 내림차순으로 정렬하고 역순으로 출력하는 쿼리입니다.
SELECT *
FROM (SELECT
@ROWNUM := @ROWNUM + 1 AS ROWNUM,
T.*
FROM TEST T,
(SELECT @ROWNUM := 0 ) TMP
ORDER BY REG_DATE DESC)SUB
ORDER BY SUB.ROWNUM DESC
위를 참고하시고 본인이 원하는 쓰임새를 보고 맞게 사용하시면 됩니다.
그리고 중요한 것은, 조인 연산에서도 ROWNUM을 사용할 수 있지만 우선적으로 서브 쿼리에서 ORDER BY를 통해서 정렬하신 후 ROWNUM를 매겨야 원하는 값이 나올 수 있습니다.
결론적으로 엉뚱한 연산이 안되게 하기 위해선 서브 쿼리에서 정렬을 한 후 ROWNUM을 매길 수 있도록 쿼리를 짜도록 해야 합니다.
이상입니다.
감사합니다.
'프로그래밍 > 데이터베이스[DB]' 카테고리의 다른 글
[MySQL] MySQL 다운로드 및 설치 방법(Windows10) (0) | 2020.02.28 |
---|---|
[마이바티스] For input string: "Y" 에러 해결 방법[NumberFormatException] (1) | 2019.11.26 |
[Mybatis] 마이바티스에 UUID 바로 사용하기[mysql,oracle] (0) | 2019.10.25 |
[DB] Mysql 해당 테이블 데이터만 삭제하기 (0) | 2019.05.01 |
[DB] Mysql 현재 시간을 기준으로 이전 날짜 데이터 조회하기 (0) | 2019.04.30 |