用SELECT語句查詢記錄-《SQL-Server2005程序設計語言》_第1頁
用SELECT語句查詢記錄-《SQL-Server2005程序設計語言》_第2頁
用SELECT語句查詢記錄-《SQL-Server2005程序設計語言》_第3頁
用SELECT語句查詢記錄-《SQL-Server2005程序設計語言》_第4頁
用SELECT語句查詢記錄-《SQL-Server2005程序設計語言》_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SQLServer2005數據庫程序設計語言第7章數據操作7.1用SELECT語句查詢記錄1、檢索數據2、數據分組與匯總3、其它操作1、檢索數據1.1使用SELECT語句檢索數據1.2過濾數據1.3設置結果集格式1.4需要考慮的性能問題1.5推薦操作1.1使用SELECT語句檢索數據1.1.1使用SELECT語句1.1.2指定列1.1.3使用WHERE子句指定行SELECT[ALL|DISTINCT][TOPn]<選擇列表>

[FROM]{<表資源>}[,…n]

[WHERE]<搜索條件>[GROUPBY]{<分組表達式>}[,…n][HAVING]<搜索條件>[ORDERBY]{<字段名[ASC|DESC]>}[,…n]基本語法使用SELECT語句用[]括起來的是可選項,SELECT是必需的選擇列表指定了要返回的列WHERE子句指定限制查詢的條件

在搜索條件中,可以使用比較操作符、字符串、邏輯操作符來限制返回的行數1.1.1使用SELECT語句使用SELECT語句(續(xù))FROM子句知道了返回的行和列所屬的表DISTINCT選項從結果集中消除了重復的行,TOPn選項限定了要返回的行數GROUPBY子句是對結果集進行分組HAVING子句是在分組的時候,對字段或表達式指定搜索條件ORDERBY子句對結果集按某種條件進行排序

1.1.1使用SELECT語句指定列1.1.2指定列在選擇列表中指定要從表中返回的列在選擇列表中可以包含字段名、表達式、所選關鍵字或要賦值的局部變量。其語法為<選擇列表>::=

{*|{表名|視圖名|表的別名}.*

|{字段名|表達式

|$IDENTITY|$ROWGUID}

[[AS]字段別名]

|字段別名=表達式

}[,...n]指定要檢索的字段時,請注意選擇列表將按照指定順序查找并顯示所查詢的字段不同的字段名用“,”分開在選擇列表中,避免或盡量少使用符號“*”。該符號代表選擇表中所有的字段

查詢指定列通過指定SELECT子句的<目標表達式>來完成例1、查詢全體學生的學號和姓名。

SELECT例2、查詢全體學生的姓名、學號、年齡。

SELECTSno,SnameFROMStudentSname,Sno,Sage

FROM

Student Student(Sno,Sname,Ssex,Sage,Sdept)<目標列表達式>中各個列的先后順序可以與表中的順序不一致。用戶可以根據應用的需要改變列的顯示順序。本例中先列出姓名,再列學號和年齡。查詢全部列“*”:表示“所有的屬性”。例3給出所有學生的信息。

selectSno,Sname,Ssex,Sage,Sdept fromStudentselect*fromStudent等價于:Student(Sno,Sname,Ssex,Sage,Sdept)查詢經過計算的值select子句的<目標列表達式>不僅可以是表中的屬性列,也可以是表達式selectSNAME,2011-SagefromStudent例4給出所有學生的姓名及其出生年份。Student(Sno,Sname,Ssex,Sage,Sdept)例5給出所有學生姓名、出生年份和所在系編號,要求用小寫字母表示所有系名。selectSname,’YearofBirth’,2011-Sagefrom,

LOWER(Sdept)STUDENT

<目標表達式>不僅可以是算術表達式,還可以是字符串常量、函數。使用WHERE子句指定行1.1.3使用WHERE子句指定行通過使用WHERE子句,可以得到基于搜索條件的行<搜索條件>::=

