SQL Server 7.0 入門(三)

數據排序
???????order by子句按指定的順序對數據排序(ordering data)。它要求一個列名字列表或非負整數列表來指定列的位置。分別用asc代表升序,desc代表降序,默認為asc。

限制返回行的數目
???????不使用where子句而限制結果中的行數是可能的。“top”子句能按指定數目或百分值來限制行數。

數據分組和計算聚合函數
???????聚合(aggregate)函數計算表中數據的總和。sql server提供以下的聚合函數:
???????· avg 這個函數計算平均值。語法如下:
???????avg ([all | distinct] expression)
???????關鍵字distinct只用來計算不同值的平均值,如果有許多重復值,這些值只計算一次,默認為all。
???????expression可以是涉及一列或多列的算術表達式。
???????· min 這個函數查找所提供表達式中的最小值。語法如下:
???????min (expression)
???????· max 此函數的功能是在提供的表達式中查找最大值。語法如下:
???????max (expression)
???????注意: 如果地字符串類型使用min和max,則輸出依賴于為sql server定義的順序。min和max不能在位上使用。
????· sum sum計算所有數據值的和。語法如下:
???????sum ([all | distinct] expression)
???????注意:sum和avg只能用于數值數據類型。
????· count 計算表達式值的數目。語法如下:
???????count ([all | distinct] expression)
???????count有另一種用法,它可以返回被選擇的行數。
???????如:select numrows = count (*) from titles
???????聚合函數忽略所有空值,但count(*)除外。盡管所有聚合函數的計算基于無空值的情況,然而count(*)計算所有的行(包括有空值的行)。

1.??group by子句
group by子句在被定義的數據的基礎上建立比較小的組,并且對每一個組進行聚合函數計算。換句話說,它產生每一組的總體信息。group by可以把多于一列當成組合列(grouping columns)。它總結組合列中不重復值的信息。
使用了group by子句的選擇列表中只能包含以下項:
· 常量值。
· 組合列。
· 表達式。每個表達式為每組返回一個值(如聚合函數)。如果一列除了在組合列中外,還在選擇列表中,則它有多個值給組合列的每一個不重復值,這種結構類型是不允許的。
2.??group by和having
having子句用來向使用group by子句的查詢中增加數據過濾準則。having的用法和select中的where子句一樣。在一個包含group by子句的查詢中使用where子句是可以的。having和where有相同的語法。having和where的不同這處是:
· 在where子句中,在分組進行以前,去除不滿足條件的行,在having子句中,在分組之后條件被應用。
· having可在條件中包含聚合函數,但where不能。
注意:group by和having子句不能使用文本或圖像數據類型。
3.??compute by子句
compute by子句可以得到詳細或總的記錄。它把數據分成較小的組,然后為每組建立詳細記錄結果數據集(象select),它也可為每組產生總的記錄(象group by)。
在comput by中,定義by子句不是必要的。如果沒有定義by子句,則認為整個表為一個組,并且只有兩個結果數據集產生,一個擁有所有詳細記錄,另一個只有一行,它擁有總記錄。
注意:當在compute中使用by時,則要求在所有組合列中包含order by。

cube和rollup操作
????cube和rollup操作可比簡單的group by產生更多的聚合值。在產生交叉標簽報告(cross tab reports)時,這些操作非常有用。如果查詢使用n個組合列,則有2n個計算聚合的組合。

從多個表中訪問數據
????我們已討論了如何訪問單個表中的數據。從多個表中訪問數據也是可能的。從多個表中訪問數據稱為連接表(joining a table)。
1、??cross join(笛卡爾積)
cross join是簡單地、不加任何約束條件地把表組合。cross join后結果的行數是連接前兩個表行數的乘積。如果對兩個分別有好幾千行的表進行連接,則結果是不可想象的。
2、??inner join
inner join是組合兩個表最常用的方法。inner join是基于一個判別式進行的,這個判別式稱為連接條件。連接條件和where子句一起定義。連接條件由來自兩個表中的列組成,并使用一個比較條件來對列的值進行比較。通過比較的值包含在結果數據集中,以下是inner join的語法:
語法1:(ansi 92)
select
from inner join on . = .語法2:
select
from , where . = .在from 子句中可為表定義別名,并在任何地方都可用別名代替真名。
注意:如果作為連接條件的列中有空值,則空值不能和任何值匹配,因此結果中不包含有空值的行。
3、??left outer join
在inner join中,只有在兩個表中匹配的行才能在結果數據集中。但在left outer join中,所有左邊表中的行都出現在結果數據集中,如果左邊表中的某一行在右邊表中沒有匹配的行,則以空值取代右邊表中的值和它連接。
語法如下:(ansi 92)
select
from left outer join on . = .4、??right outer join
right out join和left outer join相似,不同的是把右邊的表作為外部表(所有右邊表中的行包含在結果數據集中)。
語法如下:
select
from right outer join on . = .5、??full outer join
在full outer join中,所有兩個表中的行都包含在結果數據集中。
語法如下:
select
from full outer join on . = .

case語句
????當對不同條件產生不同的結果值時,可使用case語句。
????case語句計算所有定義的條件,并按條件是否為真而返回結果。
語法如下:
case []
when then
[else ]
end
input_expression是任何有效的sql server表達式或布爾表達式。
when_expression是任何有效的sql server表達式或布爾表達式。這個表達式和input_expression比較,如果input_expression沒有定義,則when_expression應該是一個布爾表達式。
result_expression是任何有效的sql server表達式。如果when_expression和input_expression的比較返回true(如果定義了input_expression)或when_expression的值為true,則計算表達式,并返回其結果。否則計算else_expression中的表達式,并返回其結果。
例如:
select au_fname,au_lname,
state=case state
??????????????when ‘ca’ then ‘california’
??????????????when ‘ks’ then ‘kansas’
?????????end
from authors

union

???????union語句把兩個或多個查詢的結果組合成一個結果集。
???????語法如下:
???????select
???????from ???????where
???????union [all]
???????select ???????from ???????where
???????all關鍵字指定重復的數據也將包含在最終結果數據集中。如果需要,一個查詢中可以有許多union語句。所有select_list應該有相同數目的列,且是相同或兼容的數據類型。

go命令???????go命令用來標志一個查詢批處理(query batch)的結束。查詢批處理是tsql語句的集合,這些語句集合在一起執行。go與osql或sql server query analyzer一起使用。?

?以上就是SQL Server 7.0 入門(三)的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享