Informix SELECT 語(yǔ)句與其子句的詳解_第1頁(yè)
Informix SELECT 語(yǔ)句與其子句的詳解_第2頁(yè)
Informix SELECT 語(yǔ)句與其子句的詳解_第3頁(yè)
Informix SELECT 語(yǔ)句與其子句的詳解_第4頁(yè)
Informix SELECT 語(yǔ)句與其子句的詳解_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SELECT 語(yǔ)句與其子句的詳解閑來(lái)沒事做,整理了一下SELECT語(yǔ)句的一點(diǎn)用法,不過(guò)這是SQL SERVER 2000 下的,整體的語(yǔ)法和informix 的SQL語(yǔ)法差不多,僅供參考,對(duì)于初學(xué)SQL語(yǔ)句的新手來(lái)說(shuō)還是有幫助的,嘿嘿 其實(shí)我就是新手,以后還請(qǐng)各位大俠多多執(zhí)教!SELECT從數(shù)據(jù)庫(kù)中檢索行,并允許從一個(gè)或多個(gè)表中選擇一個(gè)或多個(gè)行或列。雖然 SELECT 語(yǔ)句的完整語(yǔ)法較復(fù)雜,但是其主要的子句可歸納如下: SELECT select_list INTO new_table FROM table_source WHERE search_condition GROUP BY grou

2、p_by_expression HAVING search_condition ORDER BY order_expression ASC | DESC 可以在查詢之間使用 UNION 運(yùn)算符,以將查詢的結(jié)果組合成單個(gè)結(jié)果集。 語(yǔ)法SELECT statement :=< query_expression > ORDER BY order_by_expression | column_position ASC | DESC ,.n COMPUTE AVG | COUNT | MAX | MIN | SUM ( expression ) ,.n BY expression ,.n F

3、OR BROWSE | XML RAW | AUTO | EXPLICIT , XMLDATA , ELEMENTS , BINARY base64 OPTION ( < query_hint > ,.n ) < query expression > := < query specification > | ( < query expression > ) UNION ALL < query specification | ( < query expression > ) .n < query specification

4、> :=SELECT ALL | DISTINCT TOP integer | TOP integer PERCENT WITH TIES < select_list > INTO new_table FROM < table_source > ,.n WHERE < search_condition > GROUP BY ALL group_by_expression ,.n WITH CUBE | ROLLUP HAVING <search_condition>由于 SELECT 語(yǔ)句的復(fù)雜性,下面按子句說(shuō)明詳細(xì)的語(yǔ)法元素和參數(shù): SE

5、LECT 子句指定由查詢返回的列。語(yǔ)法SELECT ALL | DISTINCT TOP n PERCENT WITH TIES < select_list >< select_list > := *| table_name | view_name | table_alias .*| column_name | expression | IDENTITYCOL | ROWGUIDCOL AS column_alias | column_alias = expression ,.n 參數(shù)ALL指定在結(jié)果集中可以顯示重復(fù)行。ALL 是默認(rèn)設(shè)置。DISTINCT指定在結(jié)果集中

6、只能顯示唯一行。為了 DISTINCT 關(guān)鍵字的用途,空值被認(rèn)為相等。TOP n PERCENT指定只從查詢結(jié)果集中輸出前 n 行。n 是介于 0 和 4294967295 之間的整數(shù)。如果還指定了 PERCENT,則只從結(jié)果集中輸出前百分之 n 行。當(dāng)指定時(shí)帶 PERCENT 時(shí),n 必須是介于 0 和 100 之間的整數(shù)。如果查詢包含 ORDER BY 子句,將輸出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查詢沒有 ORDER BY 子句,行的順序?qū)⑷我狻ITH TIES指定從基本結(jié)果集中返回附加的行,這些行包含與出現(xiàn)在 TOP n (PERCENT) 行最后

7、的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,則只能指定 TOP .WITH TIES。< select_list >為結(jié)果集選擇的列。選擇列表是以逗號(hào)分隔的一系列表達(dá)式。*指定在 FROM 子句內(nèi)返回所有表和視圖內(nèi)的所有列。列按 FROM 子句所指定的由表或視圖返回,并按它們?cè)诒砘蛞晥D中的順序返回。table_name | view_name | table_alias.*將 * 的作用域限制為指定的表或視圖。column_name是要返回的列名。限定 column_name 以避免二義性引用,當(dāng) FROM 子句中的兩個(gè)表內(nèi)有包含重復(fù)名的列時(shí)會(huì)出現(xiàn)這

