SQL TOP / MySQL LIMIT 子句
在本教程中,你將學習如何從表中檢索固定數量的記錄。
限制結果集
在某些情況下,你可能對查詢返回的所有行不感興趣,例如,如果你只想檢索最近加入組織的前 10 名員工,按分數獲得前 3 名學生,或者類似的東西。
要處理這種情況,可以在 SELECT 語句中使用 SQL 的 TOP 子句。但是,TOP 子句僅受 SQL Server 和 MS Access 資料庫系統的支援。
MySQL 提供了一個等效 LIMIT 子句,而 Oracle 為 SELECT 語句提供了限制查詢返回的行數的 ROWNUM 子句。
SQL TOP 語法
SQL TOP 子句用於限制返回的行數。它的基本語法是:
SELECT TOP number | percent column_list FROM table_name ; 
這裡,column_list 是一個逗號分隔的列表,列出了要獲取其值的資料庫表(例如,名稱, 年齡, 國家等) 的列或欄位名稱。讓我們看看它是如何工作的。
假設我們的資料庫中有一個 employees 表,其中包含以下記錄:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+
以下語句從 employees 表中返回前三名收入最高的 employees。
-- Syntax for SQL Server Database  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;
返回的結果集將如下所示:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+
如果你只想檢索行的百分比而不是固定行數,則可以選擇在 TOP 子句中的固定值之後使用 PERCENT 關鍵字。小數值向上舍入到下一個整數值(例如 1.5 舍入到 2)。
以下宣告返回收入最高的員工中的前 30%。
-- Syntax for SQL Server Database  
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;
上述查詢返回的結果集如下所示:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+
MySQL LIMIT 語法
MySQL 的 LIMIT 子句與 SQL TOP 子句的工作方式相同。它的基本語法是:
SELECT column_list FROM table_name LIMIT number ; 
以下語句從 employees 表中返回前三名收入最高的 employees。
-- Syntax for MySQL Database 
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;
執行後,你將獲得如下輸出:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+
注意: 在 SELECT 語句中,始終使用帶 ORDER BY 子句的 LIMIT 子句。否則,你可能無法獲得所需的結果。
在 LIMIT 子句中設定行偏移
LIMIT 子句接受可選的第二個引數。
指定兩個引數時,第一個引數指定要返回的第一行(即起始點)的偏移量,而第二個引數指定要返回的最大行數。初始行的偏移量是 0 (不是 1)。
因此,如果你想找出薪酬第三高的員工,你可以執行以下操作:
-- Syntax for MySQL Database 
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;
執行上述命令後,你的結果集中只會得到一條記錄:
+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+