- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表数据
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 密钥
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 组合键
- SQL - 候选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - TOP 子句
SQL TOP 子句
当我们从 SQL 表中检索数据时,SQL 的TOP 子句用于限制 SQL Server 中 SELECT 查询返回的行数。此外,我们还可以将其与 UPDATE 和 DELETE 语句一起使用以限制(约束)结果记录。
例如,如果数据库表中存储了大量数据,而您只想对前 N 行执行操作,则可以在 SQL Server 查询中使用 TOP 子句。
MySQL 数据库不支持 TOP 子句,可以改用LIMIT子句从 MySQL 表中选择有限数量的记录。类似地,Oracle 支持 ROWNUM 子句来限制表的记录。TOP 子句类似于 LIMIT 子句。
语法
SQL TOP 子句的基本语法如下:
SELECT TOP value column_name(s) FROM table_name WHERE [condition]
其中,value 是从顶部返回的行数/百分比。
示例
为了更好地理解它,让我们考虑 CUSTOMERS 表,该表包含客户的个人详细信息,包括他们的姓名、年龄、地址和工资等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,使用 INSERT 语句将值插入此表:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
表将创建如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
7 | Chaitali | 24 | 28 | 10000.00 |
现在,我们使用 TOP 子句从 CUSTOMERS 表中获取前 4 条记录,无需指定任何条件子句,例如 WHERE、ORDER BY 等:
SELECT TOP 4 * FROM CUSTOMERS;
输出
这将产生以下结果:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
带有 ORDER BY 子句的 TOP
SQL 中的 ORDER BY 子句用于按升序或降序对查询的结果集进行排序。我们可以将其与 TOP 子句一起使用以按排序顺序检索(或更新或删除等)前 N 条记录。
示例
使用以下查询,我们按排序顺序检索 CUSTOMERS 表的前 4 条记录。在这里,我们根据 SALARY 列按降序对表进行排序:
SELECT TOP 4 * FROM CUSTOMERS ORDER BY SALARY DESC;
输出
我们得到的结果如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
7 | Chaitali | 24 | 28 | 10000.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
注意:默认情况下,ORDER BY 子句按升序对数据进行排序。因此,如果需要按降序对数据进行排序,则必须使用 DESC 关键字。
带有百分比的 TOP 子句
我们还可以通过使用 PERCENT 子句以及 TOP 子句,指定百分比值而不是数字来限制记录。
示例
以下查询按工资升序选择 CUSTOMERS 表中前 40% 的记录:
SELECT TOP 40 PERCENT * FROM CUSTOMERS ORDER BY SALARY
输出
我们的表共有 7 条记录。因此,7 的 40% 是 2.8。因此,SQL Server 将结果四舍五入到三行(下一个整数),如下面的输出所示:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
1 | Ramesh | 32 | 32 | 2000.00 |
带有 WHERE 子句的 TOP
我们可以将 TOP 子句与 WHERE 子句一起使用,以限制给定数量的行并根据指定的条件对其进行筛选。
示例
以下是显示 CUSTOMERS 表中前两位姓名以“K”开头的客户的详细信息的查询:
SELECT TOP 2 * FROM CUSTOMERS WHERE NAME LIKE 'k%'
输出
产生以下结果:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
带有 DELETE 语句的 TOP 子句
TOP 子句可用于 DELETE 语句以删除满足给定条件的特定数量的行。
示例
在以下查询中,我们使用带有 TOP 子句的 DELETE 语句。在这里,我们删除了前 2 位姓名以“K”开头的客户:
DELETE TOP(2) FROM CUSTOMERS WHERE NAME LIKE 'K%';
输出
我们得到如下所示的输出:
(2 rows affected)
验证
我们可以使用 SELECT 语句检索表的内容来验证更改是否已反映在表中,如下所示:
SELECT * FROM CUSTOMERS;
表显示如下:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
7 | Chaitali | 24 | 28 | 10000.00 |
TOP 和 WITH TIES 子句
使用 ORDER BY 子句根据列对表中的数据进行排序时,有时多个行可能在 ORDER BY 子句中指定的列中包含相同的值。
如果尝试使用 TOP 子句限制记录数量,则可能无法过滤所有合格列。
WITH TIES 子句用于确保包含具有相同值(具有“关联”值的记录)的记录在查询结果中。
示例
考虑上面创建的表CUSTOMERS。如果需要按工资值的升序检索前 2 位客户,则查询如下:
SELECT TOP 2 * FROM CUSTOMERS ORDER BY SALARY;
结果表将是:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
但是,表中前两个工资值(按升序排列)是 1500 和 2000,而 CUSTOMERS 表中还有另一列的工资值为 2000,该列未包含在结果中。
如果要检索所有具有前两个工资值的列(按升序排列)。我们需要使用WITH TIES子句,如下所示:
SELECT TOP 2 WITH TIES * FROM CUSTOMERS ORDER BY SALARY;
输出
结果表将是:
ID | 姓名 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
1 | Ramesh | 32 | 32 | 2000.00 |
TOP 子句的用途
TOP 子句的一些常见用例包括:
分页:显示大量记录时,TOP 子句可用于一次仅返回一定数量的记录,从而实现数据的更易于管理和更高效的分页。
数据采样:TOP 子句可用于快速检索表中的数据样本以进行测试或分析。
提高性能:通过限制返回的行数,TOP 子句可以帮助提高查询性能,尤其是在处理大型表时。
调试:在开发或调试查询时,TOP 子句可用于快速返回少量行以测试查询的正确性。
数据可视化:TOP 子句可用于限制为可视化目的而返回的行数,例如创建图表或图形。