8、種情況。例如,Northwind 數(shù)據(jù)庫(kù)中的 Customers 和 Orders 表內(nèi)都有名為 ColumnID 的列。如果在查詢中聯(lián)接這兩個(gè)表,可以在選擇列表中將客戶 ID 指定為 Customers.CustomerID。 expression是列名、常量、函數(shù)以及由運(yùn)算符連接的列名、常量和函數(shù)的任意組合,或者是子查詢。IDENTITYCOL返回標(biāo)識(shí)列。有關(guān)更多信息,請(qǐng)參見 IDENTITY(屬性)、ALTER TABLE 和 CREATE TABLE。如果 FROM 子句中的多個(gè)表內(nèi)有包含 IDENTITY 屬性的列,則必須用特定的表名(如 T1.IDENTITYCOL)限定 IDEN

9、TITYCOL。ROWGUIDCOL返回行全局唯一標(biāo)識(shí)列。如果在 FROM 子句中有多個(gè)表具有 ROWGUIDCOL 屬性,則必須用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。column_alias是查詢結(jié)果集內(nèi)替換列名的可選名。例如,可以為名為 quantity 的列指定別名,如"Quantity"或"Quantity to Date"或"Qty"。別名還可用于為表達(dá)式結(jié)果指定名稱,例如:USE NorthwindSELECT AVG(UnitPrice) AS 'Average Price&#

10、39;FROM Order Detailscolumn_alias 可用于 ORDER BY 子句。然而,不能用于 WHERE、GROUP BY 或 HAVING 子句。如果查詢表達(dá)式是 DECLARE CURSOR 語(yǔ)句的一部分,則 column_alias 不能用在 FOR UPDATE 子句中。INTO 子句創(chuàng)建新表并將結(jié)果行從查詢插入新表中。用戶若要執(zhí)行帶 INTO 子句的 SELECT 語(yǔ)句,必須在目的數(shù)據(jù)庫(kù)內(nèi)具有CREATE TABLE 權(quán)限。SELECT.INTO 不能與 COMPUTE 子句一起使用。有關(guān)更多信息,請(qǐng)參見事務(wù)和顯式事務(wù)。通過(guò)在 WHERE 子句中包含 FALSE

11、 條件,可以使用 SELECT.INTO 創(chuàng)建沒有數(shù)據(jù)的相同表定義(不同表名)。語(yǔ)法 INTO new_table 參數(shù)new_table根據(jù)選擇列表中的列和 WHERE 子句選擇的行,指定要?jiǎng)?chuàng)建的新表名。new_table 的格式通過(guò)對(duì)選擇列表中的表達(dá)式進(jìn)行取值來(lái)確定。new_table 中的列按選擇列表指定的順序創(chuàng)建。new_table 中的每列有與選擇列表中的相應(yīng)表達(dá)式相同的名稱、數(shù)據(jù)類型和值。當(dāng)選擇列表中包含計(jì)算列時(shí),新表中的相應(yīng)列不是計(jì)算列。新列中的值是在執(zhí)行 SELECT.INTO 時(shí)計(jì)算出的。在此次發(fā)布的 SQL Server 版本中,select into/bulkcopy 數(shù)

12、據(jù)庫(kù)選項(xiàng)對(duì)是否可以使用 SELECT INTO 創(chuàng)建永久表沒有影響。對(duì)包括 SELECT INTO 在內(nèi)的某些大容量操作的記錄量,取決于對(duì)數(shù)據(jù)庫(kù)有效的恢復(fù)模式。有關(guān)更多信息,請(qǐng)參見使用恢復(fù)模型。在以前發(fā)布的版本中,如果設(shè)置了 select into/bulk copy,則可用 SELECT INTO 創(chuàng)建永久表。select into/bulk copy 用于向后兼容,但在以后的版本中可能不支持該選項(xiàng)。有關(guān)更多信息,請(qǐng)參考"恢復(fù)模式"和"向后兼容性"主題以及 ALTER DATABASE 主題。FROM 子句指定從其中檢索行的表。需要 FROM 子句,除

13、非選擇列表只包含常量、變量和算術(shù)表達(dá)式(沒有列名)。有關(guān)更多信息,請(qǐng)參見 FROM。語(yǔ)法 FROM < table_source > ,.n < table_source > :=table_name AS table_alias WITH ( < table_hint > ,.n ) | view_name AS table_alias | rowset_function AS table_alias | OPENXML| derived_table AS table_alias ( column_alias ,.n ) | < joined_tab

14、le >< joined_table > :=< table_source > < join_type > < table_source > ON < search_condition > | < table_source > CROSS JOIN < table_source >| < joined_table >< join_type > := INNER | LEFT | RIGHT | FULL OUTER < join_hint > JOIN參數(shù)< ta

