Board logo

標題: [教學] (PHP+IIS+MsSQL教學第31篇) 認識DML指令 下篇 [打印本頁]

作者: 小誌    時間: 2010-5-17 18:01     標題: (PHP+IIS+MsSQL教學第31篇) 認識DML指令 下篇

Delete刪除資料
當我們使用Recordset元件的Delete方法刪除資料錄時,只能一筆一筆慢慢的刪除,如果透過SQL的Delete指令則可一次刪除多筆資料。
以下為Delete指令的基本語法:
Delete指令敘述格式
  1. Delete From 資料表名 Where 條件式
複製代碼
例如:刪除「成績單」資料表中全部「國文」分數小於60分的同學資料:
  1. Delete Form 成績單 Where 國文 < 60
複製代碼
或者,刪除「成績單」資料表中全部「數學」分數介於80到60分的同學資料:
  1. Delete Form 成績單 Where 數學 Between 60 And 80
複製代碼
特別值得一提的是:如果沒有撰寫Where指令敘述,則會將資料表內的全部資料錄都刪除掉:
  1. Delete Form 成績單
複製代碼
不過,雖然是將資料表內的資料全部刪除,但是,資料表本身還是存在的,只是裡面沒有資料而成為空的資料表。
作者: 小誌    時間: 2010-5-17 18:08

Insert Into 新增資料
Insert Into指令有兩種用法:一種是新增資料錄,另一種是將取得的資料新增到另一個已經存在的資料表內:


新增資料錄
使用Insert Into指令新增資料錄到資料表內,其格式如下:
新增資料錄
  1. Insert Into 資料表名(欄位1,欄位2,…)
  2. Values(欄位1值,欄位2值…)
複製代碼
要新增一筆資料到資料表中,必須先指定各欄位的名稱,再將欄位值逐一的指定給相對應的欄位:
[attach]582[/attach]


假若,在Values(…)中的欄位值順序與原始資料表中所定義的欄位順序完全相同,並且,在Values(…)中所填入的欄位值數量與原始資料表中的欄位數目是相同的,則我們可以不必指定欄位名稱,例如:
  1. Insert Into 成績單 Values(900712,’楊小誌’,90,80,92)
複製代碼
[attach]583[/attach]


新增資料到已存在的資料表
將Select指令所選取的資料錄新增到另一個已經存在的資料表內,可使用下列格式的Insert Into格式敘述:
新增資料錄到資料表
  1. Insert Into 資料表名 (欄位1,欄位2,…)Select…  
複製代碼
注意:上式中的「資料表名」是指原本就已經存在的資料表!
[attach]584[/attach]
如果,有兩個資料表的欄位格式與順序一模一樣,如上圖的「成績單」、「我的成績單」資料表,如果要將「成績單」資料表中國文分數大於90的同學資料新增到「我的成績單」資料表時,因為兩個資料表的欄位名稱及順序都一樣,那麼在Insert Into指令敘述中就可以省略指定欄位名稱的敘述:
  1. Insert Into 我的成績單
  2. Select * From 成績單Where 國文>90
複製代碼
則上式的執行結果如下圖:
[attach]585[/attach]


假若,兩個資料表欄位順序是不同的,如下圖中的「成績單」、「你的成績單」資料表。
[attach]586[/attach]
如果要將「成績單」資料表中國文分數大於90的同學資料新增到「你的成績單」資料表時,就必須一一的指定欄位名稱:
  1. Insert Into 你的成績單(學號, 姓名,國文,英文,數學)
  2. Select * From 成績單Where 國文>90
複製代碼
上例的執行結果如下圖:
[attach]587[/attach]
作者: 小誌    時間: 2010-5-17 18:15

Select Into 新增資料表
如何將篩選出來的資料錄存放到一個新的資料表內(該資料表尚未存在於資料庫中)?使用Insert Into指令是鐵定不行的,因為Insert Into指令只能將資料存入「已經」存在的資料表內。如果要將資料存入一個尚未存在的資料表中,我們可以使用Select Into指令,當我們使用Select Into指令將資料存入資料表之前,Select Into指令會先在資料庫中建立一個新的資料表後,再將資料存放進去。

Select Into指令有三種用法:

