標(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 |
從其中獲取記錄的表的名稱。 |
ALL、DISTINCT、DISTINCTROW、TOP 謂詞