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
ROWNUM으로 ORDER BY또한 가능하다.
SELECT @ROWNUM := @ROWNUM + 1 AS rowNumber,
CustomerName
FROM Customers,
(SELECT @ROWNUM := 0)R
ORDER BY rowNumber DESC
'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 |