ALL、DISTINCT、DISTINCTROW、TOP 谓词

ALL、DISTINCT、DISTINCTROW、TOP 谓词

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

指定 SQL 查询选择的记录。

语法

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM table

其中包含以上谓词的 SELECT 语句包含以下部分:

部分

说明

ALL

假设如果不包括谓词之一。Microsoft Access 数据库引擎可选择所有满足 SQL 语句中的条件的记录。下面的两个示例相等,从雇员表中返回所有记录 ︰

SELECT ALL *
FROM Employees
ORDER BY EmployeeID;
SELECT *
FROM Employees
ORDER BY EmployeeID;

DISTINCT

忽略其中包含所选字段内的重复数据的记录。 SELECT 语句中列出的每个字段的值要包含在查询结果中,则必须是唯一的。 例如,“Employees”表中列出的多名员工可能姓氏相同。 如果两个记录中的“LastName”字段内均包含“Smith”,以下 SQL 语句将仅返回一条其中包含“Smith”的记录:

SELECT DISTINCT LastName
FROM Employees;

如果省略 DISTINCT,此查询将返回两条包含“Smith”的记录。

如果 SELECT 子句中包含多个字段,则所有字段的值组合必须对给定记录是唯一的,才能包含在结果中。

使用 DISTINCT 的查询的输出不可更新,也不能体现其他用户所做后续更改。

DISTINCTROW

忽略基于整个重复记录的数据,而不仅仅是重复字段。 例如,您可以创建在 CustomerID 字段中合并了 Customers 和 Orders 表的查询。 Customers 表中不包含重复的 CustomerID 字段,但 Orders 表中却包含,因为每个客户可以有大量订单。 以下 SQL 语句显示如何使用 DISTINCTROW 生成至少有一个订单的公司的列表,但该列表中不含订单的任何详细信息:

SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;

如果省略 DISTINCTROW,则此查询将为有多个订单的每个公司生成多行。

仅从您从查询中使用的部分表,而非所有表选择字段时,DISTINCTROW 才有效。 如果查询中仅包含一个表,或者如果从所有表输出字段,将忽略 DISTINCTROW。

TOP n [PERCENT]

返回 ORDER BY 子句指定的范围上限或下限内一定数量的记录。 假设需要 1994 级前 25 名学生的姓名:

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;

如果不包括 ORDER BY 子句,查询将从 Students 表返回满足 WHERE 子句的任意 25 条记录的集合。

TOP 谓词不在相等值之间进行选择。 在上面的示例中,如果第 25 名和第 26 名的年级最高平均分相等,查询将返回 26 条记录。

也可以使用 PERCENT 保留字返回 ORDER BY 子句指定的范围上限或下限内一定百分比的记录。 假设您需要的不是班级前 25 名学生,而是排名为最后 10% 的学生:

SELECT TOP 10 PERCENT
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage ASC;

ASC 谓词指定了返回的底部的值。TOP 之后的值必须是符号的整数。

TOP 对查询是否可更新没有影响。

table

从中检索记录的表的名称。



注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×