{[NOT]<斷言>|(<搜索條件>)}

[{AND|OR}[NOT]{<斷言>|(<搜索條件>)}]

}[,...n]<斷言>列出了可以在WHERE子句中包含的表達式列表使用WHERE子句指定行時,請注意在所有數據類型為char、nchar、varchar、nvarchar、text、datetime和smalldatetime

的數據周圍,必須使用單引號(‘)在使用SELECT語句時,盡量使用WHERE語句限制將要返回的行使用WHERE子句指定行(續(xù))employeeidlastnamefirstnametitle5BuchananStevenSalesManagerUSEnorthwindSELECTemployeeid,lastname,firstname,titleFROMemployeesWHEREemployeeid=5GO示例1.1.3使用WHERE子句指定行1、檢索數據1.1使用SELECT語句檢索數據1.2過濾數據1.3設置結果集格式1.4需要考慮的性能問題1.5推薦操作過濾數據1.2過濾數據過濾的類型搜索條件使用比較運算符=、>、<、>=、<=、<>使用字符串比較符LIKE和NOTLIKE使用邏輯運算符AND、OR檢索一定范圍內的值BETWEEN和NOTBETWEEN使用值列表作為搜索條件IN和NOTIN檢索未知值ISNULL和ISNOTNULL使用比較運算符1.2.1使用比較運算符使用比較操作符來比較表中的值與指定的值或表達式的值USEnorthwindSELECTlastname,cityFROMemployeesWHEREcountry='USA'GO使用字符串比較符1.2.2使用字符串比較符在比較字符串時,可以使用LIKE和通配符來查找需要的行通配符的種類通配符描述%0或多個字符串_任何單個的字符[]在指定區(qū)域或集合內的任何單個字符[^]不在指定區(qū)域或集合內的任何單個字符使用字符串比較符(續(xù))1.2.2使用字符串比較符表達式LIKE'%EEN'LIKE'_EEN'LIKE'[CK]'LIKE'[S-V]'LIKE'99[0-9][0-9]'LIKE'[A-Z][0-9][FM]'LIKE'M[^C]'LIKE'5_\%'ESCAPE'\'使用邏輯運算符1.2.3使用邏輯運算符用邏輯操作符AND、OR和NOT

來連接一系列的表達式,及優(yōu)化查詢過程。使用邏輯運算符時,遵循下列原則使用AND返回滿足所有條件的行使用OR返回滿足任一條件的行使用NOT返回不滿足條件的行有多個表達式時,使用圓括號為表達式分組改變表達式求值順序增加表達式的可讀性使用邏輯運算符(續(xù))搜索條件的順序MicrosoftSQLServer首先求NOT表達式的值,然后是AND,最后是OR當表達式中所有的操作符優(yōu)先級相同時,求值順序由左到右1.2.3使用邏輯運算符(productnameLIKE'T%'ORproductid=46)

AND(unitprice>16.00)(productnameLIKE'T%')OR(productid=46ANDunitprice>16.00)

