ALL、DISTINCT、DISTINCTROW、TOP 谓词

指定使用查询SQL的记录。

语法

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

包含这些谓词的 SELECT 语句包含以下部分:

部分

说明

ALL

假设不包含其中一个谓词。 Microsoft Access 数据库引擎选择满足 SQL 语句中条件的所有记录。 以下两个示例是等效的,并返回"员工"表中的所有记录:

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

DISTINCT

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

SELECT DISTINCT LastName
FROM Employees;

如果省略 DISTINCT,此查询将返回两条 Smith 记录。

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

使用 DISTINCT 的查询的输出不可更新,并且不会反映其他用户的后续更改。

DISTINCTROW

省略基于整个重复记录的数据,而不只是重复字段。 例如,可以创建一个查询,用于联接 CustomerID 字段上的"客户"和"订单"表。 "客户"表不包含重复的 CustomerID 字段,但"订单"表包含,因为每个客户可以有许多订单。 以下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 子句,查询将返回学生表中满足 WHERE 子句的任意 25 条记录集。

TOP 谓词不会在等值之间选择。 在上例中,如果第二十五个和第二十六个最高成绩的分数平均值相同,则查询将返回 26 条记录。

还可使用 PERCENT 保留字返回 ORDER BY 子句指定的区域顶部或底部的特定百分比记录。 假设你需要课堂中排名后 10% 的学生,而不是前 25 名学生:

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

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

TOP 不会影响查询是否可更新。

table

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



Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Office Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×