15、ble_source >指定用于 SELECT 語(yǔ)句的表、視圖、派生表和聯(lián)接表。table_name AS table_alias 指定表名和可選別名。view_name AS table_alias 指定名稱、視圖和可選別名。rowset_function AS table_alias 是行集函數(shù)名和可選別名。有關(guān)行集函數(shù)列表的更多信息,請(qǐng)參見行集函數(shù)。 OPENXML在 XML 文檔上提供行集視圖。有關(guān)更多信息,請(qǐng)參見 OPENXML。 WITH ( < table_hint > ,.n )指定一個(gè)或更多表提示。有關(guān)表提示的更多信息,請(qǐng)參見 FROM。derived_ta

16、ble AS table_alias 是嵌套 SELECT 語(yǔ)句,可從指定的數(shù)據(jù)庫(kù)和表中檢索行。column_alias替換結(jié)果集內(nèi)列名的可選別名。<joined_table>是兩個(gè)或更多表的積的結(jié)果集。例如:SELECT *FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4ON tab3.c1 = tab4.c1ON tab2.c3 = tab4.c3對(duì)于多個(gè) CROSS 聯(lián)接,請(qǐng)使用圓括號(hào)來(lái)更改聯(lián)接的自然順序。<join_type>

17、指定聯(lián)接操作的類型。INNER指定返回所有相匹配的行對(duì)。廢棄兩個(gè)表中不匹配的行。如果未指定聯(lián)接類型,則這是默認(rèn)設(shè)置。LEFT OUTER指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自左表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自左表的輸出列設(shè)置為 NULL。RIGHT OUTER指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自右表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自右表的輸出列設(shè)置為 NULL。FULL OUTER如果來(lái)自左表或右表的某行與選擇準(zhǔn)則不匹配,則指定在結(jié)果集內(nèi)包含該行,并且將與另一個(gè)表對(duì)應(yīng)的輸出列設(shè)置為 NULL。除此之外,結(jié)果集中還包含通常由內(nèi)聯(lián)接返回的所有行。<join_hint&g

18、t;指定聯(lián)接提示或執(zhí)行算法。如果指定了 <join_hint>,也必須明確指定 INNER、LEFT、RIGHT 或 FULL。有關(guān)聯(lián)接提示的更多信息,請(qǐng)參見 FROM。JOIN表示聯(lián)接所指定的表或視圖。ON <search_condition>指定聯(lián)接所基于的條件。此條件可指定任何謂詞,但通常使用列和比較運(yùn)算符。例如:SELECT ProductID, Suppliers.SupplierIDFROM Suppliers JOIN ProductsON (Suppliers.SupplierID = Products.SupplierID)當(dāng)條件指定列時(shí),列不必有相同

19、的名稱或相同的數(shù)據(jù)類型。但是如果數(shù)據(jù)類型不同,則它們必須是兼容或可由 Microsoft? SQL Server? 進(jìn)行隱性轉(zhuǎn)換的類型。如果數(shù)據(jù)類型不能隱式轉(zhuǎn)換,則條件必須使用 CAST 函數(shù)顯式轉(zhuǎn)換數(shù)據(jù)類型。 有關(guān)搜索條件和謂詞的更多信息,請(qǐng)參見搜索條件。CROSS JOIN指定兩個(gè)表的矢量積。返回同樣的行,就像要聯(lián)接的表只列于 FROM 子句中,并且未指定 WHERE 子句。例如,這兩個(gè)查詢返回的結(jié)果集都由 T1 和 T2 中所有行的完全聯(lián)接組成:SELECT * FROM T1, T2SELECT * FROM T1 CROSS JOIN T2WHERE 子句指定用于限制返回的行的搜索條

20、件。語(yǔ)法 WHERE < search_condition > | < old_outer_join > < old_outer_join > :=column_name * = | = * column_name參數(shù)<search_condition>通過(guò)使用謂詞限制結(jié)果集內(nèi)返回的行。對(duì)搜索條件中可以包含的謂詞數(shù)量沒有限制。有關(guān)搜索條件和謂詞的更多信息,請(qǐng)參見搜索條件。< old_outer_join >使用不標(biāo)準(zhǔn)的產(chǎn)品專用語(yǔ)法和 WHERE 子句指定外聯(lián)接。*= 運(yùn)算符用于指定左向外聯(lián)接,=* 運(yùn)算符用于指定右向外聯(lián)接。下例指定一