檢索一定范圍內的值使用BETWEEN來查詢在一定范圍內的值,使用BETWEEN時,注意SQLServer返回的結果集中,包含范圍內的邊緣值盡量使用BETWEEN,而不用AND和比較操作符表示的表達式(>=xAND<=y)。要使結果集不包含邊緣值,則使用(>xAND<y)要返回不在指定區(qū)域的行時,使用NOTBETWEEN1.2.4檢索一定范圍內的值unitpriceBETWEEN10AND20使用值列表作為搜索條件1.2.5使用值列表作為搜索條件使用IN語句指定一個值的列表作為查詢條件。使用IN時,注意使用IN搜索條件和使用由OR操作符連起來的一系列比較操作符,其效果是等價的在搜索條件中不能包含NULL值,這將返回不可預測的結果集使用NOTIN搜索條件來返回值不在指定列表中的行。使用NOT會降低數據檢索速度countryIN('Japan','Italy')country='Japan‘orcountry='Italy'檢索未知值1.2.6檢索未知值輸入數據時,沒有指定一個字段的值,且此字段沒有定義默認值的值,稱此字段含有空值(NULL)使用ISNULL搜索條件來查詢某指定列沒任何信息的行。需要返回含有空值的行時,注意把空值和任何表達式比較都會失敗,因為空值不等于任何表達式在CREATETABLE語句里,定義一個字段是否允許空值的存在使用ISNOTNULL來查詢指定列中非空的行ScoreISNULL1、檢索數據1.1使用SELECT語句檢索數據1.2過濾數據1.3設置結果集格式1.4需要考慮的性能問題1.5推薦操作設置結果集格式對數據進行排序消除重復行改變列名使用字面值FOR子句UNION[ALL]1.3設置結果集格式對數據進行排序1.3.1對數據進行排序使用ORDERBY子句為結果集中的行排序時,有升序和降序兩種。使用ORDERBY時,注意在安裝SQLServer時,排序順序已指定除非使用ORDERBY指定順序,SQLServer并不主動為結果集中的行排序SQLServer缺省地按升序排列ORDERBY子句中指定的列并不一定要出現在選擇列表中可以按照字段名、計算出的值或表達式進行排序可以在ORDERBY子句中引用某字段在選擇列表中的位置而進行排序ORDERBY子句不能用于數據類型text、ntext或image字段對數據進行排序(續(xù))USEnorthwindSELECTproductid,productname,categoryid,unitpriceFROMproductsORDERBYcategoryid,unitpriceDESCGOproductidproductnamecategoryidunitprice38CotedeBlaye1263.500043IpohCoffee146.00002Chang119.0000…………63Vegie-spread243.90008NorthwoodsCranberrySauce240.000061Siropd'érable228.5000…………示例1.3.1對數據進行排序消除重復行1.3.2消除重復行用DISTINCT可以消除重復行,使結果集列出惟一的值。使用DISTINCT時,注意除非指定DISTINCT子句,否則SELECT語句將返回所有滿足搜索條件的行選擇列表中所有列的組合值將決定其惟一性包含任何惟一組合值的行都將被檢索到并被返回到結果集中除非使用了ORDERBY子句,否則DISTINCT子句將按隨機的順序顯示結果集中的行消除重復行(續(xù))USEnorthwindSELECTDISTINCTcountryFROMsuppliersORDERBYcountryGOcountryAustraliaBrazilCanadaDenmarkFinlandFranceGermanyItalyJapanNetherlandsNorwaySingaporeSpainSwedenUKUSA示例1.3.2消除重復行改變列名1.3.3改變列名為了提高可讀性,可以為選擇列表中的字段名起別名改變字段名時,應注意缺省情況下,結果集所顯示的字段名,就是在CREATETABLE語句中指定的字段名如果字段名中有空格,或字段名不符合SQLServer命名規(guī)則,用單引號來標識這個字段名可以為經過計算的包含函數、字符符號的字段起別名字段名中至多可以包含128個字符改變列名(續(xù))USEnorthwindSELECTfirstnameASFirst,lastnameLast ,'EmployeeID:'=employeeidFROMemployeesFirstLastEmployeeID:NancyDavolio1AndrewFuller2JanetLeverling3MargaretPeacock4StevenBuchanan5MichaelSuyama6RobertKing7LauraCallahan8AnneDodsworth91.3.3改變列名示例使用字面值1.3.4使用字面值使用字面值可以增加結果集的可讀性,符號可能是字母、數字或標識,它們被用作特定的值。其語法為SELECT字段名

|’字符串符號’[,字段名

|’字符串符號’…]

FROM表名USEnorthwindSELECTfirstname,lastname ,'Identificationnumber:',employeeidFROMemployees

