|
導讀數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應... 數(shù)據(jù)庫,簡而言之可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數(shù)據(jù)集合。 插入數(shù)據(jù) 向表中添加一個新記錄,你要使用SQL INSERT 語句。這里有一個如何使用這種語句的例子: INSERT mytable (mycolumn) valueS (‘some data’) 這個語句把字符串’some data’插入表mytable的mycolumn字段中。將要被插入數(shù)據(jù)的字段的名字在第一個括號中指定,實際的數(shù)據(jù)在第二個括號中給出。 INSERT 語句的完整句法如下: INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT valueS | values_list | select_statement} 如果一個表有多個字段,通過把字段名和字段值用逗號隔開,你可以向所有的字段中插入數(shù)據(jù)。假設表mytable有三個字段first_column,second_column,和third_column。下面的INSERT語句添加了一條三個字段都有值的完整記錄: INSERT mytable (first_column,second_column,third_column) valueS (‘some data’,’some more data’,’yet more data’) 注意: 你可以使用INSERT語句向文本型字段中插入數(shù)據(jù)。但是,如果你需要輸入很長的字符串,你應該使用WRITETEXT語句。這部分內(nèi)容對本書來說太高級了,因此不加討論。要了解更多的信息,請參考Microsoft SQL Sever 的文檔。 如果你在INSERT 語句中只指定兩個字段和數(shù)據(jù)會怎么樣呢?換句話說,你向一個表中插入一條新記錄,但有一個字段沒有提供數(shù)據(jù)。在這種情況下,有下面的四種可能: ■如果該字段有一個缺省值,該值會被使用。例如,假設你插入新記錄時沒有給字段third_column提供數(shù)據(jù),而這個字段有一個缺省值’some value’。在這種情況下,當新記錄建立時會插入值’some value’。 ■如果該字段可以接受空值,而且沒有缺省值,則會被插入空值。 ■如果該字段不能接受空值,而且沒有缺省值,就會出現(xiàn)錯誤。你會收到錯誤信息: The column in table mytable may not be null. ■最后,如果該字段是一個標識字段,那么它會自動產(chǎn)生一個新值。當你向一個有標識字段的表中插入新記錄時,只要忽略該字段,標識字段會給自己賦一個新值。 注意: 向一個有標識字段的表中插入新記錄后,你可以用SQL變量@@identity來訪問新記錄 的標識字段的值。考慮如下的SQL語句: INSERT mytable (first_column) valueS(‘some value’) INSERT anothertable(another_first,another_second) valueS(@@identity,’some value’) 如果表mytable有一個標識字段,該字段的值會被插入表anothertable的another_first字段。這是因為變量@@identity總是保存最后一次插入標識字段的值。 字段another_first應該與字段first_column有相同的數(shù)據(jù)類型。但是,字段another_first不能是應該標識字段。Another_first字段用來保存字段first_column的值。 刪除記錄 要從表中刪除一個或多個記錄,需要使用SQL DELETE語句。你可以給DELETE 語句提供WHERE 子句。WHERE子句用來選擇要刪除的記錄。例如,下面的這個DELETE語句只刪除字段first_column的值等于’Delete Me’的記錄: DELETE mytable WHERE first_column=’Deltet Me’ DELETE 語句的完整句法如下: DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 語句中可以使用的任何條件都可以在DELECT 語句的WHERE子句 中使用。例如,下面的這個DELETE語句只刪除那些first_column字段的值為’goodbye’或second_column字段的值為’so long’的記錄: DELETE mytable WHERE first_column=’goodby’ OR second_column=’so long’ 如果你不給DELETE 語句提供WHERE 子句,表中的所有記錄都將被刪除。你不應該有這種想法。如果你想刪除應該表中的所有記錄,應使用第十章所講的TRUNCATE TABLE語句。 注意: 為什么要用TRUNCATE TABLE 語句代替DELETE語句?當你使用TRUNCATE TABLE語句時,記錄的刪除是不作記錄的。也就是說,這意味著TRUNCATE TABLE 要比DELETE快得多。 更新記錄 要修改表中已經(jīng)存在的一條或多條記錄,應使用SQL UPDATE語句。同DELETE語句一樣,UPDATE語句可以使用WHERE子句來選擇更新特定的記錄。請看這個例子: UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’ 這個UPDATE 語句更新所有second_column字段的值為’Update Me!’的記錄。對所有被選中的記錄,字段first_column的值被置為’Updated!’。 下面是UPDATE語句的完整句法: UPDATE {table_name|view_name} SET [{table_name|view_name}] {column_list|variable_list|variable_and_column_list} [,{column_list2|variable_list2|variable_and_column_list2}… [,{column_listN|variable_listN|variable_and_column_listN}]] [WHERE clause] 注意: 你可以對文本型字段使用UPDATE語句。但是,如果你需要更新很長的字符串,應使用UPDATETEXT語句。這部分內(nèi)容對本書來說太高級了,因此不加討論。要了解更多的信息,請參考Microsoft SQL Sever 的文檔。 如果你不提供WHERE子句,表中的所有記錄都將被更新。有時這是有用的。例如,如果你想把表titles中的所有書的價格加倍,你可以使用如下的UPDATE 語句: 你也可以同時更新多個字段。例如,下面的UPDATE語句同時更新first_column,second_column,和third_column這三個字段: UPDATE mytable SET first_column=’Updated!’ Second_column=’Updated!’ Third_column=’Updated!’ WHERE first_column=’Update Me1’ 技巧: SQL忽略語句中多余的空格。你可以把SQL語句寫成任何你最容易讀的格式。 用SELECT 創(chuàng)建記錄和表 你也許已經(jīng)注意到,INSERT 語句與DELETE語句和UPDATE語句有一點不同,它一次只操作一個記錄。然而,有一個方法可以使INSERT 語句一次添加多個記錄。要作到這一點,你需要把INSERT 語句與SELECT 語句結(jié)合起來,象這樣: INSERT mytable (first_column,second_column) SELECT another_first,another_second FROM anothertable WHERE another_first=’Copy Me!’ 這個語句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’Copy Me!’的記錄才被拷貝。 當為一個表中的記錄建立備份時,這種形式的INSERT 語句是非常有用的。在刪除一個表中的記錄之前,你可以先用這種方法把它們拷貝到另一個表中。 如果你需要拷貝整個表,你可以使用SELECT INTO 語句。例如,下面的語句創(chuàng)建了一個名為newtable的新表,該表包含表mytable的所有數(shù)據(jù): SELECT * INTO newtable FROM mytable 你也可以指定只有特定的字段被用來創(chuàng)建這個新表。要做到這一點,只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE 子句來限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于’Copy Me!’的記錄的first_column字段。 SELECT first_column INTO newtable FROM mytable WHERE second_column=’Copy Me!’ 使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個表中添加了一個字段,沒有容易的辦法來去除它。另外,如果你不小心把一個字段的數(shù)據(jù)類型給錯了,你將沒有辦法改變它。但是,使用本節(jié)中講述的SQL語句,你可以繞過這兩個問題。 例如,假設你想從一個表中刪除一個字段。使用SELECT INTO 語句,你可以創(chuàng)建該表的一個拷貝,但不包含要刪除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。 如果你想改變一個字段的數(shù)據(jù)類型,你可以創(chuàng)建一個包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDATE語句和SELECT 語句,把原來表中的所有數(shù)據(jù)拷貝到新表中。通過這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。 集合函數(shù) 到現(xiàn)在為止,你只學習了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對一個表中的記錄進行數(shù)據(jù)統(tǒng)計。例如,如果你想統(tǒng)計存儲在表中的一次民意測驗的投票結(jié)果。或者你想知道一個訪問者在你的站點上平均花費了多少時間。要對表中的任何類型的數(shù)據(jù)進行統(tǒng)計,都需要使用集合函數(shù)。 Microsoft SQL 支持五種類型的集合函數(shù)。你可以統(tǒng)計記錄數(shù)目,平均值,最小值,最大值,或者求和。當你使用一個集合函數(shù)時,它只返回一個數(shù),該數(shù)值代表這幾個統(tǒng)計值之一。 注意: 要在你的ASP網(wǎng)頁中使用集合函數(shù)的返回值,你需要給該值起一個名字。要作到這一點,你可以在SELECT語句中,在集合函數(shù)后面緊跟一個字段名,如下例所示: SELECT AVG(vote) ‘the_average’ FROM opinion 在這個例子中,vote的平均值被命名為 the_average。現(xiàn)在你可以在你的ASP網(wǎng)頁的數(shù)據(jù)庫方法中使用這個名字。 統(tǒng)計字段值的數(shù)目 函數(shù)COUNT()也許是最有用的集合函數(shù)。你可以用這個函數(shù)來統(tǒng)計一個表中有多少條記錄。這里有一個例子: SELECT COUNT(au_lname) FROM authors 這個例子計算表authors中名字(last name)的數(shù)目。如果相同的名字出現(xiàn)了不止一次,該名字將會被計算多次。如果你想知道名字為某個特定值的作者有多少個,你可以使用WHERE子句,如下例所示: SELECT COUNT(au_lname) FROM authors WHERE au_lname=’Ringer’ 這個例子返回名字為’Ringer’的作者的數(shù)目。如果這個名字在表authors中出現(xiàn)了兩次,則次函數(shù)的返回值是2。 假如你想知道有不同名字的作者的數(shù)目。你可以通過使用關(guān)鍵字DISTINCT來得到該數(shù)目。如下例所示: SELECT COUNT(DISTINCT au_lname) FROM authors 如果名字’Ringer’出現(xiàn)了不止一次,它將只被計算一次。關(guān)鍵字DISTINCT 決定了只有互不相同的值才被計算。 通常,當你使用COUNT()時,字段中的空值將被忽略。一般來說,這正是你所希望的。但是,如果你僅僅想知道表中記錄的數(shù)目,那么你需要計算表中所有的記錄─不管它是否包含空值。下面是一個如何做到這一點的例子: SELECT COUNT(*) FROM authors 注意函數(shù)COUNT()沒有指定任何字段。這個語句計算表中所有記錄所數(shù)目,包括有空值的記錄。因此,你不需要指定要被計算的特定字段。 函數(shù)COUNT()在很多不同情況下是有用的。例如,假設有一個表保存了對你站點的質(zhì)量進行民意調(diào)查的結(jié)果。這個表有一個名為vote的字段,該字段的值要么是0,要么是1。0表示反對票,1表示贊成票。要確定贊成票的數(shù)量,你可以所有下面的SELECT 語句: SELECT COUNT(vote) FROM opinion_table WHERE vote=1 計算字段的平均值 使用函數(shù)COUNT(),你可以統(tǒng)計一個字段中有多少個值。但有時你需要計算這些值的平均值。使用函數(shù)AVG(),你可以返回一個字段中所有值的平均值。 假如你對你的站點進行一次較為復雜的民意調(diào)查。訪問者可以在1到10之間投票,表示他們喜歡你站點的程度。你把投票結(jié)果保存在名為vote的INT型字段中。要計算你的用戶投票的平均值,你需要使用函數(shù)AVG(): SELECT AVG(vote) FROM opinion 這個SELECT語句的返回值代表用戶對你站點的平均喜歡程度。函數(shù)AVG()只能對數(shù)值型字段使用。這個函數(shù)在計算平均值時也忽略空值。 計算字段值的和 假設你的站點被用來出售卡片,已經(jīng)運行了兩個月,是該計算賺了多少錢的時候了。假設有一個名為orders的表用來記錄所有訪問者的定購信息。要計算所有定購量的總和,你可以使用函數(shù)SUM(): SELECT SUM(purchase_amount) FROM orders 函數(shù)SUM()的返回值代表字段purchase_amount中所有值的平均值。字段purchase_amount的數(shù)據(jù)類型也許是MONEY型,但你也可以對其它數(shù)值型字段使用函數(shù)SUM()。 返回最大值或最小值 再一次假設你有一個表用來保存對你的站點進行民意調(diào)查的結(jié)果。訪問者可以選擇從1到10 的值來表示他們對你站點的評價。如果你想知道訪問者對你站點的最高評價,你可以使用如下的語句: SELECT MAX(vote) FROM opinion 你也許希望有人對你的站點給予了很高的評價。通過函數(shù)MAX(),你可以知道一個數(shù)值型字段的所有值中的最大值。如果有人對你的站點投了數(shù)字10,函數(shù)MAX()將返回該值。 另一方面,假如你想知道訪問者對你站點的的最低評價,你可以使用函數(shù)MIN(),如下例所示: SELECT MIN(vote) FROM opinion 函數(shù)MIN()返回一個字段的所有值中的最小值。如果字段是空的,函數(shù)MIN()返回空值。 全新的路由器不僅讓你更穩(wěn)定快速地連接無線網(wǎng)絡,更可以讓家中的智能設備連接在一起。 |
溫馨提示:喜歡本站的話,請收藏一下本站!