21、個(gè)左向外聯(lián)接,并在結(jié)果集內(nèi)包含 Tab1 中不滿足指定條件的行: SELECT T, Tab2.idFROM Tab1, Tab2WHERE Tab1.id *=Tab2.id說(shuō)明 這種語(yǔ)法具有潛在的二義性解釋并且不標(biāo)準(zhǔn),因此不提倡使用這種語(yǔ)法進(jìn)行外聯(lián)接。而應(yīng)在 FROM 子句中指定聯(lián)接??梢酝ㄟ^(guò)在 FROM 子句中使用聯(lián)接運(yùn)算符,或通過(guò)在 WHERE 子句中使用不標(biāo)準(zhǔn)的 *= 和 =* 運(yùn)算符來(lái)指定外聯(lián)接。不能在同一語(yǔ)句中同時(shí)使用這兩種方法。GROUP BY 子句指定用來(lái)放置輸出行的組,并且如果 SELECT 子句 <select list> 中包含聚合函數(shù),則計(jì)

22、算每組的匯總值。指定 GROUP BY 時(shí),選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在 GROUP BY 列表中,或者 GROUP BY 表達(dá)式必須與選擇列表表達(dá)式完全匹配。說(shuō)明 如果未指定 ORDER BY 子句,則使用 GROUP BY 子句不按任何特定的順序返回組。建議始終使用 ORDER BY 子句指定具體的數(shù)據(jù)順序。 語(yǔ)法 GROUP BY ALL group_by_expression ,.n WITH CUBE | ROLLUP 參數(shù)ALL包含所有組和結(jié)果集,甚至包含那些任何行都不滿足 WHERE 子句指定的搜索條件的組和結(jié)果集。如果指定了 ALL,將對(duì)組中不滿足搜索條件的匯

23、總列返回空值。不能用 CUBE 或 ROLLUP 運(yùn)算符指定 ALL。如果訪問(wèn)遠(yuǎn)程表的查詢中有 WHERE 子句,則不支持 GROUP BY ALL 操作。 group_by_expression是對(duì)其執(zhí)行分組的表達(dá)式。group_by_expression 也稱為分組列。group_by expression 可以是列或引用列的非聚合表達(dá)式。在選擇列表內(nèi)定義的列的別名不能用于指定分組列。說(shuō)明 text、ntext 和 image 類型的列不能用于 group_by_expression。對(duì)于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression

24、 的項(xiàng)數(shù)受查詢所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。該限制從 8,060 字節(jié)的限制開始,對(duì)保存中間查詢結(jié)果所需的中間級(jí)工作表有 8,060 字節(jié)的限制。如果指定了 CUBE 或 ROLLUP,則最多只能有 10 個(gè)分組表達(dá)式。 CUBE指定在結(jié)果集內(nèi)不僅包含由 GROUP BY 提供的正常行,還包含匯總行。在結(jié)果集內(nèi)返回每個(gè)可能的組和子組組合的 GROUP BY匯總行。GROUP BY 匯總行在結(jié)果中顯示為 NULL,但可用來(lái)表示所有值。使用 GROUPING 函數(shù)確定結(jié)果集內(nèi)的空值是否是 GROUP BY 匯總值。結(jié)果集內(nèi)的匯總行數(shù)取決于 GROUP BY 子句內(nèi)包含

25、的列數(shù)。GROUP BY 子句中的每個(gè)操作數(shù)(列)綁定在分組 NULL 下,并且分組適用于所有其它操作數(shù)(列)。由于 CUBE 返回每個(gè)可能的組和子組組合,因此不論指定分組列時(shí)所使用的是什么順序,行數(shù)都相同。ROLLUP指定在結(jié)果集內(nèi)不僅包含由 GROUP BY 提供的正常行,還包含匯總行。按層次結(jié)構(gòu)順序,從組內(nèi)的最低級(jí)別到最高級(jí)別匯總組。組的層次結(jié)構(gòu)取決于指定分組列時(shí)所使用的順序。更改分組列的順序會(huì)影響在結(jié)果集內(nèi)生成的行數(shù)。 重要 使用 CUBE 或 ROLLUP 時(shí),不支持區(qū)分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name

26、) 和 SUM(DISTINCTcolumn_name)。如果使用這類聚合,SQL Server 將返回錯(cuò)誤信息并取消查詢。HAVING 子句指定組或聚合的搜索條件。HAVING 通常與 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行為與 WHERE 子句一樣。 語(yǔ)法HAVING <search_condition>參數(shù)<search_condition>指定組或聚合應(yīng)滿足的搜索條件。當(dāng) HAVING 與 GROUP BY ALL 一起使用時(shí),HAVING 子句替代 ALL。有關(guān)更多信息,請(qǐng)參見搜索條件。在 HAVING 子句中不

