MySQL ใช้ LIMIT สำหรับจำกัดจำนวนแถวผลลัพธ์ ใน SQL Server ใช้ OFFSET ... FETCH (SQL Server 2012+) หรือ TOP (รุ่นเก่า)
MySQL LIMIT Syntax
SELECT column_name FROM table_name LIMIT offset, row_count;
-- หรือ
SELECT column_name FROM table_name LIMIT row_count OFFSET offset;
ตัวอย่าง MySQL
SELECT id FROM limitDemo LIMIT 5 OFFSET 2;
-- ข้าม 2 แถวแรก แล้ว取 5 แถว (แถวที่ 3-7)
SQL Server Equivalent
SQL Server 2012+ (มาตรฐาน ANSI SQL)
SELECT id FROM limitDemo
ORDER BY id
OFFSET 2 ROWS FETCH NEXT 5 ROWS ONLY;
SQL Server 2008/2008 R2 (ใช้ TOP + ROW_NUMBER)
SELECT id FROM (
SELECT id, ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM limitDemo
) AS t
WHERE rn > 2 AND rn <= 7;
SQL Server ทุก Version (ใช้ TOP สำหรับหน้าแรก)
-- หน้าแรก (Top 5)
SELECT TOP 5 id FROM limitDemo ORDER BY id;
-- หน้าต่อไป ต้องใช้ Subquery
ตารางเปรียบเทียบ
| คุณสมบัติ | MySQL LIMIT | SQL Server OFFSET/FETCH |
|---|---|---|
| รองรับ Version | ทุก Version | 2012+ |
| Syntax | LIMIT offset, count | OFFSET n ROWS FETCH NEXT m ROWS ONLY |
| ต้องการ ORDER BY | ไม่บังคับ (แต่ควรมี) | บังคับ |
| Performance | ดีมาก | ดี (ต้องมี Index ให้ถูกต้อง) |
คำแนะนำ
- ใน SQL Server ต้องมี ORDER BY เสมอ เมื่อใช้ OFFSET/FETCH
- สร้าง Index บนคอลัมน์ที่ ORDER BY เพื่อประสิทธิภาพ
- หลีกเลี่ยง OFFSET มากๆ (Deep Paging) ใช้ Keyset Pagination แทน