SQL TOP或LIMIT

结果集限制

在某些情况下,您可能只需排在前面的查询结果,例如,您只想查询成绩前3名的学生。

要处理这种情况,可以在SELECT语句中使用SQL的TOPLIMIT子句。

TOP子句用在SQL Server和MS Access里,LIMIT子句用在MySQL里,而Oracle提供了等价的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表中返回前三位薪酬最高的员工。

示例

-- 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表中返回前三位薪酬最高的员工。

示例

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

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


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载