27、能使用 text、image 和 ntext 數(shù)據(jù)類型。說(shuō)明 在 SELECT 語(yǔ)句中使用 HAVING 子句不影響 CUBE 運(yùn)算符分組結(jié)果集和返回匯總聚合行的方式。UNION 運(yùn)算符將兩個(gè)或更多查詢的結(jié)果組合為單個(gè)結(jié)果集,該結(jié)果集包含聯(lián)合查詢中的所有查詢的全部行。這與使用聯(lián)接組合兩個(gè)表中的列不同。使用 UNION 組合兩個(gè)查詢的結(jié)果集的兩個(gè)基本規(guī)則是:所有查詢中的列數(shù)和列的順序必須相同。數(shù)據(jù)類型必須兼容。語(yǔ)法 < query specification > | ( < query expression > ) UNION ALL < query specifi

28、cation | ( < query expression > ) UNION ALL < query specification | ( < query expression > ) .n 參數(shù)< query_specification > | ( < query_expression > )是查詢規(guī)范或查詢表達(dá)式,用以返回與另一個(gè)查詢規(guī)范或查詢表達(dá)式所返回的數(shù)據(jù)組合的數(shù)據(jù)。作為 UNION 運(yùn)算一部分的列定義可以不相同,但它們必須通過(guò)隱性轉(zhuǎn)換實(shí)現(xiàn)兼容。下表說(shuō)明數(shù)據(jù)類型與相應(yīng) (ith) 列的選項(xiàng)的比較規(guī)則。ith 列的數(shù)據(jù)類型 結(jié)果表中

29、 ith 列的數(shù)據(jù)類型非數(shù)據(jù)兼容類型(數(shù)據(jù)轉(zhuǎn)換不由 Microsoft? SQL Server? 隱性處理)。 SQL Server 返回的錯(cuò)誤。長(zhǎng)度為 L1 和 L2 的固定長(zhǎng)度 char。 長(zhǎng)度與 L1 和 L2 中較長(zhǎng)的那個(gè)相等的固定長(zhǎng)度 char。長(zhǎng)度為 L1 和 L2 的固定長(zhǎng)度 binary。 長(zhǎng)度與 L1 和 L2 中較長(zhǎng)的那個(gè)相等的固定長(zhǎng)度 binary。任一列或兩列都是可變長(zhǎng)度 char。 長(zhǎng)度與為 ith 列指定的最大長(zhǎng)度相等的可變長(zhǎng)度 char。任一列或兩列都是可變長(zhǎng)度 binary。 長(zhǎng)度與為 ith 列指定的最大長(zhǎng)度相等的可變長(zhǎng)度 binary。兩列都是數(shù)字?jǐn)?shù)據(jù)類型(

30、如 smallint、int、float、money)。 與兩列的最大精度相等的數(shù)據(jù)類型。例如,如果表 A 的 ith 列是 int 類型,表 B 的 ith 列是float 類型,則 ith 列在結(jié)果表中的數(shù)據(jù)類型是 float,因?yàn)?float 比 int 更精確。 兩列的描述都指定 NOT NULL。 指定 NOT NULL。UNION指定組合多個(gè)結(jié)果集并將其作為單個(gè)結(jié)果集返回。ALL在結(jié)果中包含所有的行,包括重復(fù)行。如果沒有指定,則刪除重復(fù)行。 ORDER BY 子句指定結(jié)果集的排序。除非同時(shí)指定了 TOP,否則 ORDER BY 子句在視圖、內(nèi)嵌函數(shù)、派生表和子查詢中無(wú)效。語(yǔ)法 OR

31、DER BY order_by_expression ASC | DESC ,.n 參數(shù)order_by_expression指定要排序的列??梢詫⑴判蛄兄付榱忻蛄械膭e名(可由表名或視圖名限定)和表達(dá)式,或者指定為代表選擇列表內(nèi)的名稱、別名或表達(dá)式的位置的負(fù)整數(shù)。 可指定多個(gè)排序列。ORDER BY 子句中的排序列序列定義排序結(jié)果集的結(jié)構(gòu)。 ORDER BY 子句可包括未出現(xiàn)在此選擇列表中的項(xiàng)目。然而,如果指定SELECT DISTINCT,或者如果 SELECT 語(yǔ)句包含 UNION 運(yùn)算符,則排序列必定出現(xiàn)在選擇列表中。此外,當(dāng) SELECT 語(yǔ)句包含 UNION 運(yùn)算符時(shí),列名或列的