新增資料表並新增一筆資料錄
新增資料錄
  1. Select ‘欄位值’ As ‘欄位名’ Into 新資料表名
複製代碼
例如:新增一個名為「測試」的資料表,並於資料表內新增一筆欄位名稱為「姓名」,欄位值為「楊小誌」、欄位名稱為「mail」,欄位值為「[email protected]」的資料錄,則其指令敘述如下:
  1. Select ‘楊小誌’ As 姓名,’[email protected]’ As mail Into 測試
複製代碼
執行上列指令敘述後,就會在資料庫中新增一個「測試」資料表,資料表內並存有一筆資料:
[attach]588[/attach]
  1. <?
  2.     $conn = mssql_connect("127.0.0.1", "sa", "12345");
  3.     if(@mssql_select_db("LEAVE", $conn))
  4.      {
  5.       //資料庫存在,建立SQL命令字串
  6.     $SQL="Select '楊小誌' As 姓名,'[email protected]' As mail Into 測試";
  7.       //將回傳結果存放於變數中
  8.       $datalist=mssql_query($SQL);
  9.       //取得欄位數量
  10.       $fieldnum=mssql_num_fields($datalist);
  11.      }
  12.     else
  13.      {
  14.       echo "資料庫不存在";
  15.      }
  16. ?>
複製代碼
注意:如果指定新增的資料表名稱,是已經存在於資料庫的資料表名稱,則Select Into指令敘述就會執行失敗,例如:第一次執行範例ex09_06.php後,「測試」是一個存在於資料庫內的資料表,而我們使用Select Into指令敘述時,卻又將新增的資料表名稱定為「測試」,則您將會獲得下圖的錯誤訊息:
[attach]589[/attach]


複製資料表
將已經存在的資料表複製一份,並將資料存入新建的資料表內:
複製資料表
  1. Select * From 資料表名 Into 新資料表名
複製代碼
例如:為「成績單」資料表建立一個備分資料表「成績單副本」:
(節錄)
  1. //資料庫存在,建立SQL命令字串
  2.       $SQL="Select * From 成績單 Into 成績單副本";
  3.       //將回傳結果存放於變數中
  4.       $datalist=mssql_query($SQL);
  5.       //取得欄位數量
  6.       $fieldnum=mssql_num_fields($datalist);
複製代碼
篩選資料並另存於新資料表
這是最常用的一種Select Into指令敘述,就是直接篩選已存在的資料表資料,然後將篩選後的資料另外建立成一個新的資料表:
新增資料表
  1. Select * Into 新資料表名From 資料表 Where 條件式
複製代碼
例如:篩選「成績單」資料表內國文成績大於90分的同學資料,存入新建的「國文大於90」資料表內:
(節錄)
  1. //資料庫存在,建立SQL命令字串
  2.       $SQL="Select * Into 國文大於90 From 成績單 Where 國文>90";
  3.       //將回傳結果存放於變數中
  4.       $datalist=mssql_query($SQL);
  5.       //取得欄位數量
  6.       $fieldnum=mssql_num_fields($datalist);
複製代碼
[attach]590[/attach]
作者: 小誌    時間: 2010-5-17 18:17

Update Set 修改資料
不管是單筆資料的修改,或是多筆資料的修改,皆可使用Update Set指令敘述,例如:老師大發慈悲,決定將同學的國文考試成績全部都加10分,那麼可以使用Update Set指令來一次修正多筆資料,Update Set指令敘述的格式如下:
修改資料
  1. Update 資料表名 Set 欄位值運算式
複製代碼
為全部同學的國文成績加10分:
  1. Update 成績單 Set 國文 = 國文 + 10
複製代碼
如果要修改資料的欄位不只一個,則可將多個欄位的資料更動運算式串接在「Set」之後,例如:為全部同學的國文成績加10分,英文分數加5分:
  1. Update 成績單 Set 國文 = 國文 + 10, 英文 = 英文 + 5
複製代碼
上兩個範例敘述是將全部的資料錄欄位資料都加以修改,我們也可以加上有條件的Where指令敘述來做有條件的資料修改,例如:為國文成績介於59到50分之間的同學,將其國文成績直接提升為60分:
  1. Update 成績單 Set 國文 = 60 Where 國文 Between 59 And 50
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)