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

限制返回的行數 #
以下查詢使用 LIMIT 子句返回按名字排序的前五名員工。
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 行開始返回五行。
SELECT
employee_id,
first_name,
last_name
FROM
employees
ORDER BY
first_name
LIMIT
5
OFFSET
3;Code language: SQL (Structured Query Language) (sql)
檢索具有最高或最低值的前 N 行 #
您可以使用 LIMIT 子句獲取具有最高或最低值的前 N 行。
例如,以下查詢檢索薪水最高的五名員工。
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子句從結果集的頂部返回五行。
要獲取薪水最低的五名員工,您只需按薪水升序對員工進行排序即可。
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
ORDER BY
salary
LIMIT
5;Code language: SQL (Structured Query Language) (sql)輸出

獲取具有第 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)輸出
employee_id | first_name | last_name | salary
-------------+------------+-----------+----------
101 | Neena | Kochhar | 17000.00Code language: SQL (Structured Query Language) (sql)查詢工作原理
ORDER BY子句按薪水降序對員工進行排序。LIMIT 1 OFFSET 1子句從結果集中獲取第二行。
此查詢的假設是每個員工的薪水都不同。如果兩名員工的薪水並列第二高,它將無法正常工作。
此外,如果有兩名或更多員工的薪水並列第二高,該查詢僅返回第一個。
要解決此問題,您可以首先使用以下語句獲取第二高的薪水:
SELECT DISTINCT
salary
FROM
employees
ORDER BY
salary DESC
LIMIT
1
OFFSET
1;Code language: SQL (Structured Query Language) (sql)結果
salary
----------
17000.00Code 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)輸出
employee_id | first_name | last_name | salary
-------------+------------+-----------+----------
101 | Neena | Kochhar | 17000.00
102 | Lex | De Haan | 17000.00Code 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
OFFSET
1
);Code language: SQL (Structured Query Language) (sql)摘要 #
- 使用
LIMIT子句來限制查詢返回的行數。 - 使用
OFFSET子句在返回LIMIT子句指定的行數之前跳過一些行。