操作字段
通常
當你從一個表中取出字段值時
該值與創建該表時所定義的字段名聯系在一起
如果你從表authors中選擇所有的作者名字
所有的值將會與字段名au_lname相聯系
但是在某些情況下
你需要對字段名進行操作
在SELECT語句中
你可以在缺省字段名後面僅跟一個新名字來取代它
例如
可以用一個更直觀易讀的名字Author Last Name來代替字段名au_lname
SELECT au_lname
Author Last Name
FROM authors
當這個SELECT語句執行時
來自字段au_lname的值會與
Author Last Name
相聯系
查詢結果可能是這樣
Author Last Name
……………………………………………………………………
White
Green
Carson
O
Leary
Straight
…
(
row(s) affected)
注意字段標題不再是au_lname
而是被Author Last Name所取代
你也可以通過執行運算
來操作從一個表返回的字段值
例如
如果你想把表titles中的所有書的價格加倍
你可以使用下面的SELECT語句
SELECT price*
FROM titles
當這個查詢執行時
每本書的價格從表中取出時都會加倍
但是
通過這種途徑操作字段不會改變存儲在表中的書價
對字段的運算只會影響SELECT語句的輸出
而不會影響表中的數據
為了同時顯示書的原始價格和漲價後的新價格
你可以使用下面的查詢
SELECT price
Original price
price*
New price
FROM titles
當數據從表titles中取出時
原始價格顯示在標題Original price下面
加倍後的價格顯示在標題New price下面
結果可能是這樣
original price new price
………………………………………………………………
…
(
row(s) affected)
你可以使用大多數標准的數學運算符來操作字段值
如加(+)
減(
)
乘(*)和除(/)
你也可以一次對多個字段進行運算
例如
SELECT price*ytd_sales
total revenue
FROM titles
在這個例子中
通過把價格與銷售量相乘
計算出了每種書的總銷售額
這個SELECT語句的結果將是這樣的
total revenue
……………………………………………
…
(
row(s) affected)
最後
你還可以使用連接運算符(它看起來像個加號)來連接兩個字符型字段
SELECT au_fname+
+au_lname
author name
FROM authors
在這個例子中
你把字段au_fname和字段au_lname粘貼在一起
中間用一個逗號 隔開
並把查詢結果的標題指定為author name
這個語句的執行結果將是這樣的
author names
…………………………………………………………
Johnson White
Marjorie Green
Cheryl Carson
Michael O
Leary
Dean Straight
…
(
row(s) affected)
可以看到
SQL為你提供了對查詢結果的許多控制
你應該在ASP編程過程中充分利用這些優點
使用SQL來操作查詢結果幾乎總是比使用有同樣作用的腳本效率更高
排序查詢結果
本章的介紹中曾強調過
SQL表沒有內在的順序
例如
從一個表中取第二個記錄是沒有意義的
從SQL的角度看來
沒有一個記錄在任何其他記錄之前
然而
你可以操縱一個SQL查詢結果的順序
在缺省情況下
當記錄從表中取出時
記錄不以特定的順序出現
例如
當從表authors中取出字段au_lname時
查詢結果顯示成這樣
au_lname
……………………………………
White
Green
Carson
O
Leary
Straight
…
(
row(s) affected)
看一列沒有特定順序的名字是很不方便的
如果把這些名字按字母順序排列
讀起來就會容易得多
通過使用ORDER BY子句
你可以強制一個查詢結果按升序排列
就像這樣
SELECT au_lname FROM authors ORDER BY au_lname
當這個SELECT語句執行時
作者名字的顯示將按字母順序排列
ORDER BY子句將作者名字按升序排列
你也可以同時對多個列使用ORDER BY子句
例如
如果你想同時按升序顯示字段au_lname和字段au_fname
你需要對兩個字段都進行排序
SELECT au_lname
au_fname FROM authors ORDER BY au_lname
au_fname
這個查詢首先把結果按au_lname字段進行排序
然後按字段au_fname排序
記錄將按如下的順序取出
au_lname au_fname
……………………………………………………………………
Bennet Abraham
Ringer Albert
Ringer Anne
Smith Meander
…
(
row(s) affected)
注意有兩個作者有相同的名字Ringer
名為Albert Ringer的作者出現名為Anne Ringer的作者之前
這是因為姓Albert按字母順序應排在姓Anne之前
如果你想把查詢結果按相反的順序排列
你可以使用關鍵字DESC
關鍵字DESC把查詢結果按降序排列
如下例所示
SELECT au_lname
au_fname FROM authors
WHERE au_lname=
Ringer
ORDER BY au_lname
au_fname DESC
這個查詢從表authors中取出所有名字為Ringer的作者記錄
ORDER BY子句根據作者的名字和姓
將查詢結果按降序排列
結果是這樣的
au_lname au_fname
………………………………………………………………………………………
Ringer Anne
Ringer Albert
(
row(s) affectec)
注意在這個表中
姓Anne出現在姓Albert之前
作者名字按降序顯示
你也可以按數值型字段對一個查詢結果進行排序
例如
如果你想按降序取出所有書的價格
你可以使用如下的SQL查詢
SELECT price FROM titles ORDER BY price DESC
這個SELECT語句從表中取出所有書的價格
顯示結果時
價格低的書先顯示
價格高的書後顯示
警告
不是特別需要時
不要對查詢結果進行排序
因為服務器完成這項工作要費些力氣
這意味著帶有ORDER BY 子句的SELECT語句執行起來比一般的SELECT語句花的時間長
取出互不相同的記錄
一個表有可能在同一列中有重復的值
例如
數據庫pubs的表authors中有兩個作者的名字是Ringer
如果你從這個表中取出所有的名字
名字Ringer將會顯示兩次
在特定情況下
你可能只有興趣從一個表中取出互不相同的值
如果一個字段有重復的值
你也許希望每個值只被選取一次
你可以使用關鍵字DISTINCT來做到這一點
SELCET DISTINCT au_lname FROM authors WHERE au_lname=
Ringer
當這個SELECT語句執行時
只返回一個記錄
通過在SELECT語句中包含關鍵字DISTINCT
你可以刪除所有重復的值
例如
假設有一個關於新聞組信息發布的表
你想取出所有曾在這個新聞組中發布信息的人的名字
那麼你可以使用關鍵字DISTINCT
每個用戶的名字只取一次——盡管有的用戶發布了不止一篇信息
警告
如同ORDER BY子句一樣
強制服務器返回互不相同的值也會增加運行開銷
福氣不得不花費一些時間來完成這項工作
因此
不是必須的時候不要使用關鍵字DISTINCT
創建新表
前面說過
數據庫中的所有數據存儲在表中
數據表包括行和列
列決定了表中數據的類型
行包含了實際的數據
例如
數據庫pubs中的表authors有九個字段
其中的一個字段名為為au_lname
這個字段被用來存儲作者的名字信息
每次向這個表中添加新作者時
作者名字就被添加到這個字段
產生一條新記錄
通過定義字段
你可以創建一個新表
每個字段有一個名字和一個特定的數據類型(數據類型在後面的
字段類型
一節中講述)
例如字段au_lname存儲的是字符型數據
一個字段也可以存儲其它類型的數據
使用SQL Sever
創建一個新表的方法是很多的
你可以可執行一個SQL語句或使用SQL事務管理器(SQL Enterprise Manager)來創建一個新表
在下一節裡
你將學會如何用SQL語句來創建一個新表
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22224.html