【正文】
用戶在臨時(shí)備份表中的數(shù)據(jù)時(shí),使用該子句非常的有效,本節(jié)講述該子句的語法。 ?使用帶有 CUBE運(yùn)算符的 GROUP BY子句用于提供 標(biāo)準(zhǔn)的關(guān)系型格式 的數(shù)據(jù)。 ? 語法: GROUP BY [ALL]group_by_expression[,…n] [WITH] {CUBE | ROLLUP } ] ] group_by_expression 用于分組的表達(dá)式,WITH指定 CUBE或 ROLLUP操作符。空值將被忽略。語法格式: SUM | AVG (ALL | DISTINCT] expression) SUM | AVG忽略空值。 需要考慮的性能問題 非邏輯操作會(huì)降低查詢速度 比如: NOT BETWEEN 、 NOT IN 和 IS NOT NULL LIKE 搜索條件會(huì)降低查詢速度 使用精確查詢或在一定范圍的查詢可能會(huì)提高數(shù)據(jù)查詢速度 ORDER BY 子句可能降低數(shù)據(jù)查詢速度 因?yàn)? SQL Server 在返回第一行前,必須對結(jié)果集中所有的行進(jìn)行計(jì)算并排序 需要考慮的性能問題 推薦操作 使用 DISTINCT 子句消除結(jié)果集中重復(fù)的行 通過改變字段名和使用字面值來提高結(jié)果集的可讀性 提出問題 我們遇到了下面的問題:我們擁有桌子和椅子兩種產(chǎn)品,每種產(chǎn)品都有紅色和藍(lán)色兩種顏色。使用 ORDER BY 時(shí),注意 ? 除非使用 ORDER BY 指定順序, SQL Server 并不主動(dòng)為結(jié)果集中的行排序 ? SQL Server 缺省地按升序排列 ? ORDER BY 子句中指定的列并不一定要出現(xiàn)在選擇列表中 ? 可以按照字段名、計(jì)算出的值或表達(dá)式進(jìn)行排序 ? 可以在 ORDER BY 子句中引用某字段在選擇列表中的位置而進(jìn)行排序 ? ORDER BY 子句不能用于數(shù)據(jù)類型 text 、 ntext或 image 字段 對數(shù)據(jù)進(jìn)行排序(續(xù)) USE northwind SELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESC GO productid productname categoryid unitprice 38 Cote de Blaye 1 43 Ipoh Coffee 1 2 Chang 1 … … … … 63 Vegiespread 2 8 Northwoods Cranberry Sauce 2 61 Sirop d39。使用邏輯運(yùn)算符時(shí),遵循下列原則 ?使用 AND 返回滿足所有條件的行 ?使用 OR 返回滿足任一條件的行 ?使用 NOT 返回不滿足條件的行 ?有多個(gè)表達(dá)式時(shí),使用圓括號 ?為表達(dá)式分組 ?改變表達(dá)式求值順序 ?增加表達(dá)式的可讀性 使用邏輯運(yùn)算符(續(xù)) ?搜索條件的順序 ? Microsoft SQL Server 首先求 NOT 表達(dá)式的值,然后是 AND,最后是 OR ?當(dāng)表達(dá)式中所有的操作符優(yōu)先級相同時(shí),求值順序由左到右 使用邏輯運(yùn)算符 (productname LIKE 39。[SV]39。 GO 使用字符串比較符 使用字符串比較符 ?在比較字符串時(shí),可以使用 LIKE 和通配符來查找需要的行 通配符的種類 通配符 描述 % 0或多個(gè)字符串 _ 任何 單 個(gè)的字符 [] 在指定區(qū)域或集合內(nèi)的任何 單 個(gè)字符 [^] 不在指定區(qū)域或集合內(nèi)的任何 單 個(gè)字符 使用字符串比較符(續(xù)) 使用字符串比較符 表達(dá)式 LIKE 39。 ESCAPE 39。, 39。 FOR子句生成 XML的詳細(xì)使用介紹請參考第 24章。在執(zhí)行另一個(gè) SET ROWCOUNT 語句之前, SET ROWCOUNT 會(huì)一直有效,例如執(zhí)行 SET ROWCOUNT 0 將會(huì) 關(guān)閉 此選項(xiàng)。 使用聚合函數(shù)(續(xù)) 使用聚合函數(shù) 使用含有空值的聚合函數(shù) 空值能使聚合函數(shù)產(chǎn)生意想不到的結(jié)果 對包含空值的字段使用聚合函數(shù)時(shí),應(yīng)注意 ?SQL Server 的聚合函數(shù)( COUNT(*) 除外)將忽略字段中的空值 ?COUNT( *)將計(jì)算所有的行,即使每個(gè)字段都含有空值 使用含有空值的聚合函數(shù) create table table1(sno char(5),age tinyint) insert into table1 values(39??罩祵⒈缓雎?。trad_cook39。,null,202) insert into cp values(39。 ?結(jié)果: 。 insert into cp values(39。business39。 SUM 返回表達(dá)式中所有值的和,或只返回 DISTINCT 值。語法格式: COUNT ( { [ ALL | DISTINCT] expression} | *) 選擇 *時(shí)將統(tǒng)計(jì)總行數(shù)。注意觀察有幾條記錄 ? 檢索出 SC表中成績前 5名的學(xué)生學(xué)號 select * from sc 使用 TOP n 列出前 n 個(gè)記錄 使用 TOP n 列出前 n 個(gè)記錄 select top 5 * from sc select top 50 percent * from sc select top 8 percent * from sc select top 5 with ties * from sc order by score desc select top 5 * from sc order by score desc 使用 TOP n 列出前 n 個(gè)記錄 使用 TOP n 列出前 n 個(gè)記錄 限制結(jié)果集大小的另一種方法是在執(zhí)行一個(gè)語句之前執(zhí)行 SET ROWCOUNT n 語句。Identification number:39。使用 NOT 會(huì)降低數(shù)據(jù)檢索速度 country IN (39。 LIKE 39。該符號代表選擇表中所有的字段 使用 WHERE 子句指定行 使用 WHERE 子句指定行 通過使用 WHERE 子句,可以得到基于搜索條件的行 搜索條件 ::= { [ NOT ] 斷言 | ( 搜索條件 ) } [ {AND | OR}[NOT]{斷言 | ( 搜索條件 ) } ] } [,...n] ?斷言 列出了可以在 WHERE 子句中包含的表達(dá)式列表 ?使用 WHERE 子句指定行時(shí),請注意 ? 在所有數(shù)據(jù)類型為 char、 nchar、 varchar、 nvarchar、 text、 datetime和 smalldatetime 的數(shù)據(jù)周圍,必須使用單引號(‘) ? 在使用 SELECT 語句時(shí),盡量使用 WHERE 語句限制將要返回的行 使用 WHERE 子句指定行(續(xù)) employeeid lastname firstname title 5 Buchanan Steven Sales Manager USE northwind SELECT employeeid, lastname, firstname, title FROM employees WHERE employeeid = 5 GO 示例 使用 WHERE 子句指定行 檢索數(shù)據(jù) 使用 SELECT 語句檢索數(shù)據(jù) 過濾數(shù)據(jù) 設(shè)置結(jié)果集格式 需要考慮的性能問題 推薦操作 過濾數(shù)據(jù) 過濾數(shù)據(jù) 過濾的類型 搜索條件 使用比較運(yùn)算符 =、 、 、 =、 =、 使用字符串比較符 LIKE和 NOT LIKE 使用邏輯運(yùn)算符 AND、 OR 檢索一定范圍內(nèi)的值 BETWEEN和 NOT BETWEEN 使用值列表作為搜索條件 IN和 NOT IN 檢索未知值 IS NULL和 IS NOT NULL 使用比較運(yùn)算符 使用比較 運(yùn)算 符 使用比較操作符來比較表中的值與指定的值或表達(dá)式的值 USE northwind SELECT lastname, city FROM employees WHERE country = 39。99[09][09]39。 OR productid = 46) AND (unitprice ) (productname LIKE 39。rable 2 … … … … 示例 對數(shù)據(jù)進(jìn)行排序 消除重復(fù)行 消除重復(fù)行 ?用 DISTINCT 可以消除重復(fù)行,使結(jié)果集列出惟一的值。 ?椅子有多少