32、別名必須是在第一選擇列表內(nèi)指定的列名或列的別名。說(shuō)明 在 ORDER BY 子句中不能使用 ntext、text 和 image 列。ASC指定按遞增順序,從最低值到最高值對(duì)指定列中的值進(jìn)行排序。DESC指定按遞減順序,從最高值到最低值對(duì)指定列中的值進(jìn)行排序??罩当灰暈樽畹偷目赡苤?。對(duì) ORDER BY 子句中的項(xiàng)目數(shù)沒有限制。然而,對(duì)于排序操作所需的中間級(jí)工作表的大小有 8,060 字節(jié)的限制。這限制了在 ORDER BY 子句中指定的列的合計(jì)大小。COMPUTE 子句生成合計(jì)作為附加的匯總列出現(xiàn)在結(jié)果集的最后。當(dāng)與 BY 一起使用時(shí),COMPUTE 子句在結(jié)果集內(nèi)生成控制中斷和分類匯總???/p>

33、在同一查詢內(nèi)指定 COMPUTE BY 和 COMPUTE。語(yǔ)法 COMPUTE AVG | COUNT | MAX | MIN | STDEV | STDEVP| VAR | VARP | SUM ( expression ) ,.n BY expression ,.n 參數(shù)AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM指定要執(zhí)行的聚合。下面是 COMPUTE 子句使用的行聚合函數(shù):行聚合函數(shù) 結(jié)果AVG 數(shù)字表達(dá)式中所有值的平均值COUNT 選定的行數(shù)MAX 表達(dá)式中的最高值MIN 表達(dá)式中的最低值STDEV 表達(dá)式中

34、所有值的統(tǒng)計(jì)標(biāo)準(zhǔn)偏差STDEVP 表達(dá)式中所有值的填充統(tǒng)計(jì)標(biāo)準(zhǔn)偏差SUM 數(shù)字表達(dá)式中所有值的和VAR 表達(dá)式中所有值的統(tǒng)計(jì)方差VARP 表達(dá)式中所有值的填充統(tǒng)計(jì)方差沒有等同于 COUNT(*) 的函數(shù)。若要查找由 GROUP BY 和 COUNT(*) 生成的匯總信息,請(qǐng)使用不帶 BY 的 COMPUTE 子句。這些函數(shù)忽略空值。如果是用 COPPUT 子句指定的行聚合函數(shù),則不允許它們使用 DISTINCT 關(guān)鍵字。當(dāng)添加或平均整數(shù)數(shù)據(jù)時(shí),即使列的數(shù)據(jù)類型為 smallint 或 tinyint,SQLServer 也將結(jié)果視為 int 值。有關(guān)返回添加數(shù)據(jù)或平均數(shù)據(jù)的類型的更多信息,請(qǐng)參

35、見 SUM 和 AVG。說(shuō)明 為減少在 ODBC 和 DB-Library 程序中溢出錯(cuò)誤的可能性,請(qǐng)將平均或匯總結(jié)果的所有變量聲明均作為數(shù)據(jù)類型 int。( expression )表達(dá)式,如對(duì)其執(zhí)行計(jì)算的列名。expression 必須出現(xiàn)在選擇列表中,并且必須將其指定為與選擇列表中的某個(gè)表達(dá)式完全一樣。在 expression 內(nèi)不能使用在選擇列表中指定的列的別名。說(shuō)明 在 COMPUTE 或 COMPUTE BY 子句中,不能指定 ntext、text 和 image 數(shù)據(jù)類型。BY expression在結(jié)果集內(nèi)生成控制中斷和分類匯總。expression 是 order_by_ex

36、pression 在相關(guān) ORDER BY 子句中的精確復(fù)本。一般情況下,這是列名或列的別名??芍付ǘ鄠€(gè)表達(dá)式。在 BY 后列出多個(gè)表達(dá)式可將一個(gè)組分成子組并在每個(gè)分組級(jí)別上應(yīng)用聚合函數(shù)。如果使用 COMPUTE BY,則必須也使用 ORDER BY 子句。表達(dá)式必須與在 QRDER BY 后列出的子句相同或是其子集,并且必須按相同的序列。例如,如果 ORDER BY 子句是:ORDER BY a, b, c則 COMPUTE子句可以是下面的任意一個(gè)(或全部):COMPUTE BY a, b, cCOMPUTE BY a, bCOMPUTE BY a說(shuō)明 在帶 COMPUTE 子句的 SELE

