麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))8

2019-11-03 08:38:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
更新記錄

要修改表中已經(jīng)存在的一條或多條記錄,應(yīng)使用SQL UPDATE語(yǔ)句。同DELETE語(yǔ)句一樣,UPDATE語(yǔ)句可以使用WHERE子句來(lái)選擇更新特定的記錄。請(qǐng)看這個(gè)例子:

UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’

這個(gè)UPDATE 語(yǔ)句更新所有second_column字段的值為’Update Me!’的記錄。對(duì)所有被選中的記錄,字段first_column的值被置為’Updated!’。

下面是UPDATE語(yǔ)句的完整句法:

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]

注意:

你可以對(duì)文本型字段使用UPDATE語(yǔ)句。但是,如果你需要更新很長(zhǎng)的字符串,應(yīng)使用UPDATETEXT語(yǔ)句。這部分內(nèi)容對(duì)本書來(lái)說(shuō)太高級(jí)了,因此不加討論。要了解更多的信息,請(qǐng)參考Microsoft SQL Sever 的文檔。

如果你不提供WHERE子句,表中的所有記錄都將被更新。有時(shí)這是有用的。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用如下的UPDATE 語(yǔ)句:

你也可以同時(shí)更新多個(gè)字段。例如,下面的UPDATE語(yǔ)句同時(shí)更新first_column,second_column,和third_column這三個(gè)字段:

UPDATE mytable SET first_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHERE first_column=’Update Me1’

技巧:

SQL忽略語(yǔ)句中多余的空格。你可以把SQL語(yǔ)句寫成任何你最容易讀的格式。

 

用SELECT 創(chuàng)建記錄和表

你也許已經(jīng)注意到,INSERT 語(yǔ)句與DELETE語(yǔ)句和UPDATE語(yǔ)句有一點(diǎn)不同,它一次只操作一個(gè)記錄。然而,有一個(gè)方法可以使INSERT 語(yǔ)句一次添加多個(gè)記錄。要作到這一點(diǎn),你需要把INSERT 語(yǔ)句與SELECT 語(yǔ)句結(jié)合起來(lái),象這樣:

INSERT mytable (first_column,second_column)

SELECT another_first,another_second

FROM anothertable

WHERE another_first=’Copy Me!’

這個(gè)語(yǔ)句從anothertable拷貝記錄到mytable.只有表anothertable中字段another_first的值為’Copy Me!’的記錄才被拷貝。

當(dāng)為一個(gè)表中的記錄建立備份時(shí),這種形式的INSERT 語(yǔ)句是非常有用的。在刪除一個(gè)表中的記錄之前,你可以先用這種方法把它們拷貝到另一個(gè)表中。

如果你需要拷貝整個(gè)表,你可以使用SELECT INTO 語(yǔ)句。例如,下面的語(yǔ)句創(chuàng)建了一個(gè)名為newtable的新表,該表包含表mytable的所有數(shù)據(jù):

SELECT * INTO newtable FROM mytable

你也可以指定只有特定的字段被用來(lái)創(chuàng)建這個(gè)新表。要做到這一點(diǎn),只需在字段列表中指定你想要拷貝的字段。另外,你可以使用WHERE 子句來(lái)限制拷貝到新表中的記錄。下面的例子只拷貝字段second_columnd的值等于’Copy Me!’的記錄的first_column字段。

SELECT first_column INTO newtable

FROM mytable

WHERE second_column=’Copy Me!’

使用SQL修改已經(jīng)建立的表是很困難的。例如,如果你向一個(gè)表中添加了一個(gè)字段,沒(méi)有容易的辦法來(lái)去除它。另外,如果你不小心把一個(gè)字段的數(shù)據(jù)類型給錯(cuò)了,你將沒(méi)有辦法改變它。但是,使用本節(jié)中講述的SQL語(yǔ)句,你可以繞過(guò)這兩個(gè)問(wèn)題。

例如,假設(shè)你想從一個(gè)表中刪除一個(gè)字段。使用SELECT INTO 語(yǔ)句,你可以創(chuàng)建該表的一個(gè)拷貝,但不包含要?jiǎng)h除的字段。這使你既刪除了該字段,又保留了不想刪除的數(shù)據(jù)。

