SQL LIMIT

摘要:在本教學中,您將學習如何使用 SQL LIMIT 子句來限制查詢返回的行數。

SQL LIMIT 子句簡介

要限制 select 語句返回的行數,您可以使用 LIMITOFFSET 子句。

以下顯示 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 子句僅在某些資料庫系統中可用,例如 MySQLPostgreSQLSQLite、Sybase SQL Anywhere 和 HSQLDB。如果您使用 SQL Server,則可以使用 SELECT TOP 來代替。

SQL LIMIT 子句範例

我們將使用 範例資料庫 中的 employees 表格來示範 LIMIT & OFFSET 子句。

employees_table

以下語句返回 employees 表格中所有行,並依 first_name 欄位排序。

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM
    employees
ORDER BY 
	first_name;Code language: SQL (Structured Query Language) (sql)

試試看

SQL LIMIT example

以下範例使用 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)

試試看

SQL LIMIT 5 example

以下範例同時使用 LIMITOFFSET 子句,以返回從第 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)

試試看

SQL LIMIT OFFSET example

在 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)

試試看

SQL LIMIT top 5 highest salary

首先,ORDER BY 子句會依薪水降序排序員工,然後 LIMIT 子句會限制查詢返回 5 行。

若要取得薪水最低的 5 名員工,則會改為依薪水升序排序員工。

SQL LIMIT top 5 lowest salary

取得具有第 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)

試試看

SQL LIMIT 2nd highest salary

然後將結果傳遞給另一個查詢

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary = 17000;Code language: SQL (Structured Query Language) (sql)

試試看

SQL LIMIT 2nd highest salary example

如果您了解 子查詢,您可以將這兩個查詢合併成一個查詢,如下所示

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 標準。
本教學對您有幫助嗎?