본문 바로가기
DB & SQL

My SQL 변수선언(ROWNUM)

by pms93 2023. 1. 11.

MySQL에서는 Oracle과는 다르게 ROWNUM()을 사용할 수 없다.

하여 ROWNUM을 변수로서 선언하여 사용해야 한다.

 

변수선언

SET명령어와 함께 단어 앞에 @를 붙이면 변수로서 사용하겠다는 의미가 된다.

SET @ROWNUM = value
or
SET @ROWNUM := value

 

SET외의 명령문에서 '='는 대입연산자로 취급된다. 하여 = 앞에 :를 붙여주면 된다.

SELECT @ROWNUM := @ROWNUM + 1
FROM (SELECT @ROWNUM := 0)R

SELECT @ROWNUM := @ROWNUM + '1'
FROM (SELECT @ROWNUM := 0)R
-- 문자열로 연산을 시도해도 정상 실행된다.

SELECT @ROWNUM := @ROWNUM++
FROM (SELECT @ROWNUM := 0)R
-- 혹시나 해서 해봤는데 안된다.

FROM절을 보면 괄호 내에서 SELECT문을 통해 ROWNUM변수를 선언/초기화 하고있다.

'R'이라는 별칭도 붙여주고 있는데 중첩Query로 인해 파생된 table로 취급되기 때문에 별칭을 지정하지 않으면 정상 실행되지 않는다.( 별칭은 편한대로 지정하면 된다. R로 지은 특별한 이유같은건 없다. )

 

위 예제는 ROWNUM을 적용할 가상 데이터가 없으므로 W3Schools의 Demo Database를 통한 예시를 첨부한다.

SELECT @ROWNUM := @ROWNUM + 1 AS rowNumber,
       CustomerName
FROM Customers,
     (SELECT @ROWNUM := 0)R

( W3Schools Demo Database 인용)

 

ROWNUM으로 ORDER BY또한 가능하다.

SELECT @ROWNUM := @ROWNUM + 1 AS rowNumber,
       CustomerName
FROM Customers,
     (SELECT @ROWNUM := 0)R
ORDER BY rowNumber DESC

( W3Schools Demo Database 인용 )

 

'DB & SQL' 카테고리의 다른 글

MySQL ANY(SOME) / ALL  (0) 2023.01.16
MySQL EXISTS / NOT EXISTS  (0) 2023.01.12
MySQL HAVING  (0) 2023.01.11
MySQL GROUP BY  (0) 2023.01.11
MySQL UNION  (0) 2023.01.05