SQL TOP 子句
SQL TOP 子句
在从SQL表中检索数据时,SQL TOP 子句 用于限制由 SELECT 查询在 SQL 服务器中返回的行数。此外,我们还可以在 UPDATE 和 DELETE 语句中使用它来限制(限制)结果记录。
例如,如果您在数据库表中存储了大量数据,并且只想对前 N 行执行操作,则可以在 SQL 服务器查询中使用 TOP 子句。
MySQL 数据库不支持 TOP 子句,而是我们可以使用 LIMIT 子句从 MySQL 表中选择有限数量的记录。同样,Oracle 支持 ROWNUM 子句以限制表的记录。TOP 子句类似于 LIMIT 子句。
语法
SQL TOP子句的基本语法如下−
其中, value 是要从顶部返回的行数/百分比。
示例
为了更好地理解,让我们考虑包含客户的个人详细信息的CUSTOMERS表,包括他们的姓名、年龄、地址和工资等,如下所示−
现在,使用INSERT语句将值插入到这个表中,如下所示−
表将被生成如下:
ID | 名称 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
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 |
现在,我们使用TOP子句从CUSTOMERS表中获取最前面的4条记录,而不指定任何条件子句如WHERE,ORDER BY等。−
输出
这将产生以下结果−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
TOP with ORDER BY Clause
SQL中的ORDER BY子句用于按升序或降序对查询的结果集进行排序。我们可以将其与TOP子句一起使用,按排序顺序检索(或更新或删除等)前N条记录。
示例
使用以下查询,我们检索出前4条记录。
记录按照
CUSTOMERS
表中的升序排列。这里,我们根据
SALARY
列以降序对表进行排序−
输出
我们得到以下结果−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
7 | Muffy | 24 | Indore | 10000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
注意 − 默认情况下,ORDER BY子句按升序对数据进行排序。因此,如果我们需要按降序排序数据,我们必须使用DESC关键字。
带有百分比的TOP子句
我们还可以使用PERCENT子句和TOP子句一起指定百分比值来限制记录。
示例
以下查询按照薪水的升序选择CUSTOMERS表中前40%的记录 –
输出
我们的表中共有7条记录,所以7的40%是2.8。因此,SQL服务器将结果四舍五入到三行(最接近的整数),如下所示的输出中−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
使用WHERE子句的TOP
我们可以使用TOP子句和WHERE子句来限制给定数量的行,并根据指定条件对其进行筛选。
示例
下面是显示以 ‘K’ 开头的前两个客户的详细信息的查询:
输出
以下结果被产生:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
使用DELETE语句的TOP子句
可以使用TOP子句与DELETE语句一起使用,删除满足给定条件的特定行数。
示例
在下面的查询中,我们使用带有TOP子句的DELETE语句。在这里,我们删除前2个名字以“K”开头的客户 −
输出
我们得到如下所示的输出结果 −
验证
我们可以通过使用SELECT语句检索表的内容来验证更改是否在表中反映出来,如下所示 −
表显示如下 −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | 阿姆达巴德 | 2000.00 |
4 | 赛塔里 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科玛尔 | 22 | 海德拉巴 | 4500.00 |
7 | 穆菲 | 24 | 印多尔 | 10000.00 |
TOP 和 WITH TIES 子句
在使用 ORDER BY 子句基于某一列对表中的数据进行排序时,有时候多行可能会在 ORDER BY 子句中指定的列中包含相同的值。
如果您尝试使用TOP子句来限制记录的数量,则不一定会筛选出所有符合条件的列。
WITH TIES子句用于确保查询结果中包括具有相同值(即具有“相等”值)的记录。
示例
考虑上面创建的表CUSTOMERS。如果我们需要按照SALARY值升序排列检索前2个客户,则查询语句如下:
结果表如下:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | 名字 | 年龄 | 地点 | 工资 |
1 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
但是,表中按升序排列的前两个工资值为1500和2000,而在CUSTOMERS表中有另一个工资值为2000的列未包含在结果中。
如果您想检索按升序排列的前两个工资值的所有列。我们需要使用 WITH TIES 子句如下所示−
输出
结果表如下−
ID | 名称 | 年龄 | 地址 | 工资 |
---|---|---|---|---|
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
1 | Ramesh | 32 | 阿姆达巴德 | 2000.00 |
TOP子句的用途
TOP子句的一些常见用途包括 −
-
分页 − 在显示大量记录时,可以使用TOP子句每次只返回一定数量的记录,从而实现更可管理和高效的数据分页。
-
采样数据 − TOP 子句可用于快速从表中检索一个数据样本进行测试或分析。
-
提高性能 − 通过限制返回的行数,TOP 子句有助于提高查询的性能,特别是在处理大型表时。
-
调试 − 在开发或调试查询时,可以使用 TOP 子句迅速返回少量行以测试查询的正确性。
-
数据可视化 − TOP 子句可用于限制返回的行数以进行可视化,如创建图表或图形。