SQL TOP 子句

SQL TOP 子句

SQL TOP 子句

在从SQL表中检索数据时,SQL TOP 子句 用于限制由 SELECT 查询在 SQL 服务器中返回的行数。此外,我们还可以在 UPDATE 和 DELETE 语句中使用它来限制(限制)结果记录。

例如,如果您在数据库表中存储了大量数据,并且只想对前 N 行执行操作,则可以在 SQL 服务器查询中使用 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 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等。−

SELECT TOP 4 * FROM CUSTOMERS;

输出

这将产生以下结果−

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
列以降序对表进行排序−

SELECT TOP 4 * FROM CUSTOMERS ORDER BY SALARY DESC;

输出

我们得到以下结果−

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%的记录 –

SELECT TOP 40 PERCENT * FROM CUSTOMERS ORDER BY SALARY

输出

我们的表中共有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’ 开头的前两个客户的详细信息的查询:

SELECT TOP 2 * FROM CUSTOMERS WHERE NAME LIKE 'k%'

输出

以下结果被产生:

ID 姓名 年龄 地址 薪水
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 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 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个客户,则查询语句如下:

SELECT TOP 2 * FROM CUSTOMERS ORDER BY SALARY;

结果表如下:

ID NAME AGE ADDRESS SALARY
2 名字 年龄 地点 工资
1 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00

但是,表中按升序排列的前两个工资值为1500和2000,而在CUSTOMERS表中有另一个工资值为2000的列未包含在结果中。

如果您想检索按升序排列的前两个工资值的所有列。我们需要使用 WITH TIES 子句如下所示−

SELECT TOP 2 WITH TIES * FROM CUSTOMERS ORDER BY SALARY;

输出

结果表如下−

ID 名称 年龄 地址 工资
2 Khilan 25 德里 1500.00
3 Kaushik 23 Kota 2000.00
1 Ramesh 32 阿姆达巴德 2000.00

TOP子句的用途

TOP子句的一些常见用途包括 −

  • 分页 − 在显示大量记录时,可以使用TOP子句每次只返回一定数量的记录,从而实现更可管理和高效的数据分页。

  • 采样数据 − TOP 子句可用于快速从表中检索一个数据样本进行测试或分析。

  • 提高性能 − 通过限制返回的行数,TOP 子句有助于提高查询的性能,特别是在处理大型表时。

  • 调试 − 在开发或调试查询时,可以使用 TOP 子句迅速返回少量行以测试查询的正确性。

  • 数据可视化 − TOP 子句可用于限制返回的行数以进行可视化,如创建图表或图形。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程