ALL、DISTINCT、DISTINCTROW、TOP 述詞
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

指定使用 SQL 查詢選取的記錄。

語法

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

包含這些述詞的 SELECT 語句包含下列部分:

部分

描述

ALL

假設您未包含其中一個述詞。 Microsoft Access 資料庫引擎會選取符合 SQL 語句中條件的所有記錄。 下列兩個範例相等,並傳回 [員工] 數據表中的所有記錄:

SELECT ALL *FROM EmployeesORDER BY EmployeeID;
SELECT *FROM EmployeesORDER BY EmployeeID;

DISTINCT

省略在所選取欄位中包含重複資料的記錄。 若要包含在查詢結果中,SELECT 語句中所列每個欄位的值必須是唯一的。 例如,[員工] 數據表中列出的多位員工姓氏可能相同。 如果 [LastName] 字段中有兩筆記錄包含 Smith,下列 SQL 語句只會傳回一筆包含 Smith 的記錄:

SELECT DISTINCT LastNameFROM Employees;

如果您省略 DISTINCT,此查詢會傳回 Smith 記錄。

如果 SELECT 子句包含多個字段,所有欄位的值組合必須是唯一的,才能將指定的記錄包含在結果中。

使用 DISTINCT 的查詢輸出無法更新,也不會反映其他使用者所做的後續變更。

DISTINCTROW

根據整筆重複的記錄來省略數據,而不只是省略重複欄位。 例如,您可以建立一個查詢來聯結 [客戶標識符] 字段上的 [客戶] 和 [訂單] 數據表。 [客戶] 數據表不包含重複的 [客戶標識符] 字段,但 [訂單] 數據表會這麼做,因為每個客戶可以有許多訂單。 下列 SQL 語句說明如何使用 DISTINCTROW 來產生至少有一筆訂單但不含這些訂單詳細數據的公司清單:

SELECT DISTINCTROW CompanyNameFROM Customers INNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDORDER BY CompanyName;

如果您省略 DISTINCTROW,此查詢會為每間訂單超過一筆的公司產生多個數據列。

DISTINCTROW 只有在您選取查詢中所使用之部分數據表的欄位時才會有效果,但並非全部。 如果您的查詢只包含一個數據表,或是從所有數據表輸出欄位,則會忽略 DISTINCTROW。

TOP n [PERCENT]

傳回位於 ORDER BY 子句所指定範圍頂端或底端的特定記錄數目。 假設您想要 1994 班級的前 25 名學生名稱:

SELECT TOP 25FirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage DESC;

如果您不包含 ORDER BY 子句,查詢會從 [學生] 資料表傳回一組符合 WHERE 子句的任意 25 筆記錄。

TOP 述詞不會在等值之間選擇。 在上述範例中,如果第二十五和第二十六名的最高成績平均值相同,查詢會傳回 26 筆記錄。

您也可以使用 PERCENT 保留字傳回位於 ORDER BY 子句所指定範圍頂端或底端的特定記錄百分比。 假設您想要班級倒數 10%,而不是前 25 名的學生:

SELECT TOP 10 PERCENTFirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage ASC;

ASC 述詞會指定底端值的傳回。 TOP 之後的值必須是未簽署的整數。

TOP 不會影響查詢是否可更新。

table

從其中擷取記錄之資料表的名稱。

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。