LIMIT / TOP 限制筆數
不同資料庫使用不同的語法來限制查詢結果的筆數:
- MySQL / PostgreSQL:
LIMIT - SQL Server:
TOP - Oracle:
ROWNUM或FETCH
MySQL / PostgreSQL - LIMIT
SELECT column1, column2, ...
FROM table_name
LIMIT number;
取得前 5 筆資料:
SELECT * FROM customers LIMIT 5;
OFFSET 跳過前幾筆
-- 跳過前 10 筆,取得接下來的 5 筆
SELECT * FROM customers LIMIT 5 OFFSET 10;
-- 或簡寫為
SELECT * FROM customers LIMIT 10, 5;
這在分頁查詢時很實用。
SQL Server - TOP
SELECT TOP number column1, column2, ...
FROM table_name;
取得前 5 筆資料:
SELECT TOP 5 * FROM customers;
百分比
-- 取得前 10% 的資料
SELECT TOP 10 PERCENT * FROM customers;
SQL Server 2012+ 的 OFFSET FETCH
SELECT * FROM customers
ORDER BY id
OFFSET 10 ROWS
FETCH NEXT 5 ROWS ONLY;
Oracle - ROWNUM / FETCH
傳統寫法(ROWNUM):
SELECT * FROM customers
WHERE ROWNUM <= 5;
Oracle 12c+ 支援 FETCH:
SELECT * FROM customers
ORDER BY id
FETCH FIRST 5 ROWS ONLY;
常見用途
取得最新/最高的 N 筆
-- 最新的 10 筆訂單
SELECT * FROM orders
ORDER BY created_at DESC
LIMIT 10;
-- 銷售額最高的 3 個產品
SELECT * FROM products
ORDER BY sales DESC
LIMIT 3;
分頁查詢
-- 第 1 頁(每頁 20 筆)
SELECT * FROM products LIMIT 20 OFFSET 0;
-- 第 2 頁
SELECT * FROM products LIMIT 20 OFFSET 20;
-- 第 N 頁
SELECT * FROM products LIMIT 20 OFFSET (N-1) * 20;