ALL、DISTINCT、DISTINCTROW、TOP 謂詞 (Microsoft Jet SQL)

此頁沒有內(nèi)容條目
內(nèi)容

ALL、DISTINCT、DISTINCTROW、TOP 謂詞

標(biāo)明用 SQL查詢選取的記錄。

語法

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

FROM table

   FROM 表

包含這些謂詞的 SELECT 語句 有以下部分:

部分

說明

ALL

如果不包含任何一個(gè)謂詞,則取此值。Microsoft Jet數(shù)據(jù)庫引擎選取所有滿足 SQL 語句的所有記錄。下列兩示例是等價(jià)的,并且都返回雇員表的所有記錄:

SELECT ALL *

FROM Employees

ORDER BY EmployeeID;

SELECT *

FROM Employees

ORDER BY EmployeeID;

DISTINCT

省略選擇字段中包含重復(fù)數(shù)據(jù)的記錄。為了讓查詢結(jié)果包含它們,必須使 SELECT 語句中列舉的每個(gè)字段值是唯一的。例如,雇員表可能有一些同姓的雇員。如果有兩個(gè)記錄的姓氏字段皆包含 Smith,則下列 SQL 語句只返回包含 Smith 的記錄:

SELECT DISTINCT

LastName

FROM Employees;

如果省略 DISTINCT,則查詢將返回兩個(gè)包含 Smith 的記錄。

如果 SELECT 子句包含多個(gè)字段,則對已給記錄,所有字段值的組合必須是唯一的,而且結(jié)果中將包含這一組合。

如果查詢使用 DISTINCT,則不能更新其輸出,而且該輸出也不會(huì)反映其它用戶所作的一系列更改。

DISTINCTROW

省略基于整個(gè)重復(fù)記錄的數(shù)據(jù),而不只是基于重復(fù)字段的數(shù)據(jù)。例如,可在客戶ID字段上創(chuàng)建一個(gè)聯(lián)結(jié)客戶表及訂單表的查詢??蛻舯聿⑽磸?fù)制一份 CustomerID 字段,但是訂單表必須如此做,因?yàn)槊恳豢蛻裟苡性S多訂單。下列 SQL 語句顯示如何使用 DISTINCTROW 生成公司的列表,且該列表至少包含一個(gè)訂單,但不包含有關(guān)那些訂單的任何詳細(xì)數(shù)據(jù):

SELECT DISTINCTROW CompanyName

FROM Customers INNER JOIN Orders

ON Customers.CustomerID = Orders.CustomerID

ORDER BY CompanyName;

如果省略 DISTINCTROW,則查詢將對每一公司生成多重行,且該公司包含多個(gè)訂單。

僅當(dāng)從查詢中的一部分表但不是全部表中選擇字段時(shí),DISTINCTROW 才會(huì)有效。如果查詢只包含一個(gè)表,或者從所有的表中輸出字段,則可省略DISTINCTROW。

TOP n [PERCENT]

返回特定數(shù)目的記錄,且這些記錄將落在由 ORDER BY 子句指定的前面或后面的范圍中。假設(shè)您想要 1994 年班級里的前 25 個(gè)學(xué)生名字:

SELECT TOP 25

FirstName, LastName

FROM Students

WHERE GraduationYear = 1994

ORDER BY GradePointAverage DESC;

如果您沒有包含 ORDER BY 子句,則查詢將由學(xué)生表返回 25 個(gè)記錄的任意集合,且該表滿足 WHERE 子句。

TOP 謂詞不在相同值間作選擇。在前一示例中,如果第 25 及第 26 的最高平均分?jǐn)?shù)相同,則查詢將返回 26 個(gè)記錄。

也可用 PERCENT 保留字返回特定記錄的百分比,且這些記錄將落在由 ORDER BY 子句指定的前面或后面范圍中。假設(shè)用班級后面 10% 的學(xué)生代替前 25 個(gè)學(xué)生,:

SELECT TOP 10 PERCENT

FirstName, LastName

FROM Students

WHERE GraduationYear = 1994

ORDER BY GradePointAverage ASC;

ASC 謂詞指定返回后面的值。遵循 TOP的值一定是無符號 Integer.

查詢是否可更新,這不會(huì)受到 TOP 的影響。

table

從其中獲取記錄的表的名稱。

 

請參閱

FROM 子句 (Microsoft Jet SQL)

SELECT 語句 (Microsoft Jet SQL)

 

示例

ALL、DISTINCT、DISTINCTROW、TOP 謂詞