GOFOR子句FOR子句用來指定BROWSE或XML選項,主要在應用程序的開發(fā)中經常使用。FOR子句生成XML的詳細使用介紹請參考第24章。本節(jié)通過一個使用FOR子句的示例,簡單說明其一般的功能。1.3.5FOR子句USEnorthwindSELECTcountryFROMsuppliersORDERBYcountryforxmlautoGO示例UNION[ALL]將兩個或更多查詢的結果合并為單個結果集,該結果集包含聯(lián)合查詢中的所有查詢的全部行。UNION運算不同于使用聯(lián)接合并兩個表中的列的運算。1.3.6UNION[ALL]USEAdventureWorksSELECTProductModelID,NameFROMProduction.ProductModelUNIONSELECTProductModelID,NameFROMdbo.ProductModel2ORDERBYName;使用UNION合并兩個查詢結果集的基本規(guī)則:所有查詢中的列數和列的順序必須相同。數據類型必須兼容。需要考慮的性能問題非邏輯操作會降低查詢速度

比如:NOTBETWEEN、NOTIN和ISNOTNULL

LIKE搜索條件會降低查詢速度使用精確查詢或在一定范圍的查詢可能會提高數據查詢速度ORDERBY子句可能降低數據查詢速度

因為SQLServer在返回第一行前,必須對結果集中所有的行進行計算并排序1.4需要考慮的性能問題推薦操作使用DISTINCT子句消除結果集中重復的行通過改變字段名和使用字面值來提高結果集的可讀性提出問題我們遇到了下面的問題:我們擁有桌子和椅子兩種產品,每種產品都有紅色和藍色兩種顏色。每種顏色的桌子有多少庫存,每種顏色的椅子有多少庫存。椅子有多少庫存,不論它是什么顏色;桌子有多少庫存,不論它是什么顏色。紅色的商品一共有多少庫存,藍色的商品一共有多少庫存。這個時候大家發(fā)現,我們需要的是以不同商品種類和顏色進行排列組合的小計報表。2、數據分組與匯總使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作使用TOPn

列出前n個記錄2.1使用TOPn列出前n個記錄關鍵字TOPn

只列出結果集中前n

個或前n%的記錄。使用TOPn

或TOPnPERCENT時,應注意在ORDERBY子句中指定值的范圍關鍵字TOP后使用無符號的整數如果TOPnPERCENT生成小數,則SQLServer將把這個數取整可以在結果集中用WITHTIES子句包含那些值相等的記錄,這時結果集中可以包含任意數目的行部分語法:SELECT[ALL|DISTINCT]

[TOPn[PERCENT][WITHTIES]]

<select_list>……要求:--1、檢索出SC表中的所有成績記錄--2、檢索出SC表中的前5條成績記錄--3、檢索出SC表中的前50%的成績記錄--4、檢索出SC表中的前5%的成績記錄。注意觀察有幾條記錄。? --5、檢索出SC表中成績前5名的學生學號--6、檢索出SC表中成績前5名的學生學號使用TOPn

列出前n個記錄2.1使用TOPn列出前n個記錄限制結果集大小的另一種方法是在執(zhí)行一個語句之前執(zhí)行SETROWCOUNTn語句。SETROWCOUNT與TOP的不同之處在于:TOP子句適用于指定了該子句的單個SELECT語句。在執(zhí)行另一個SETROWCOUNT語句之前,SETROWCOUNT會一直有效,例如執(zhí)行

SETROWCOUNT0

將會關閉此選項。SETROWCOUNTn使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作2、數據分組與匯總使用TABLESAMPLE限制結果集2.2使用TABLESAMPLE限制結果集

