更新記錄
要修改表中已經存在的一條或多條記錄
應使用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_list
|variable_list
|variable_and_column_list
}…
[
{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause]
注意
你可以對文本型字段使用UPDATE語句
但是
如果你需要更新很長的字符串
應使用UPDATETEXT語句
這部分內容對本書來說太高級了
因此不加討論
要了解更多的信息
請參考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 Me
技巧
SQL忽略語句中多余的空格
你可以把SQL語句寫成任何你最容易讀的格式
用SELECT 創建記錄和表
你也許已經注意到
INSERT 語句與DELETE語句和UPDATE語句有一點不同
它一次只操作一個記錄
然而
有一個方法可以使INSERT 語句一次添加多個記錄
要作到這一點
你需要把INSERT 語句與SELECT 語句結合起來
象這樣
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 語句
例如
下面的語句創建了一個名為newtable的新表
該表包含表mytable的所有數據
SELECT * INTO newtable FROM mytable
你也可以指定只有特定的字段被用來創建這個新表
要做到這一點
只需在字段列表中指定你想要拷貝的字段
另外
你可以使用WHERE 子句來限制拷貝到新表中的記錄
下面的例子只拷貝字段second_columnd的值等於
Copy Me!
的記錄的first_column字段
SELECT first_column INTO newtable
FROM mytable
WHERE second_column=
Copy Me!
使用SQL修改已經建立的表是很困難的
例如
如果你向一個表中添加了一個字段
沒有容易的辦法來去除它
另外
如果你不小心把一個字段的數據類型給錯了
你將沒有辦法改變它
但是
使用本節中講述的SQL語句
你可以繞過這兩個問題
例如
假設你想從一個表中刪除一個字段
使用SELECT INTO 語句
你可以創建該表的一個拷貝
但不包含要刪除的字段
這使你既刪除了該字段
又保留了不想刪除的數據
如果你想改變一個字段的數據類型
你可以創建一個包含正確數據類型字段的新表
創建好該表後
你就可以結合使用UPDATE語句和SELECT 語句
把原來表中的所有數據拷貝到新表中
通過這種方法
你既可以修改表的結構
又能保存原有的數據
集合函數
到現在為止
你只學習了如何根據特定的條件從表中取出一條或多條記錄
但是
假如你想對一個表中的記錄進行數據統計
例如
如果你想統計存儲在表中的一次民意測驗的投票結果
或者你想知道一個訪問者在你的站點上平均花費了多少時間
要對表中的任何類型的數據進行統計
都需要使用集合函數
Microsoft SQL 支持五種類型的集合函數
你可以統計記錄數目
平均值
最小值
最大值
或者求和
當你使用一個集合函數時
它只返回一個數
該數值代表這幾個統計值之一
注意
要在你的ASP網頁中使用集合函數的返回值
你需要給該值起一個名字
要作到這一點
你可以在SELECT語句中
在集合函數後面緊跟一個字段名
如下例所示
SELECT AVG(vote)
the_average
FROM opinion
在這個例子中
vote的平均值被命名為 the_average
現在你可以在你的ASP網頁的數據庫方法中使用這個名字
統計字段值的數目
函數COUNT()也許是最有用的集合函數
你可以用這個函數來統計一個表中有多少條記錄
這裡有一個例子
SELECT COUNT(au_lname) FROM authors
這個例子計算表authors中名字(last name)的數目
如果相同的名字出現了不止一次
該名字將會被計算多次
如果你想知道名字為某個特定值的作者有多少個
你可以使用WHERE子句
如下例所示
SELECT COUNT(au_lname) FROM authors WHERE au_lname=
Ringer
這個例子返回名字為
Ringer
的作者的數目
如果這個名字在表authors中出現了兩次
則次函數的返回值是
假如你想知道有不同名字的作者的數目
你可以通過使用關鍵字DISTINCT來得到該數目
如下例所示
SELECT COUNT(DISTINCT au_lname) FROM authors
如果名字
Ringer
出現了不止一次
它將只被計算一次
關鍵字DISTINCT 決定了只有互不相同的值才被計算
通常
當你使用COUNT()時
字段中的空值將被忽略
一般來說
這正是你所希望的
但是
如果你僅僅想知道表中記錄的數目
那麼你需要計算表中所有的記錄─不管它是否包含空值
下面是一個如何做到這一點的例子
SELECT COUNT(*) FROM authors
注意函數COUNT()沒有指定任何字段
這個語句計算表中所有記錄所數目
包括有空值的記錄
因此
你不需要指定要被計算的特定字段
函數COUNT()在很多不同情況下是有用的
例如
假設有一個表保存了對你站點的質量進行民意調查的結果
這個表有一個名為vote的字段
該字段的值要麼是
要麼是
表示反對票
表示贊成票
要確定贊成票的數量
你可以所有下面的SELECT 語句
SELECT COUNT(vote) FROM opinion_table WHERE vote=
計算字段的平均值
使用函數COUNT()
你可以統計一個字段中有多少個值
但有時你需要計算這些值的平均值
使用函數AVG()
你可以返回一個字段中所有值的平均值
假如你對你的站點進行一次較為復雜的民意調查
訪問者可以在
到
之間投票
表示他們喜歡你站點的程度
你把投票結果保存在名為vote的INT型字段中
要計算你的用戶投票的平均值
你需要使用函數AVG()
SELECT AVG(vote) FROM opinion
這個SELECT語句的返回值代表用戶對你站點的平均喜歡程度
函數AVG()只能對數值型字段使用
這個函數在計算平均值時也忽略空值
計算字段值的和
假設你的站點被用來出售卡片
已經運行了兩個月
是該計算賺了多少錢的時候了
假設有一個名為orders的表用來記錄所有訪問者的定購信息
要計算所有定購量的總和
你可以使用函數SUM()
SELECT SUM(purchase_amount) FROM orders
函數SUM()的返回值代表字段purchase_amount中所有值的平均值
字段purchase_amount的數據類型也許是MONEY型
但你也可以對其它數值型字段使用函數SUM()
返回最大值或最小值
再一次假設你有一個表用來保存對你的站點進行民意調查的結果
訪問者可以選擇從
到
的值來表示他們對你站點的評價
如果你想知道訪問者對你站點的最高評價
你可以使用如下的語句
SELECT MAX(vote) FROM opinion
你也許希望有人對你的站點給予了很高的評價
通過函數MAX()
你可以知道一個數值型字段的所有值中的最大值
如果有人對你的站點投了數字
函數MAX()將返回該值
另一方面
假如你想知道訪問者對你站點的的最低評價
你可以使用函數MIN()
如下例所示
SELECT MIN(vote) FROM opinion
函數MIN()返回一個字段的所有值中的最小值
如果字段是空的
函數MIN()返回空值
其它常用的SQL表達式
函數
和過程
這一節將介紹一些其它的SQL技術
你將學習如何從表中取出數據
其某個字段的值處在一定的范圍
你還將學習如何把字段值從一種類型轉換成另一種類型
如何操作字符串和日期時間數據
最後
你將學會一個發送郵件的簡單方法
通過匹配一定范圍的值來取出數據
假設你有一個表用來保存對你的站點進行民意調查的結果
現在你想向
From:http://tw.wingwit.com/Article/program/SQLServer/201311/21988.html