如果你想改變一個(gè)字段的數(shù)據(jù)類型,你可以創(chuàng)建一個(gè)包含正確數(shù)據(jù)類型字段的新表。創(chuàng)建好該表后,你就可以結(jié)合使用UPDATE語(yǔ)句和SELECT 語(yǔ)句,把原來(lái)表中的所有數(shù)據(jù)拷貝到新表中。通過(guò)這種方法,你既可以修改表的結(jié)構(gòu),又能保存原有的數(shù)據(jù)。

集合函數(shù)

到現(xiàn)在為止,你只學(xué)習(xí)了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對(duì)一個(gè)表中的記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。例如,如果你想統(tǒng)計(jì)存儲(chǔ)在表中的一次民意測(cè)驗(yàn)的投票結(jié)果。或者你想知道一個(gè)訪問(wèn)者在你的站點(diǎn)上平均花費(fèi)了多少時(shí)間。要對(duì)表中的任何類型的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),都需要使用集合函數(shù)。

Microsoft SQL 支持五種類型的集合函數(shù)。你可以統(tǒng)計(jì)記錄數(shù)目,平均值,最小值,最大值,或者求和。當(dāng)你使用一個(gè)集合函數(shù)時(shí),它只返回一個(gè)數(shù),該數(shù)值代表這幾個(gè)統(tǒng)計(jì)值之一。

注意:

要在你的asp網(wǎng)頁(yè)中使用集合函數(shù)的返回值,你需要給該值起一個(gè)名字。要作到這一點(diǎn),你可以在SELECT語(yǔ)句中,在集合函數(shù)后面緊跟一個(gè)字段名,如下例所示:

SELECT AVG(vote) ‘the_average’ FROM opinion

在這個(gè)例子中,vote的平均值被命名為 the_average。現(xiàn)在你可以在你的ASP網(wǎng)頁(yè)的數(shù)據(jù)庫(kù)方法中使用這個(gè)名字。

統(tǒng)計(jì)字段值的數(shù)目

函數(shù)COUNT()也許是最有用的集合函數(shù)。你可以用這個(gè)函數(shù)來(lái)統(tǒng)計(jì)一個(gè)表中有多少條記錄。這里有一個(gè)例子:

SELECT COUNT(au_lname) FROM authors

這個(gè)例子計(jì)算表authors中名字(last name)的數(shù)目。如果相同的名字出現(xiàn)了不止一次,該名字將會(huì)被計(jì)算多次。如果你想知道名字為某個(gè)特定值的作者有多少個(gè),你可以使用WHERE子句,如下例所示:

SELECT COUNT(au_lname) FROM authors WHERE au_lname=’Ringer’

這個(gè)例子返回名字為’Ringer’的作者的數(shù)目。如果這個(gè)名字在表authors中出現(xiàn)了兩次,則次函數(shù)的返回值是2。

假如你想知道有不同名字的作者的數(shù)目。你可以通過(guò)使用關(guān)鍵字DISTINCT來(lái)得到該數(shù)目。如下例所示:

SELECT COUNT(DISTINCT au_lname) FROM authors

如果名字’Ringer’出現(xiàn)了不止一次,它將只被計(jì)算一次。關(guān)鍵字DISTINCT 決定了只有互不相同的值才被計(jì)算。

通常,當(dāng)你使用COUNT()時(shí),字段中的空值將被忽略。一般來(lái)說(shuō),這正是你所希望的。但是,如果你僅僅想知道表中記錄的數(shù)目,那么你需要計(jì)算表中所有的記錄─不管它是否包含空值。下面是一個(gè)如何做到這一點(diǎn)的例子:

SELECT COUNT(*) FROM authors

注意函數(shù)COUNT()沒(méi)有指定任何字段。這個(gè)語(yǔ)句計(jì)算表中所有記錄所數(shù)目,包括有空值的記錄。因此,你不需要指定要被計(jì)算的特定字段。