TABLESAMPLE子句將從FROM子句中的表返回的行數限制到樣本數或行數的某一百分比。不能對視圖使用TABLESAMPLE。部分語法:TABLESAMPLE[SYSTEM](sample_number[PERCENT|ROWS])--執(zhí)行幾次代碼,所得到的結果是不同的USEAdventureWorks;GOSELECTcount(*)FROMSales.CustomerTABLESAMPLESYSTEM(10PERCENT);使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作2、數據分組與匯總使用聚合函數(續(xù))2.3使用聚合函數計算諸如平均值和總和的函數稱為聚合函數SQLServer對整個表或表里某個組中的字段進行匯總、計算,然后生成單個的值可以在SELECT語句中單獨使用聚合函數,也可以與語句GROUPBY聯(lián)合使用除了COUNT(*)函數,如果記錄集中沒有滿足WHERE子句的記錄,則所有函數返回空值,COUNT(*)返回0字段的數據類型決定了可以用在該字段上的聚合函數類型如:SUM和AVG只能用在數據類型代表數字的字段上使用含有空值的聚合函數空值能使聚合函數產生意想不到的結果對包含空值的字段使用聚合函數時,應注意SQLServer的聚合函數(COUNT(*)除外)將忽略字段中的空值COUNT(*)將計算所有的行,即使每個字段都含有空值2.3.1使用含有空值的聚合函數createtabletable1(snochar(5),agetinyint)insertintotable1values('95001',null)insertintotable1values('95002',null)insertintotable1values(null,null)insertintotable1values('95003',null)--以下返回的結果分別是什么selectcount(*)fromtable1selectcount(sno)fromtable1selectcount(age)fromtable1selectavg(age)fromtable1ISNULL()的使用

selectavg(salary)fromavg_testselectavg(isnull(salary,0))fromavg_test常見的聚合函數及其描述聚合函數描述AVG 返回組中值的平均值??罩祵⒈缓雎?。COUNT 表達式中值的數目COUNT(*)所選擇的行的數目MAX返回表達式的最大值。MAX忽略任何空值。對于字符列,MAX查找排序序列的最大值。MIN返回表達式的最小值。MIN忽略任何空值。對于字符列,MIN查找排序序列的最低值。SUM返回表達式中所有值的和,或只返回DISTINCT值。SUM只能用于數字列??罩祵⒈缓雎?。GROUPING是一個聚合函數,它產生一個附加的列,當用CUBE或ROLLUP運算符添加行時,附加的列輸出值為1,當所添加的行不是由CUBE或ROLLUP產生時,附加列值為0。僅在與包含CUBE或ROLLUP運算符的GROUPBY子句相聯(lián)系的選擇列表中才允許分組。分組用于區(qū)分由CUBE和ROLLUP返回的空值和標準的空值。作為CUBE或ROLLUP操作結果返回的NULL是NULL的特殊應用。它在結果集內作為列的占位符,意思是"全體"。使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作2、數據分組與匯總GROUPBY的基礎知識使用GROUPBY子句聯(lián)合使用GROUPBY子句和HAVING子句2.4GROUPBY的基礎知識GROUPBY子句包含以下組件:一個或多個自由聚合的表達式。通常是對分組列的引用。ALL關鍵字(可選),該關鍵字指定返回由GROUPBY子句產生的所有組,即使某些組沒有符合搜索條件的行。CUBE或ROLLUP(注意:在GROUPBYALL子句中,不允許使用CUBE和ROLLUP選項。)HAVING子句(注意:不要聯(lián)合使用關鍵字ALL和HAVING子句。因為HAVING子句會忽略ALL關鍵字,并返回只符合HAVING條件的組)--下面的例子給出了針對所有type和pub_id的唯一組合進行分類并統(tǒng)計計算的情況。usepubsgoselecttype,pub_id,avg(price)'avg_price',sum(price)'sum_price'fromtitleswheretypein('business','trad_cook')groupbyalltype,pub_idorderbytype使用GROUPBY子句2.4.1使用GROUPBY子句聯(lián)合使用聚合函數和GROUPBY子句,能夠把表中的記錄分組,并對組中數據進行匯總。使用