37、CT 語(yǔ)句中,選擇列表中的列順序替代 COMPUTE 子句中的聚合函數(shù)順序。ODBC 和 DB-library 程序員必須知道這種順序要求,以將聚合函數(shù)結(jié)果放在正確的位置。由于包含 COMPUTE 的語(yǔ)句生成表并且這些表的匯總結(jié)果不存儲(chǔ)在數(shù)據(jù)庫(kù)中,因此在 SELECT INTO 語(yǔ)句中不能使用 COMPUTE。因而,任何由 COMPUTE 生成的計(jì)算結(jié)果不出現(xiàn)在用 SELECT INTO 語(yǔ)句創(chuàng)建的新表內(nèi)。當(dāng) SELECT 語(yǔ)句是 DECLARE CURSOR 語(yǔ)句的一部分時(shí),不能使用 COMPUTE 子句。FOR 子句FOR 子句用于指定 BROWSE 或 XML 選項(xiàng)(BROWSE 和 X

38、ML 是不相關(guān)的選項(xiàng))。語(yǔ)法 FOR BROWSE | XML RAW | AUTO | EXPLICIT , XMLDATA , ELEMENTS , BINARY BASE64 參數(shù)BROWSE指定當(dāng)查看 DB-Library 瀏覽模式游標(biāo)中的數(shù)據(jù)時(shí)允許更新。如果表包含時(shí)間戳列(用 timestamp 數(shù)據(jù)類型定義的列),表有唯一索引且 FOR BROWSE 選項(xiàng)在 SELECT 語(yǔ)句的最后發(fā)送到 SQL Server,則可以在應(yīng)用程序中瀏覽該表。有關(guān)更多信息,請(qǐng)參見瀏覽模式。說(shuō)明 在含有 FOR BROWSE 選項(xiàng)的 SELECT 語(yǔ)句中無(wú)法使用 <lock_hint> HO

39、LDLOCK。FOR BROWSE 選項(xiàng)不能出現(xiàn)在用 UNION 運(yùn)算符聯(lián)接的 SELECT 語(yǔ)句中。 XML指定查詢結(jié)果將作為 XML 文檔返回。必須指定下列 XML 模式之一:RAW、AUTO、EXPLICIT。有關(guān) XML 數(shù)據(jù)和 SQL Server 的更多信息,請(qǐng)參見使用 FOR XML 檢索 XML 文檔。RAW獲得查詢結(jié)果并將結(jié)果集內(nèi)的各行轉(zhuǎn)換為 XML 元素,用一般標(biāo)識(shí)符 <row /> 作為元素標(biāo)記。有關(guān)更多信息,請(qǐng)參見使用 RAW 模式。AUTO以簡(jiǎn)單的嵌套 XML 樹返回查詢結(jié)果。在 FROM 子句內(nèi),每個(gè)在 SELECT 子句中至少有一列被列出的表都表示為一

40、個(gè) XML 元素。SELECT 子句中列出的列映射到適當(dāng)?shù)脑靥匦浴S嘘P(guān)更多信息,請(qǐng)參見使用 AUTO 模式。 EXPLICIT指定顯式定義所得到的 XML 樹的形狀。使用此種模式,要求以一種特定的方式編寫查詢,以便顯式指定有關(guān)期望的嵌套的附加信息。有關(guān)更多信息,請(qǐng)參見使用 EXPLICIT 模式。XMLDATA返回架構(gòu),但不將根元素添加到結(jié)果中。如果指定了 XMLDATA,它將被追加到文檔上。ELEMENTS指定列作為子元素返回。否則,列將映射到 XML 特性。BINARY BASE64指定查詢返回二進(jìn)制 base64 編碼格式的二進(jìn)制數(shù)據(jù)。使用 RAW 和EXPLICIT 模式檢索二進(jìn)制數(shù)

41、據(jù)時(shí),必須指定該選項(xiàng)。這是 AUTO 模式中的默認(rèn)值。OPTION 子句指定應(yīng)在整個(gè)查詢中使用所指定的查詢提示。每個(gè)查詢提示只能指定一次,但允許指定多個(gè)查詢提示。用該語(yǔ)句只可能指定一個(gè) OPTION 子句。查詢提示影響語(yǔ)句中的所有運(yùn)算符。如果主查詢中涉及 UNION,則只有涉及 UNION 運(yùn)算符的最后一個(gè)查詢可以有 OPTION 子句。如果一個(gè)或多個(gè)查詢提示導(dǎo)致查詢優(yōu)化器不生成有效計(jì)劃,則產(chǎn)生 8622 號(hào)錯(cuò)誤。注意 查詢優(yōu)化器通常為查詢選擇最佳執(zhí)行計(jì)劃,因此建議有經(jīng)驗(yàn)的數(shù)據(jù)庫(kù)管理員將 <join_hint>、<query_hint> 和 <table_hint

