資料排序
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
ON
語法2:
Select
FROM
在FROM 子句中可為表定義別名,並在任何地方都可用別名代替真名。
注意:如果作為連接條件的列中有空值,則空值不能和任何值匹配,因此結果中不包含有空值的行。
3、 Left Outer JOIN
在Inner JOIN中,只有在兩個表中匹配的行才能在結果資料集中。但在Left Outer JOIN中,所有左邊表中的行都出現在結果資料集中,如果左邊表中的某一行在右邊表中沒有匹配的行,則以空值取代右邊表中的值和它連接。
語法如下:(ANSI 92)
Select
FROM
ON
4、 Right Out JOIN和Left Outer JOIN相似,不同的是把右邊的表格作為外部表(所有右邊表格中的行包含在結果資料集中)。
語法如下:
Select
FROM
ON
5、M中,所有兩個表中的行都包含在結果資料集中。
語法如下:
Select
FROM
ON
Case語句
Case的結果值時,可使用Case語句。
Case語句計算所有定義的條件,並依條件是否為真而回傳結果。
語法如下:
CASE [
WHEN
[ELSE
END
Input_expression是任何有效的SQL Server 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
'
END
FROM authors
UNION
UNION語句將兩個或多個單詞點把兩個或多個單詞點個查詢的結果組合成一個結果集。
文法如下:
SELECT
ALL]
SELECT
FROM
WHERE
WHERE
ALL關鍵字指定重複的資料也將包含在最終結果資料集中。如果需要,一個查詢中可以有許多UNION語句。所有Select_list應該有相同數目的列,且是相同或相容的資料型態。
Go指令 Go指令用來標示一個查詢批次(query batch)的結束。查詢批次處理是TSQL語句的集合,這些語句集合在一起執行。 Go與Osql或SQL Server Query Analyzer一起使用。
以上就是SQL Server 7.0 入門(三)的內容,更多相關內容請關注PHP中文網(www.php.cn)!