GROUPBY子句時,應注意SQLServer將為每一組計算一個匯總值,并把匯總值保存在一個字段中對于指定的一組,SQLServer只生成一條記錄,不返回詳細信息SQLServer只對滿足WHERE子句的記錄進行分組和匯總GROUPBY子句的字段列表至多包含8060個字節(jié)不要對可包含空值的字段使用GROUPBY子句,因為空值也將被當作一組ALL關鍵字(可選),該關鍵字指定返回由

GROUPBY子句產生的所有組,即使某些組沒有符合搜索條件的行。createtablep1(snochar(3),sexchar(8),ageint)insertintop1values('001','m',20)insertintop1values(null,null,null)insertintop1values(null,null,null)selectcount(sno)fromp1groupbysno不要對可包含空值的字段使用GROUPBY子句,因為空值也將被當作一組使用GROUPBY子句(續(xù))SELECTproductid,orderid

,quantityFROMorderhist

GOSELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductid

GOproductidtotal_quantity115235345productidorderidquantity11511102110222531153230productidtotal_quantity235只對滿足WHERE子句的行分組SELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistWHEREproductid=2GROUPBYproductid

GO示例1示例22.4.1使用GROUPBY子句聯(lián)合使用GROUPBY子句和HAVING子句2.4.2聯(lián)合使用GROUPBY子句和HAVING子句在分組的同時,對字段或表達式指定搜索條件使用

HAVING子句時,應注意只在使用GROUPBY子句的同時,使用HAVING子句來限制分組可以引用任何出現在選擇列表中的字段不要聯(lián)合使用關鍵字ALL和HAVING子句。因為HAVING子句會忽略ALL關鍵字,并返回只符合HAVING條件的組聯(lián)合使用GROUPBY子句和HAVING子句(續(xù))SELECTproductid,orderid,quantityFROMorderhist

GOSELECTproductid,SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductidHAVINGSUM(quantity)>=30

GOproductidtotal_quantity235345productidorderidquantity115111021102225311532302.4.2聯(lián)合使用GROUPBY子句和HAVING子句使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作2、數據分組與匯總在結果集中生成匯總值使用帶有CUBE運算符的GROUPBY子句使用帶有ROLLUP運算符的GROUPBY子句使用GROUPING函數2.5在結果集中生成匯總值使用帶有CUBE運算符的GROUPBY子句2.5.2使用帶有CUBE運算符的GROUPBY子句使用帶有CUBE運算符的GROUPBY子句創(chuàng)建并匯總所有可能的基于GROUPBY子句分組的組合。使用帶有CUBE運算符的GROUPBY子句用于提供標準的關系型格式的數據。selectitem,color,sum(quantity)fromcpgroupbyitem,colorwithcubechair、blue的詳細值chair、red的詳細值匯總chair的所有記錄table、blue的詳細值table、red的詳細值匯總table的所有記錄總計匯總bule的所有記錄匯總red的所有記錄每種產品的每種顏色的總數量,每種產品的所有顏色的總數量,每種顏色的所有產品的總數量,所有產品所有顏色的總數量。使用帶有CUBE運算符的GROUPBY子句2.5.2使用帶有CUBE運算符的GROUPBY子句使用

GROUPBY子句和CUBE操作符時,應注意如果在GROUPBY子句中有

n個字段或表達式,SQLServer將在結果集中返回2n種可能的組合結果集中含有NULL的記錄代表該記錄由CUBE操作符生成(注意此NULL不是基本表中的實際空值)不能同時使用關鍵字ALL和操作符CUBE使用帶有ROLLUP運算符的GROUPBY子句2.5.1使用帶有ROLLUP運算符的GROUPBY子句ROLLUP運算符的功能類似于CUBE運算符。使用帶有ROLLUP運算符的GROUPBY子句匯總分組值使用帶有ROLLUP運算符的GROUPBY子句用于提供標準的關系型格式的數據。selectitem,color,sum(quantity)fromcpgroupbyitem,colorwithrollupchair、blue的詳細值chair、red的詳細值匯總chair的所有記錄table、blue的詳細值table、red的詳細值匯總table的所有記錄總計每種產品的每種顏色的總數量,每種產品的所有顏色的總數量,所有產品所有顏色的總數量。使用帶有ROLLUP運算符的GROUPBY子句2.5.1使用帶有ROLLUP運算符的GROUPBY子句使用

