【正文】
向一個表中添加了一個字段,沒有容易的辦法來去除它。使用SELECT INTO 語句,你可以創(chuàng)建該表的一個拷貝,但不包含要刪除的字段。通過這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。如果你想改變一個字段的數(shù)據(jù)類型,你可以創(chuàng)建一個包含正確數(shù)據(jù)類型字段的新表。但是,使用本節(jié)中講述的SQL語句,你可以繞過這兩個問題。下面的例子只拷貝字段second_columnd的值等于’Copy Me!’的記錄的first_column字段。如果你需要拷貝整個表,你可以使用SELECT INTO 語句。然而,有一個方法可以使INSERT 語句一次添加多個記錄。例如,如果你想把表titles中的所有書的價格加倍,你可以使用如下的UPDATE 語句:你也可以同時更新多個字段。這部分內(nèi)容對本書來說太高級了,因此不加討論。請看這個例子:UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’這個UPDATE 語句更新所有second_column字段的值為’Update Me!’的記錄。注意:為什么要用TRUNCATE TABLE 語句代替DELETE語句?當你使用TRUNCATE TABLE語句時,記錄的刪除是不作記錄的。例如,下面的這個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子句 中使用。Another_first字段用來保存字段first_column的值??紤]如下的SQL語句: INSERT mytable (first_column) VALUES(‘some value’) INSERT anothertable(another_first,another_second) VALUES(identity,’some value’) 如果表mytable有一個標識字段,該字段的值會被插入表anothertable的another_first字段。■ 如果該字段不能接受空值,而且沒有缺省值,就會出現(xiàn)錯誤。在這種情況下,有下面的四種可能:■ 如果該字段有一個缺省值,該值會被使用。但是,如果你需要輸入很長的字符串,你應(yīng)該使用WRITETEXT語句。將要被插入數(shù)據(jù)的字段的名字在第一個括號中指定,實際的數(shù)據(jù)在第二個括號中給出。下面的例子對firstname和lastname兩個字段建立索引:CREATE INDEX name_index ON username(firstname,lastname)這個例子對兩個字段建立了單個索引。對聚簇索引和非聚簇索引都可以使用這個關(guān)鍵字。(這里有一個如何對一個表建立聚簇索引的例子:CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)如果表中有重復(fù)的記錄,當你試圖用這個語句建立索引時,會出現(xiàn)錯誤。在這個例子中,你刪除的索引是mycolumn_index,它是表mytable的索引。索引mycolumn_index對表mytable的mycolumn字段進行。 為了給一個表建立索引,啟動任務(wù)欄SQL Sever程序組中的ISQL/w程序。如果對一個字段建立了唯一索引,你將不能向這個字段輸入重復(fù)的值。這和分別對兩個字段建立單獨的索引是不同的。 這兩種類型的索引都有兩個重要屬性:你可以用兩者中任一種類型同時對多個字段建立索引(復(fù)合索引);兩種類型的索引都可以指定為唯一索引。每當你改變了一個建立了非聚簇索引的表中的數(shù)據(jù)時,必須同時更新索引。你可以對日期時間字段建立聚簇索引,對用戶名字段建立非聚簇索引。實際上,對每個表你最多可以建立249個非聚簇索引。例如,假設(shè)你用一個表來記錄訪問者在你網(wǎng)點上的活動。通常你要對一個表按照標識字段建立聚簇索引。例如,它也許同時有主題索引和作者索引。在非聚簇索引中,葉級頁指向表中的記錄:記錄的物理順序與邏輯順序沒有必然的聯(lián)系。而根頁所指向的兩個頁又分別把記錄分割成更小的部分。這是找到書頁的非常有效的一種方法。通過隨機的翻尋,你最終可以到達正確的頁碼。例如,要建立一個聚簇索引。對一個較大的表來說,通過加索引,一個通常要花費幾個小時來完成的查詢只要幾分鐘就可以完成。你可以一頁一頁地逐頁搜索,但這會花很多時間。)4)、為了建立一個標識字段,你只需在字段定義后面加上表達式IDENTITY即可。記住,如果你把一個字符串保存在CHAR型字段中,該字符串會被追加多余的空格,以匹配該字段的長度。有兩個函數(shù),TTRIM()和LTRIM(),可以用來從字符串中剪掉空格。該函數(shù)忽略任何元音字母(包括y),除非一個元音字母是一個字符串的第一個字母。下面是這個查詢的結(jié)果:site name sounds like……………………………………………………………….Yahoo Y000Mahoo M000Microsoft M262Macrosoft M262Minisoft M521Microshoft M262Zicrosoft Z262Zaposoft Z121Millisoft M421Nanosoft N521Megasoft M221Picosoft P221(12 row(s) affected)如果你仔細看一下音標碼,你會注意到音標碼的第一個字母與字段值的第一個字母相同。如果你把上一語句中的大于3改為大于2,那么名為Zicrosoft和Megasoft的站點也將被返回。函數(shù)DIFFERENCE()返回一個0到4之間的數(shù)字。函數(shù)SOUNDEX()給一個字符串分配一個音標碼,函數(shù)DIFFERENCE()按照發(fā)音比較兩個字符串。注意:如果你想匹配百分號或下劃線字符本身,你需要把它們括在方括號中。最后,通過使用下劃線字符(_),你可以匹配任何單個字符。通過在括號內(nèi)的表達式中同時包含一個范圍和一些指定的字符,你可以把這兩種方法結(jié)合起來。要得到第二頁中顯示的站點,應(yīng)使用這個語句:SELECT site_name FROM site_directory WHERE site_name LIKE ‘[NZ]%’在這個例子中,括號中的表達式代表任何處在N到Z之間的單個字符。在第一頁,你想顯示所有首字母在A到M之間的站點。它代表0個或多個字符。描述為We have the greatest collection of trading cards in the world!的站點也被返回。例如,一個描述為We have the greatest collection of trading cards in the world!的站點不會被返回。你可以建立一個表用來保存一系列的站點名稱,統(tǒng)一資源定位器(URL),描述,和類別,并允許訪問者通過在HTML form中輸入關(guān)鍵字來檢索這些內(nèi)容。當向BIT型,DATETIME型,INT型,或者NUMERIC型字段添加字符串時,你需要進行同樣的轉(zhuǎn)換操作。第一個變量指定了數(shù)據(jù)類型和長度。SQL Sever會為你完成這項工作。你可以使用如下的SELECT 語句:SELECT vote FROM opinion WHERE username IN (‘Bill Gates’,’President Clinton’)最后,你可以在使用BETWEEN或IN的同時使用表達式NOT。使用如下的SELECT可以得到相同的結(jié)果:SELECT username FROM opinion WHERE vote IN (1,10)注意表達式IN 的使用。使用哪一種語句是編程風(fēng)格的問題,但你會發(fā)現(xiàn)使用表達式BETWEEN 的語句更易讀。通過匹配一定范圍的值來取出數(shù)據(jù)假設(shè)你有一個表用來保存對你的站點進行民意調(diào)查的結(jié)果。如果字段是空的,函數(shù)MIN()返回空值。如果你想知道訪問者對你站點的最高評價,你可以使用如下的語句:SELECT MAX(vote) FROM opinion你也許希望有人對你的站點給予了很高的評價。要計算所有定購量的總和,你可以使用函數(shù)SUM():SELECT SUM(purchase_amount) FROM orders函數(shù)SUM()的返回值代表字段purchase_amount中所有值的平均值。函數(shù)AVG()只能對數(shù)值型字段使用。假如你對你的站點進行一次較為復(fù)雜的民意調(diào)查。0表示反對票,1表示贊成票。因此,你不需要指定要被計算的特定字段。一般來說,這正是你所希望的。你可以通過使用關(guān)鍵字DISTINCT來得到該數(shù)目。如果相同的名字出現(xiàn)了不止一次,該名