函數(shù)COUNT()在很多不同情況下是有用的。例如,假設(shè)有一個(gè)表保存了對(duì)你站點(diǎn)的質(zhì)量進(jìn)行民意調(diào)查的結(jié)果。這個(gè)表有一個(gè)名為vote的字段,該字段的值要么是0,要么是1。0表示反對(duì)票,1表示贊成票。要確定贊成票的數(shù)量,你可以所有下面的SELECT 語(yǔ)句:

SELECT COUNT(vote) FROM opinion_table WHERE vote=1

計(jì)算字段的平均值

使用函數(shù)COUNT(),你可以統(tǒng)計(jì)一個(gè)字段中有多少個(gè)值。但有時(shí)你需要計(jì)算這些值的平均值。使用函數(shù)AVG(),你可以返回一個(gè)字段中所有值的平均值。

假如你對(duì)你的站點(diǎn)進(jìn)行一次較為復(fù)雜的民意調(diào)查。訪問(wèn)者可以在1到10之間投票,表示他們喜歡你站點(diǎn)的程度。你把投票結(jié)果保存在名為vote的INT型字段中。要計(jì)算你的用戶投票的平均值,你需要使用函數(shù)AVG():

SELECT AVG(vote) FROM opinion

這個(gè)SELECT語(yǔ)句的返回值代表用戶對(duì)你站點(diǎn)的平均喜歡程度。函數(shù)AVG()只能對(duì)數(shù)值型字段使用。這個(gè)函數(shù)在計(jì)算平均值時(shí)也忽略空值。

計(jì)算字段值的和

假設(shè)你的站點(diǎn)被用來(lái)出售卡片,已經(jīng)運(yùn)行了兩個(gè)月,是該計(jì)算賺了多少錢的時(shí)候了。假設(shè)有一個(gè)名為orders的表用來(lái)記錄所有訪問(wèn)者的定購(gòu)信息。要計(jì)算所有定購(gòu)量的總和,你可以使用函數(shù)SUM():

SELECT SUM(purchase_amount) FROM orders

函數(shù)SUM()的返回值代表字段purchase_amount中所有值的平均值。字段purchase_amount的數(shù)據(jù)類型也許是MONEY型,但你也可以對(duì)其它數(shù)值型字段使用函數(shù)SUM()。

返回最大值或最小值

再一次假設(shè)你有一個(gè)表用來(lái)保存對(duì)你的站點(diǎn)進(jìn)行民意調(diào)查的結(jié)果。訪問(wèn)者可以選擇從1到10 的值來(lái)表示他們對(duì)你站點(diǎn)的評(píng)價(jià)。如果你想知道訪問(wèn)者對(duì)你站點(diǎn)的最高評(píng)價(jià),你可以使用如下的語(yǔ)句:

SELECT MAX(vote) FROM opinion

你也許希望有人對(duì)你的站點(diǎn)給予了很高的評(píng)價(jià)。通過(guò)函數(shù)MAX(),你可以知道一個(gè)數(shù)值型字段的所有值中的最大值。如果有人對(duì)你的站點(diǎn)投了數(shù)字10,函數(shù)MAX()將返回該值。

另一方面,假如你想知道訪問(wèn)者對(duì)你站點(diǎn)的的最低評(píng)價(jià),你可以使用函數(shù)MIN(),如下例所示:

SELECT MIN(vote) FROM opinion

函數(shù)MIN()返回一個(gè)字段的所有值中的最小值。如果字段是空的,函數(shù)MIN()返回空值。

其它常用的SQL表達(dá)式,函數(shù),和過(guò)程

這一節(jié)將介紹一些其它的SQL技術(shù)。你將學(xué)習(xí)如何從表中取出數(shù)據(jù),其某個(gè)字段的值處在一定的范圍,你還將學(xué)習(xí)如何把字段值從一種類型轉(zhuǎn)換成另一種類型,如何操作字符串和日期時(shí)間數(shù)據(jù)。最后,你將學(xué)會(huì)一個(gè)發(fā)送郵件的簡(jiǎn)單方法。

通過(guò)匹配一定范圍的值來(lái)取出數(shù)據(jù)

