SQL TOP / MySQL LIMIT 子句

在本教程中,您將學習如何從表中檢索指定的記錄數(shù)。

限制結(jié)果集

在某些情況下,您可能不需要返回查詢的所有行,例如,如果您只想檢索最近加入該組織的前10名員工,或者按分數(shù)獲得前3名學生,等等。

要處理這種情況,在SELECT語句中使用SQL可以使用TOP的子句。但是,該TOP子句僅被SQL Server和MS Access數(shù)據(jù)庫系統(tǒng)支持。

MySQL提供了一個等效的LIMIT子句,而Oracle為SELECT語句提供ROWNUM子句,以限制查詢返回的行數(shù)。

SQL TOP語法

SQL TOP子句用于限制返回的行數(shù)。其基本語法為:

SELECT TOP number?|?percent column_list FROM table_name;

在這里,column_list是用逗號分隔的要獲取其值的數(shù)據(jù)庫表的列名或字段名的列表(例如nameage,country等)。讓我們看看它是如何工作的。

假設我們在數(shù)據(jù)庫中有一個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)表中收入最高的前三名雇員。

-- Syntax for SQL Server Database  
SELECT TOP 3 * FROM employees
ORDER BY salary DESC;

返回的結(jié)果集如下所示:

+--------+--------------+------------+--------+---------+
| 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 |
+--------+--------------+------------+--------+---------+

如果只想檢索行的百分比而不是固定的行數(shù),那么可以在TOP子句的固定值之后使用PERCENT關鍵字。小數(shù)值被四舍五入到下一個整數(shù)值(例如,1.5四舍五入到2)。

以下語句返回收入最高的30%的雇員。

-- SQL Server數(shù)據(jù)庫的語法
SELECT TOP 30 PERCENT * FROM employees
ORDER BY salary DESC;

上述查詢返回的結(jié)果集將如下所示:

+--------+--------------+------------+--------+---------+
| 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)表中收入最高的前三名雇員

-- MySQL 數(shù)據(jù)庫的語法
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 3;

執(zhí)行后,您將獲得如下輸出:

+--------+--------------+------------+--------+---------+
| 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子句一起使用。 否則,您可能無法獲得理想的結(jié)果。

在LIMIT子句中設置行偏移

LIMIT子句接受可選的第二個參數(shù)。

當指定了兩個參數(shù)時,第一個參數(shù)指定要返回的第一行的偏移量,即起點,而第二個參數(shù)指定要返回的最大行數(shù)。初始行的偏移量是0(不是1)。

因此,如果要找出薪水第三高的員工,可以執(zhí)行以下操作:

-- MySQL數(shù)據(jù)庫的語法
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

執(zhí)行上述命令后,結(jié)果集中將僅獲得一條記錄:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清