문서의 이전 판입니다!
| 물리명 | 논리명 | 타입 | KEY |
|---|---|---|---|
| 일련번호 | sn | 숫자 | PK |
| 제목 | title | 문자 | |
| 내용 | content | 문자 |
-- MySQL/MariaDB & MSSQL & PostgreSQL CREATE TABLE ex_paging ( sn BIGINT NOT NULL PRIMARY KEY, title VARCHAR(100) NOT NULL, content TEXT NOT NULL ); -- Oracle/Tibero CREATE TABLE ex_paging ( sn NUMBER NOT NULL PRIMARY KEY, title VARCHAR(100) NOT NULL, content CLOB NOT NULL );
INSERT INTO ex_paging (sn, title, content) VALUES (1, '제목 1', '내용 1'); INSERT INTO ex_paging (sn, title, content) VALUES (2, '제목 2', '내용 2'); INSERT INTO ex_paging (sn, title, content) VALUES (3, '제목 3', '내용 3'); INSERT INTO ex_paging (sn, title, content) VALUES (4, '제목 4', '내용 4'); INSERT INTO ex_paging (sn, title, content) VALUES (5, '제목 5', '내용 5'); INSERT INTO ex_paging (sn, title, content) VALUES (6, '제목 6', '내용 6'); INSERT INTO ex_paging (sn, title, content) VALUES (7, '제목 7', '내용 7'); INSERT INTO ex_paging (sn, title, content) VALUES (8, '제목 8', '내용 8'); INSERT INTO ex_paging (sn, title, content) VALUES (9, '제목 9', '내용 9'); INSERT INTO ex_paging (sn, title, content) VALUES (10, '제목 10', '내용 10'); INSERT INTO ex_paging (sn, title, content) VALUES (11, '제목 11', '내용 11');
SELECT t.*, @ROWNUM AS "_total_count_", (@ROWNUM - t._rownum_ + 1) AS "_no_" FROM (SELECT p.*, @ROWNUM := @ROWNUM + 1 AS "_rownum_" FROM ( -- ↑↑↑ 페이징 쿼리 ↑↑↑ SELECT * FROM ex_paging ORDER BY sn DESC -- ↓↓↓ 페이징 쿼리 ↓↓ LIMIT 18446744073709551615 ) p , (SELECT @ROWNUM := 0) r ) t ORDER BY t._rownum_ ASC LIMIT 10 OFFSET 0 ;
-- FIXME
SELECT
t.*, ("_total_count_" - "_rownum_" + 1) AS "_no_"
FROM
(SELECT
p.*, ROWNUM AS "_rownum_", COUNT(*) OVER() AS "_total_count_"
FROM
(
-- ↑↑↑ 페이징 쿼리 ↑↑↑
SELECT
*
FROM
ex_paging
ORDER BY
sn DESC
-- ↓↓↓ 페이징 쿼리 ↓↓↓
) p
) t
WHERE
"_rownum_" BETWEEN 1 AND 10
;
SELECT t.*, (t._total_count_ - t._rownum_ + 1) AS "_no_" FROM (SELECT p.*, ROW_NUMBER() OVER() AS "_rownum_", COUNT(*) OVER() AS "_total_count_" FROM ( -- ↑↑↑ 페이징 쿼리 ↑↑↑ SELECT * FROM ex_paging ORDER BY sn DESC -- ↓↓↓ 페이징 쿼리 ↓↓ ) p ) t LIMIT 10 OFFSET 0 ;