摘要:在本教學中,您將學習如何使用 SQL LIMIT
子句來限制查詢返回的行數。
SQL LIMIT 子句簡介
要限制 select 語句返回的行數,您可以使用 LIMIT
和 OFFSET
子句。
以下顯示 LIMIT
& OFFSET
子句的語法
SELECT
column_list
FROM
table1
ORDER BY column_list
LIMIT row_count OFFSET offset;
Code language: SQL (Structured Query Language) (sql)
在這個語法中
LIMIT row_count
決定查詢返回的行數(row_count
)。OFFSET offset
子句會跳過offset
行,然後才開始返回行。
OFFSET
子句是可選的。如果省略它,查詢將從 SELECT
子句返回的第一行開始,返回 row_count 行。
當您使用 LIMIT
子句時,務必使用 ORDER BY
子句,以確保結果集中行的順序。
並非所有資料庫系統都支援 LIMIT
子句。因此,LIMIT
子句僅在某些資料庫系統中可用,例如 MySQL、PostgreSQL、SQLite、Sybase SQL Anywhere 和 HSQLDB。如果您使用 SQL Server,則可以使用 SELECT TOP
來代替。
SQL LIMIT 子句範例
我們將使用 範例資料庫 中的 employees
表格來示範 LIMIT & OFFSET
子句。

以下語句返回 employees
表格中所有行,並依 first_name
欄位排序。
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name;
Code language: SQL (Structured Query Language) (sql)

以下範例使用 LIMIT 子句來返回 SELECT 子句返回的結果集中的前 5 行。
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name
LIMIT 5;
Code language: SQL (Structured Query Language) (sql)

以下範例同時使用 LIMIT
和 OFFSET
子句,以返回從第 4 行開始的 5 行。
SELECT
employee_id, first_name, last_name
FROM
employees
ORDER BY first_name
LIMIT 5 OFFSET 3;
Code language: SQL (Structured Query Language) (sql)

在 MySQL 中,您可以使用 LIMIT & OFFSET
子句的較短形式,如下所示
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name
LIMIT 3 , 5;
Code language: SQL (Structured Query Language) (sql)
使用 SQL LIMIT 取得具有最高或最低值的 N 行
您可以使用 LIMIT
子句來取得具有最高或最低值的 N 行。例如,以下語句取得薪水最高的 5 名員工。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
ORDER BY
salary DESC
LIMIT 5;
Code language: SQL (Structured Query Language) (sql)

首先,ORDER BY
子句會依薪水降序排序員工,然後 LIMIT
子句會限制查詢返回 5 行。
若要取得薪水最低的 5 名員工,則會改為依薪水升序排序員工。

取得具有第 N 個最高值的行
假設您必須取得公司中薪水第二高的員工。為此,您可以使用 LIMIT OFFSET
子句,如下所示。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
ORDER BY
salary DESC
LIMIT 1 OFFSET 1;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
子句會依薪水降序排序員工。而 LIMIT 1 OFFSET 1
子句會取得結果集中的第二行。
此查詢假設每位員工的薪水都不同。如果有兩位員工的薪水相同,則此查詢會失敗。
此外,如果您有兩位或更多員工的薪水都是第二高,查詢只會傳回第一個。
若要解決這個問題,您可以先使用以下語句取得第二高的薪水。
SELECT DISTINCT
salary
FROM
employees
ORDER BY salary DESC
LIMIT 1 , 1;
Code language: SQL (Structured Query Language) (sql)

然後將結果傳遞給另一個查詢
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary = 17000;
Code language: SQL (Structured Query Language) (sql)

如果您了解 子查詢,您可以將這兩個查詢合併成一個查詢,如下所示
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary = (SELECT DISTINCT
salary
FROM
employees
ORDER BY salary DESC
LIMIT 1 , 1);
Code language: SQL (Structured Query Language) (sql)
摘要
- 使用 LIMIT & OFFSET 子句來限制查詢返回的行數。
- LIMIT & OFFSET 不是 SQL 標準。