假設(shè)你有一個(gè)表用來(lái)保存對(duì)你的站點(diǎn)進(jìn)行民意調(diào)查的結(jié)果。現(xiàn)在你想向所有對(duì)你的站點(diǎn)的評(píng)價(jià)在7到10之間的訪問(wèn)者發(fā)送書面的感謝信。要得到這些人的名字,你可以使用如下的SELECT 語(yǔ)句:

SELECT username FROM opinion WHERE vote>6 and vote<11

這個(gè)SELECT 語(yǔ)句會(huì)實(shí)現(xiàn)你的要求。你使用下面的SELECT 語(yǔ)句也可以得到同樣的結(jié)果:

SELECT username FROM opinion WHERE vote BETWEEN 7 AND 10

這個(gè)SELECT 語(yǔ)句與上一個(gè)語(yǔ)句是等價(jià)的。使用哪一種語(yǔ)句是編程風(fēng)格的問(wèn)題,但你會(huì)發(fā)現(xiàn)使用表達(dá)式BETWEEN 的語(yǔ)句更易讀。

現(xiàn)在假設(shè)你只想取出對(duì)你的站點(diǎn)投了1或者10的訪問(wèn)者的名字。要從表opinion中取出這些名字,你可以使用如下的SELECT 語(yǔ)句:

SELECT username FROM opinion WHERE vote=1 or vote

這個(gè)SELECT語(yǔ)句會(huì)返回正確的結(jié)果,沒(méi)有理由不使用它。但是,存在一種等價(jià)的方式。使用如下的SELECT可以得到相同的結(jié)果:

SELECT username FROM opinion WHERE vote IN (1,10)

注意表達(dá)式IN 的使用。這個(gè)SELECT 語(yǔ)句只取出vote的值等于括號(hào)中的值之一的記錄。

你也可以使用IN來(lái)匹配字符數(shù)據(jù)。例如,假設(shè)你只想取出Bill Gates或PResident Clinton的投票值。你可以使用如下的SELECT 語(yǔ)句:

SELECT vote FROM opinion WHERE username IN (‘Bill Gates’,’President Clinton’)

最后,你可以在使用BETWEEN或IN的同時(shí)使用表達(dá)式NOT。例如,要取出那些投票值不在7到10之間的人的名字,你可以使用如下的SELECT 語(yǔ)句:

SELECT username FROM opinion WHERE vote NOT BETWEEN 7 and 10

要選取那些某個(gè)字段的值不在一列值之中的記錄,你可以同時(shí)使用NOT 和IN,如下例所示:

SELECT vote FROM opinion

WHERE username NOT IN (‘Bill Gates’,’President Clinton’)

你不是必須在SQL語(yǔ)句中使用BETWEEN或IN,但是,要使你的查詢更接近自然語(yǔ)言,這兩個(gè)表達(dá)式是有幫助的。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: av在线成人 | 国产一级一片免费播放 | 午夜91视频 | 午夜精品久久久久久久96蜜桃 | 国产精品一区二区三区在线看 | 国产精品av久久久久久久久久 | 国产交换3p国产精品 | xnxx 日本免费 | 玖草在线资源 | 在线免费日本 | 国产精品久久国产精麻豆96堂 | 成人免费毛片片v | 鲁丝一区二区二区四区 | 黄色毛片一级视频 | 成人aaaa免费全部观看 | 精品国产91久久久久久浪潮蜜月 | 亚洲国产精品一区二区久久 | 一区二区久久久久草草 | 黄色毛片a级 | 特逼视频| 怦然心动50免费完整版 | 麻豆视频国产在线观看 | 成人午夜免费在线视频 | 精品一区二区三区在线观看国产 | 成人精品一区二区 | 亚洲午夜精品视频 | 黄污网站在线 | 成人男女激情免费视频 | 毛片在线免费观看完整版 | h视频在线播放 | 中文国产在线视频 | 午夜视频在线免费观看 | 久久久经典视频 | 插插操| 视频一区二区中文字幕 | 久久人人爽人人爽人人片av高清 | 污污的视频在线观看 | 免费看一级视频 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 激情综合视频 | 黑人三级毛片 |