適用於:Access 2013 | Access 2016
指定使用 SQL 查詢所選取的記錄。
語法
選擇 [全部 |獨特 |區別行 |[前 n [ 百分比]]]FROM 表格
包含這些述詞的 SELECT 陳述式具有下列部分。
ALL:假設您不包含其中一個謂詞。 Microsoft Access 資料庫引擎會選取符合 SQL 陳述式中條件的所有記錄。
下列兩個範例是對等的,並傳回 Employees 資料表中的所有記錄:
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 欄位上的 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 = 1994 ORDER BY GradePointAverage DESC;如果您未包含 ORDER BY 子句,查詢會從 Students 資料表傳回一組任意 25 筆符合 WHERE 子句的記錄。 TOP 述詞不會在相等值中做選擇。 在上面的範例中,如果第 25 和 26 名的平均分數相同,查詢會傳回 26 筆記錄。 您也可以使用 PERCENT 保留字傳回 ORDER BY 子句指定範圍中最前或最後若干百分比的記錄。 假設您不要前 25 名學生,而要班上最後 10% 的學生:
SELECT TOP 10 PERCENT FirstName, LastName FROM Students WHERE GraduationYear = 1994 ORDER BY GradePointAverage ASC;ASC 述詞指定傳回最差值。 接在 TOP 後面的值必須是不帶正負號的整數。 TOP 並不影響查詢是否可以更新。
table:從中擷取記錄的資料表名稱。
範例
本範例會建立查詢,將 [Customers] 及 [Orders] 資料表以 [客戶識別碼] 欄位聯結。 因為每位顧客可以有許多訂單,因此 [Customers] 資料表沒有重複的 [CustomerID] 欄位,而 [Orders] 欄位則有。 使用 DISTINCTROW 產生公司清單,清單內的公司至少擁有一張訂單,但是不包含這些訂單的詳細資訊。
Sub AllDistinctX()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Join the Customers and Orders tables on the
' CustomerID field. Select a list of companies
' that have at least one order.
Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _
& "CompanyName FROM Customers " _
& "INNER JOIN Orders " _
& "ON Customers.CustomerID = " _
& "Orders.CustomerID " _
& "ORDER BY CompanyName;")
' Populate the Recordset.
rst.MoveLast
' Call EnumFields to print the contents of the
' Recordset. Pass the Recordset object and desired
' field width.
EnumFields rst, 25
dbs.Close
End Sub
另請參閱
- 存取開發人員論壇
- 在 support.office.com 上存取說明
- 存取 UtterAccess 上的論壇
- 存取開發人員和 VBA 程式設計說明中心 (FMS)
- 存取 StackOverflow 上的文章
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。