42、> 僅作為最后的手段。 語(yǔ)法 OPTION ( < query_hint > ,.n < query_hint > := HASH | ORDER GROUP| CONCAT | HASH | MERGE UNION| LOOP | MERGE | HASH JOIN| FAST number_rows| FORCE ORDER| MAXDOP number| ROBUST PLAN| KEEP PLAN| KEEPFIXED PLAN| EXPAND VIEWS參數(shù) HASH | ORDER GROUP指定在 GROUP BY、DISTINCT 或 COMPUT

43、E 查詢子句中所描述的聚合應(yīng)使用哈希操作或排列。 MERGE | HASH | CONCAT UNION指定由合并、哈?;虼?lián) UNION 集合執(zhí)行所有 UNION 運(yùn)算。如果指定了不止一個(gè) UNION 提示,查詢優(yōu)化器就會(huì)從這些指定的提示中選擇開銷最少的策略。 LOOP | MERGE | HASH JOIN指定在整個(gè)查詢中所有的聯(lián)接操作由循環(huán)聯(lián)接、合并聯(lián)接或哈希聯(lián)接來(lái)完成。如果指定了多個(gè)聯(lián)接提示,則優(yōu)化器從允許的聯(lián)接策略中選擇最便宜的聯(lián)接策略。 如果在同一個(gè)查詢中,還為一對(duì)特定的表指定了聯(lián)接提示,則雖然仍須遵守查詢提示,但該聯(lián)接提示將優(yōu)先聯(lián)接這兩個(gè)表。因此,為這對(duì)表指定的聯(lián)接提示可能只限制

44、選擇查詢提示中允許的聯(lián)接方法。有關(guān)詳細(xì)信息,請(qǐng)參見提示。 FAST number_rows指定對(duì)查詢進(jìn)行優(yōu)化,以便快速檢索第一個(gè) number_rows(非負(fù)整數(shù))。在第一個(gè) number_rows 返回后,查詢繼續(xù)進(jìn)行并生成完整的結(jié)果集。FORCE ORDER指定在查詢優(yōu)化過(guò)程中保持由查詢語(yǔ)法表示的聯(lián)接順序。MAXDOP number只對(duì)指定了 sp_configure 的 max degree of parallelism 配置選項(xiàng)的查詢替代該選項(xiàng)。當(dāng)使用 MAXDOP 查詢提示時(shí),所有和 max degree of parallelism 配置選項(xiàng)一起使用的語(yǔ)義規(guī)則均適用。有關(guān)更多信息,

45、請(qǐng)參見 max degree of parallelism 選項(xiàng)。ROBUST PLAN強(qiáng)制查詢優(yōu)化器以性能為代價(jià),使用對(duì)最大可能的行大小有效的計(jì)劃。處理查詢時(shí),中間級(jí)表和運(yùn)算符可能需要存儲(chǔ)和處理比輸入行寬的行。在有些情況下,行可能很寬,以致某個(gè)運(yùn)算符無(wú)法處理行。如果發(fā)生這種情況,SQL Server 將在查詢執(zhí)行過(guò)程中生成錯(cuò)誤。通過(guò)使用 ROBUST PLAN,可以指示查詢優(yōu)化器不考慮可能會(huì)遇到該問(wèn)題的查詢計(jì)劃。KEEP PLAN強(qiáng)制查詢優(yōu)化器對(duì)查詢放寬估計(jì)的重新編譯閾值。估計(jì)的重新編譯閾值是一個(gè)點(diǎn),基于該點(diǎn)當(dāng)對(duì)表的索引列更改(更新、刪除或插入)達(dá)到估計(jì)的數(shù)字時(shí)自動(dòng)重新編譯查詢。指定 KEEP PLAN 將確保當(dāng)表有多個(gè)更新時(shí)不會(huì)頻繁地對(duì)查詢進(jìn)行重新編譯。KEEPFIXED PLAN強(qiáng)制查詢優(yōu)化器不因統(tǒng)計(jì)中的更改或索引列(更新、刪除或插入)而重新編譯查詢。指定 KEEPFIXED PLAN 將確保僅當(dāng)更改基礎(chǔ)表的架構(gòu)或在那些表上執(zhí)行 sp_recompile 時(shí)才重新編譯查詢。EXPAND VIEWS指定展開索引視圖,而且查詢優(yōu)化器不將任何索引視圖看作是查詢中任何部分的替代。(當(dāng)視圖名稱由查詢文本中的視圖定義替換時(shí),視圖將展開。)實(shí)際上,該查詢提示不允許在查詢計(jì)劃中直接使用索引視圖和直接在索引視圖上使用索引。 只有在查

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論