SQL LIMIT

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

SQL LIMIT 子句簡介 #

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

以下是 LIMITOFFSET 子句的語法:

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 子句僅在某些資料庫系統中可用,例如 MySQLPostgreSQLSQLite、Sybase SQL Anywhere 和 HSQLDB。

如果您使用 SQL Server,可以改用 SELECT TOP

SQL LIMIT 子句示例 #

我們將使用示例資料庫中的 employees 表來演示 LIMIT 子句的用法。

employees_table

限制返回的行數 #

以下查詢使用 LIMIT 子句返回按名字排序的前五名員工。

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 行開始返回五行。

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

檢索具有最高或最低值的前 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)

試一試

SQL LIMIT top 5 highest salary

查詢工作原理

  • 首先,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)

試一試

輸出

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)

試一試

輸出

 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 子句指定的行數之前跳過一些行。

資料庫 #

測驗 #

本教程是否有幫助?
© .