GROUPBY子句和ROLLUP操作符時,應注意SQLServer將在結果集中增加一行,這行將顯示總和或平均值之類的匯總值,新增的行以NULL標識不能同時使用關鍵字ALL和操作符ROLLUP使用GROUPING函數2.5.3使用GROUPING函數如何區(qū)分CUBE操作或ROLLUP運算符所生成的NULL值和從實際數據中返回的NULL值?使用GROUPING區(qū)分空值如果列中的值來自事實數據,則GROUPING函數返回0;如果列中的值是CUBE操作或ROLLUP操作所生成的NULL,則返回1。在CUBE或ROLLUP操作中,所生成的NULL代表全體值。insertintocpvalues('table',null,202)insertintocpvalues('table',null,180)selectitem,grouping(item),color,grouping(color),sum(quantity)fromcpgroupbyitem,colorwithcube使用帶有CUBE運算符的GROUPBY子句CUBE操作符比ROLLUP操作符

多產生兩個匯總值SELECTproductid,orderid,SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductid,orderidWITHCUBEORDERBYproductid,orderid

GO描述總數對

orderid1中的所有行匯總對

orderid2中的所有行匯總只對productid1中的行匯總productid1、

orderid1的具體值productid1、

orderid2的具體值只對

productid2中的行匯總productid2、

orderid1的具體值productid2、orderid2的具體值只對

productid3中的行匯總productid3、

orderid1的具體值productid3、orderid2的具體值productidorderidtotal_quantityNULLNULL95NULL130NULL2651NULL1511512102NULL35211022253NULL4531153230示例描述使用帶有ROLLUP運算符的GROUPBY子句SELECTproductid,orderid,SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductid,orderidWITHROLLUPORDERBYproductid,orderid

GOproductidorderidtotal_quantityNULLNULL951NULL1511512102NULL35211022253NULL4531153230示例總數只對productid1中的行匯總productid1、

orderid1的具體值productid1、

orderid2的具體值只對

productid2中的行匯總productid2、

orderid1的具體值productid2、orderid

2的具體值只對

productid3中的行匯總productid3、orderid

1的具體值productid3、orderid2的具體值1代表前一字段的匯總值0代表前一字段的具體值95306515510351025451530使用GROUPING函數(續(xù))SELECTproductid,GROUPING(productid),orderid,GROUPING(orderid),SUM(quantity)AStotal_quantityFROMorderhistGROUPBYproductid,orderidWITHCUBEORDERBYproductid,orderid

GOproductidNULLNULLNULL111222333111000000000orderidNULL12NULL12NULL12NULL12100100100100total_quantity示例問題:ROLLUP和CUBE的區(qū)別在什么地方?CUBE生成的結果集顯示了所選列中值的所有組合的聚合;ROLLUP生成的結果集顯示了所選列中值的某一層次結構的聚合。使用TOPn列出前n個記錄使用TABLESAMPLE限制結果集使用聚合函數GROUPBY的基礎知識在結果集中生成匯總值使用COMPUTE和COMPUTEBY子句推薦操作2、數據分組與匯總使用COMPUTE和COMPUTEBY子句2.6使用COMPUTE和COMPUTEBY子句生成某一列的明細值和匯總值的報表為組中的子集生成明細值和匯總值的報表使用COMPUTE和COMPUTEBY子句(續(xù))COMPUTEBYCOMPUTESELECTproductid,orderid,quantityFROMorderhistORDERBYproductid,orderidCOMPUTESUM(quantity)BYproductidCOMPUTESUM(qua

溫馨提示

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

評論

0/150

提交評論