English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL TOP / MySQL LIMIT Klausel

In diesem Tutorial werden Sie lernen, wie Sie bestimmte Zeilen aus einer Tabelle abrufen können.

Beschränkung des Ergebnissatzes

在某些情况下,您可能不需要返回查询的所有行,例如,如果您只想检索最近加入该组织的前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是用逗号分隔的要获取其值的数据库表的列名或字段名的列表(例如nameagecountry等)。让我们看看它是如何工作的。

假设我们在数据库中有一个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;

返回的结果集如下所示:

+--------+--------------+------------+--------+---------+
| 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%的雇员。

-- SQL Server数据库的语法
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)表中收入最高的前三名雇员

-- MySQL 数据库的语法
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子句一起使用。 否则,您可能无法获得理想的结果。

Setzen Sie den Zeilenabstand im LIMIT-Ausdruck fest

Der LIMIT-Ausdruck akzeptiert einen optionalen zweiten Parameter.

Wenn zwei Parameter angegeben sind, gibt der erste Parameter die Anzahl der Zeilen an, die als Ausgangspunkt zurückgegeben werden sollen, und der zweite Parameter gibt die maximale Anzahl der Zeilen an, die zurückgegeben werden sollen. Der Ausgangspunkt der Zeile ist 0 (nicht1)

Daher können Sie, um den dritthöchsten bezahlten Mitarbeiter zu finden, die folgenden Aktionen ausführen:

-- MySQL-Datenbank-Syntax
SELECT * FROM employees 
ORDER BY salary DESC LIMIT 2, 1;

Nachdem Sie den obigen Befehl ausgeführt haben, wird nur ein Eintrag im Ergebnissatz erhalten:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+