操作字段
通常,當你從一個表中取出字段值時,該值與創(chuàng)建該表時所定義的字段名聯(lián)系在一起。如果你從表authors中選擇所有的作者名字,所有的值將會與字段名au_lname相聯(lián)系。但是在某些情況下,你需要對字段名進行操作。在SELECT語句中,你可以在缺省字段名后面僅跟一個新名字來取代它。例如,可以用一個更直觀易讀的名字Author Last Name來代替字段名au_lname:
SELECT au_lname “Author Last Name” FROM authors
當這個SELECT語句執(zhí)行時,來自字段au_lname的值會與“Author Last Name”相聯(lián)系。查詢結(jié)果可能是這樣:
Author Last Name
……………………………………………………………………..
White
Green
Carson
O’Leary
Straight
…
(23 row(s) affected)
注意字段標題不再是au_lname,而是被Author Last Name所取代。
你也可以通過執(zhí)行運算,來操作從一個表返回的字段值。例如,如果你想把表titles中的所有書的價格加倍,你可以使用下面的
SELECT語句:
SELECT PRice*2 FROM titles
當這個查詢執(zhí)行時,每本書的價格從表中取出時都會加倍。但是,通過這種途徑操作字段不會改變存儲在表中的書價。對字段的運
算只會影響SELECT語句的輸出,而不會影響表中的數(shù)據(jù)。為了同時顯示書的原始價格和漲價后的新價格,你可以使用下面的查詢:
SELECT price “Original price”, price*2 “New price” FROM titles
當數(shù)據(jù)從表titles中取出時,原始價格顯示在標題Original price下面,加倍后的價格顯示在標題New price下面。結(jié)果可能是這
樣:
original price new price
……………………………………………………………….
39.98
11.95 23.90
5.98
39.98
…
(18 row(s) affected)
你可以使用大多數(shù)標準的數(shù)學運算符來操作字段值,如加(+),減(-),乘(*)和除(/)。你也可以一次對多個字段進行運
算,例如:
SELECT price*ytd_sales “total revenue” FROM titles
在這個例子中,通過把價格與銷售量相乘,計算出了每種書的總銷售額。這個SELECT語句的結(jié)果將是這樣的:
total revenue
……………………………………………..
81,859,05
46,318,20
55,978,78
81,859,05
40,619,68
…
(18 row(s) affected)
最后,你還可以使用連接運算符(它看起來像個加號)來連接兩個字符型字段:
SELECT au_fname+” “+au_lname “author name” FROM authors
在這個例子中,你把字段au_fname和字段au_lname粘貼在一起,中間用一個逗號 隔開,并把查詢結(jié)果的標題指定為author
name。這個語句的執(zhí)行結(jié)果將是這樣的:
author names
…………………………………………………………
Johnson White
Marjorie Green
Cheryl Carson
Michael O’Leary
Dean Straight
…
(23 row(s) affected)
可以看到,SQL為你提供了對查詢結(jié)果的許多控制。你應(yīng)該在asp編程過程中充分利用這些優(yōu)點。使用SQL來操作查詢結(jié)果幾乎總是
比使用有同樣作用的腳本效率更高。
排序查詢結(jié)果
本章的介紹中曾強調(diào)過,SQL表沒有內(nèi)在的順序。例如,從一個表中取第二個記錄是沒有意義的。從SQL的角度看來,沒有一個記錄
在任何其他記錄之前。
然而,你可以操縱一個SQL查詢結(jié)果的順序。在缺省情況下,當記錄從表中取出時,記錄不以特定的順序出現(xiàn)。例如,當從表
authors中取出字段au_lname時,查詢結(jié)果顯示成這樣:
au_lname
…………………………………….
White
Green
Carson
O’Leary
Straight
…
(23 row(s) affected)
看一列沒有特定順序的名字是很不方便的。如果把這些名字按字母順序排列,讀起來就會容易得多。通過使用ORDER BY子句,你可
以強制一個查詢結(jié)果按升序排列,就像這樣:
SELECT au_lname FROM authors ORDER BY au_lname
當這個SELECT語句執(zhí)行時,作者名字的顯示將按字母順序排列。ORDER BY子句將作者名字按升序排列。
你也可以同時對多個列使用ORDER BY子句。例如,如果你想同時按升序顯示字段au_lname和字段au_fname,你需要對兩個字段都
進行排序:
SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname
這個查詢首先把結(jié)果按au_lname字段進行排序,然后按字段au_fname排序。記錄將按如下的順序取出:
au_lname au_fname
…………………………………………………………………….
Bennet Abraham
Ringer Albert
Ringer Anne
Smith Meander
…
(23 row(s) affected)
注意有兩個作者有相同的名字Ringer。名為Albert Ringer的作者出現(xiàn)名為Anne Ringer的作者之前,這是因為姓Albert按字母順
序應(yīng)排在姓Anne之前。
如果你想把查詢結(jié)果按相反的順序排列,你可以使用關(guān)鍵字DESC。關(guān)鍵字DESC把查詢結(jié)果按降序排列,如下例所示:
SELECT au_lname,au_fname FROM authors
WHERE au_lname=”Ringer” ORDER BY au_lname ,au_fname DESC
這個查詢從表authors中取出所有名字為Ringer的作者記錄。ORDER BY子句根據(jù)作者的名字和姓,將查詢結(jié)果按降序排列。結(jié)果是
這樣的:
au_lname au_fname
……………………………………………………………………………………….
Ringer Anne
Ringer Albert
(2 row(s) affectec)
注意在這個表中,姓Anne出現(xiàn)在姓Albert之前。作者名字按降序顯示。
你也可以按數(shù)值型字段對一個查詢結(jié)果進行排序。例如,如果你想按降序取出所有書的價格,你可以使用如下的SQL查詢:
SELECT price FROM titles ORDER BY price DESC
這個SELECT語句從表中取出所有書的價格,顯示結(jié)果時,價格低的書先顯示,價格高的書后顯示。
警告:
不是特別需要時,不要對查詢結(jié)果進行排序,因為服務(wù)器完成這項工作要費些力氣。這意味著帶有ORDER BY 子句的SELECT語句執(zhí)
行起來比一般的SELECT語句花的時間長。
取出互不相同的記錄
一個表有可能在同一列中有重復的值。例如,數(shù)據(jù)庫pubs的表authors中有兩個作者的名字是Ringer。如果你從這個表中取出所有
的名字,名字Ringer將會顯示兩次。
在特定情況下,你可能只有興趣從一個表中取出互不相同的值。如果一個字段有重復的值,你也許希望每個值只被選取一次,你可
以使用關(guān)鍵字DISTINCT來做到這一點:
SELCET DISTINCT au_lname FROM authors WHERE au_lname=”Ringer”
當這個SELECT語句執(zhí)行時,只返回一個記錄。通過在SELECT語句中包含關(guān)鍵字DISTINCT,你可以刪除所有重復的值。例如,假設(shè)
有一個關(guān)于新聞組信息發(fā)布的表,你想取出所有曾在這個新聞組中發(fā)布信息的人的名字,那么你可以使用關(guān)鍵字DISTINCT。每個用
戶的名字只取一次——盡管有的用戶發(fā)布了不止一篇信息。
警告:
如同ORDER BY子句一樣,強制服務(wù)器返回互不相同的值也會增加運行開銷。福氣不得不花費一些時間來完成這項工作。因此,不是
必須的時候不要使用關(guān)鍵字DISTINCT。
創(chuàng)建新表
前面說過,數(shù)據(jù)庫中的所有數(shù)據(jù)存儲在表中。數(shù)據(jù)表包括行和列。列決定了表中數(shù)據(jù)的類型。行包含了實際的數(shù)據(jù)。
例如,數(shù)據(jù)庫pubs中的表authors有九個字段。其中的一個字段名為為au_lname,這個字段被用來存儲作者的名字信息。每次向這個表中添加新作者時,作者名字就被添加到這個字段,產(chǎn)生一條新記錄。
通過定義字段,你可以創(chuàng)建一個新表。每個字段有一個名字和一個特定的數(shù)據(jù)類型(數(shù)據(jù)類型在后面的“字段類型”一節(jié)中講述),例如字段au_lname存儲的是字符型數(shù)據(jù)。一個字段也可以存儲其它類型的數(shù)據(jù)。
使用SQL Sever,創(chuàng)建一個新表的方法是很多的。你可以可執(zhí)行一個SQL語句或使用SQL事務(wù)管理器(SQL Enterprise Manager)來創(chuàng)建一個新表。在下一節(jié)里,你將學會如何用SQL語句來創(chuàng)建一個新表。
?以上就是sql數(shù)據(jù)操作基礎(chǔ)(初級)3的內(nèi)容,更多相關(guān)文章請關(guān)注php中文網(wǎng)(www.php.cn)!?