LIMIT
MySQL ์์ ์กฐํ ๊ฒฐ๊ณผ ํ์ ๊ฐ์๋ฅผ ์ ํํ๋ ํค์๋
LIMIT ๋ฌธ๋ฒ
LIMIT ์คํ์
, ๊ฐ์
SQL
๋ณต์ฌ
LIMIT ๊ฐ์ OFFSET ์คํ์
SQL
๋ณต์ฌ
: ์ ํํ ๋ฒ์์ ์์ ์์น๋ฅผ ์ง์ ํ ์ธ๋ฑ์ค์
๋๋ค.
์ฒซ๋ฒ์งธ ํ๋ถํฐ 10๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ
SELECT *
FROM board
LIMIT 0, 10;
SQL
๋ณต์ฌ
LIMIT ํค์๋๋ ํ์ด์ง๋ค์ด์
์ ๊ตฌํํ๊ธฐ ์ํด์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
ํ์ด์ง๋ค์ด์
์์ ์ฝ๋
-- 1ํ์ด์ง (ํ ํ์ด์ง ๋น 10๊ฐ ๋ฐ์ดํฐ)
SELECT *
FROM board
LIMIT 0, 10;
-- 5ํ์ด์ง (ํ ํ์ด์ง๋น 15๊ฐ ๋ฐ์ดํฐ)
SELECT *
FROM board
LIMIT 60, 15;
SQL
๋ณต์ฌ

ํ์ด์ง ์ฒ๋ฆฌ
ํ์ด์ง ์ฒ๋ฆฌ ์์
ํญ๋ชฉ | ์ค๋ช
|
page | ํ์ฌ ํ์ด์ง ๋ฒํธ |
rows | ํ์ด์ง๋น ๊ฒ์๊ธ ์ (ํ ํ์ด์ง์ 10๊ฐ, 15๊ฐ โฆ) |
count | ๋
ธ์ถ ํ์ด์ง ๊ฐ์ (ํ ๋ฒ์ ํ์ํ ํ์ด์ง ๊ทธ๋ฃน ์) |
total | ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์ (์ ์ฒด ๋ฐ์ดํฐ์ ์ด ๊ฐ์) |
start | ์์ ํ์ด์ง ๋ฒํธ (ํ์ฌ ํ์ด์ง ๊ทธ๋ฃน์์ ์์ ํ์ด์ง ๋ฒํธ) |
end | ๋ ํ์ด์ง ๋ฒํธ (ํ์ฌ ํ์ด์ง ๊ทธ๋ฃน์์ ๋ ํ์ด์ง ๋ฒํธ) |
first | ์ฒซ ๋ฒ์งธ ํ์ด์ง ๋ฒํธ (ํญ์ 1๋ก ๊ณ ์ ) |
last | ๋ง์ง๋ง ํ์ด์ง ๋ฒํธ (์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์์ ๋ฐ๋ฅธ ๋ง์ง๋ง ํ์ด์ง ๋ฒํธ) |
prev | ์ด์ ํ์ด์ง ๋ฒํธ (ํ์ฌ ํ์ด์ง ๋ฒํธ - 1) |
next | ๋ค์ ํ์ด์ง ๋ฒํธ (ํ์ฌ ํ์ด์ง ๋ฒํธ + 1) |
index | ๋ฐ์ดํฐ ์์ ๋ฒํธ (ํ์ด์ง์ ํด๋นํ๋ ๋ฐ์ดํฐ ์์ ์ธ๋ฑ์ค) |
ํ์ด์ง ์ฒ๋ฆฌ ๊ณต์
ํญ๋ชฉ | ๊ณต์ | ์ค๋ช
|
first | ํญ์ 1 | ์ฒซ ๋ฒ์งธ ํ์ด์ง ๋ฒํธ |
last | (total - 1) / rows + 1 | ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐํ ๋ง์ง๋ง ํ์ด์ง ๋ฒํธ |
start | ((page - 1) / count) * count + 1 | ํ์ด์ง ๊ทธ๋ฃน ๋ด์์ ์์ ํ์ด์ง ๋ฒํธ |
end | ((page - 1) / count + 1) * count | ํ์ด์ง ๊ทธ๋ฃน ๋ด์์ ๋ ํ์ด์ง ๋ฒํธ |
prev | page - 1 | ์ด์ ํ์ด์ง ๋ฒํธ |
next | page + 1 | ๋ค์ ํ์ด์ง ๋ฒํธ |
index | (page - 1) * rows | ๋ฐ์ดํฐ ์์ ์ธ๋ฑ์ค (ํ์ด์ง๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ๋ฒํธ) |
๊ฒ์ํ ์ํ ๋ฐ์ดํฐ
ํ ์ด๋ธ ์์ฑ
DROP TABLE IF EXISTS board;
CREATE TABLE board (
no INT AUTO_INCREMENT PRIMARY KEY COMMENT 'PK',
id VARCHAR(64) NOT NULL UNIQUE COMMENT 'UK',
title VARCHAR(255) NOT NULL COMMENT '์ ๋ชฉ',
writer VARCHAR(100) NOT NULL COMMENT '์์ฑ์',
content TEXT NOT NULL COMMENT '๋ด์ฉ',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '์์ฑ์ผ',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '์์ ์ผ'
) COMMENT '๊ฒ์ํ';
SQL
๋ณต์ฌ
๋ฐ์ดํฐ 1,000๊ฑด ์ถ๊ฐ
TRUNCATE TABLE board;
INSERT INTO board (id, title, writer, content)
SELECT
CONCAT('id_', LPAD(ROW_NUMBER() OVER (ORDER BY seq), 4, '0')) AS id,
CONCAT('Sample Title ', seq) AS title,
CONCAT('Writer ', seq) AS writer,
CONCAT('This is the content for sample data number ', seq, '.') AS content
FROM (
SELECT @rownum := @rownum + 1 AS seq
FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t1,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t2,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) t3,
(SELECT @rownum := 0) t4
LIMIT 1000
) seq_table;
SQL
๋ณต์ฌ