SQL Server 插入、更新和刪除數據


1、主要內容

● 通過SSMS,插入、更新和刪除表數據
● 通過INSERT語句向表中插入數據
● 通過UPDATE語句更新表內數據
● 通過DELETE語句刪除表內數據
● 使用INSERT、UPDATE和DELETE語句的幾個技巧

2、 使用INSERT語句插入數據

(1) 插入完整的行

 

INSERT INTO 表名
VALUES (字段1的值,字段2的值,字段3的值,……,字段n的值)

 

 

 

VALUES子句中必須列出所有字段的值,而且必須按表中字段順序排列
說明:兼容的數據類型是指同一數據類型SQL Server能自動轉換成兼容類型的數據類型,例如,SQL Server能夠將日期格式的字符串自動轉換為日期型數據,因此,日期格式的字符串與日期型數據是兼容的。

【例1】向數據表course添加如下表所示的課程內容。

INSERT INTO course
VALUES ('009','法律基礎', '必修',3);
INSERT INTO course
VALUES ('010','素描', '選修',2)

 

(2) 向日期時間型字段插入數據
【例5】向數據表stu_info添加如表所示的學生信息。

  

INSERT INTO stu_info
VALUES ('0016','瑪麗','','1989-02-07',' marry@163.com ','13716161616','物理系')

 

(3) 將數據插入到指定字段
【例6】向數據表stu_info添加如表所示的學生信息。


  

INSERT INTO stu_info(sno,sname, sex, birth, depart)

VALUES ('0017', '周倫傑','','1987-05-07', '中文系')

INSERT INTO stu_info

VALUES ('0017','周倫傑','','1987-05-07', NULL,NULL,'中文系')

 


(4) 將查詢結果插入表

INSERT INTO表名[(字段列表)]

SELECT語句

 

 

 

下面創建一個數據表,並命名為stu_info_copy。

CREATE TABLE stu_info_copy

(

    學號      char(4)      NOT NULL,

    姓名      nchar(20)    NOT NULL,

    性別      nchar(1)     NOT NULL,

    出生日期   date,

    電子信箱   char(50),

    手機號碼   char(11),

    所屬院系   nchar(30)

)

 

【例7】將stu_info表中所有數據,通過INSERT SELECT插入到stu_info_sopy表。

分析:因為兩個表的表結構相同,而且要將stu_info中所有字段的內容都插入到stu_info_copy表中,所以在INSERT子句中可以省略字段列表。

INSERT INTO  stu_info_copy

SELECT  *

FROM   stu_info

 

因為兩表的表結構一致,而且要將stu_info表所有字段的內容都復制過去,所以在INSERT子句中沒有列出字段列表。但是,如果兩表的表結構不同或者只復制一部分字段,則應當在INSERT子句中列出字段列表。
3 使用UPDATE語句更新數據
(1) 更新單個字段的數據
  

UPDATE  表名

SET     字段名 = 更新值

WHERE  條件表達式

 


(1)UPDATE子句。指定SQLServer要使用的表,並打開表。
(2)WHERE子句。將表中滿足條件的記錄放入結果集。
(3)SET子句。更新結果集中所有記錄的特定字段的數據。
注意:UPDATE語句中的WHERE子句可以被省略,這樣一來,所有記錄都會被更新。因此,在省略WHERE子句前應當考慮清楚,是否真的要更新所有記錄的數據。
【例8】在stu_info表中,將名叫“張三”的學生的email更改為“zhangsan@163.com”。

UPDATE stu_info

SET email='zhangsan@163.com '

WHERE sname='張三'

(2) 更新多個字段的數據

UPDATE  表名

SET     字段名1=更新值1,

字段名2=更新值2,

字段名3=更新值3

WHERE  條件表達式

【例9】在stu_info表中,將沒有院系的學生全部歸為“國際交流學院”所屬,並將email統一更改為“gjjl@imnu.edu.cn”。
 

UPDATE  stu_info

SET     depart ='國際交流學院',

        email='gjjl@imnu.edu.cn'

WHERE  depart IS NULL

 

(3) 使用表連接更新數據
  通過FROM子句和WHERE子句配合,可以進行多表連接。
【例10】score表中,在每個學生“大學英語”的平時成績上加5分。
分析:因為score表中只有課程編號,而並沒有課程名稱,因此,必須從course表中得到“大學英語”的課程編號后,然后才能根據該編號更新score表中的數據。所以解決問題的最佳方式是連接score表和course表進行更新操作。

UPDATE  score

SET     usually= usually +5

FROM   score AS s,course AS c

WHERE  c.cname='大學英語'

AND    s.cno=c.cno

 

(4) 使用UPDATE語句刪除指定字段的數據
   UPDATE語句還有一個作用,即刪除指定字段的數據。所謂刪除,只是使用NULL值替換原有的字段值而已。
  注意:用NULL值替換字段值時,首先必須保證該字段可以為空,否則會出現錯誤。
【例11】在stu_info表中,將所有外語系學生的“telephone”字段的值刪除。
  

UPDATE stu_info

SET    telephone = NULL

WHERE  depart='外語系'

 

4、 使用DELETE語句刪除數據
(1) 使用DELETE語句刪除指定記錄
   使用DELETE語句刪除的是整行記錄,而並非是記錄中的某個字段值。

DELETE  FROM 表名

WHERE  條件表達式

 

【例12】從stu_info_copy表,刪除名叫“安娜”的學生。
  

DELETE FROM  stu_info_copy

WHERE       姓名 = '安娜'

 

【例13】從stu_info_copy表,刪除所有外語系的學生。
  

DELETE FROM  stu_info_copy

WHERE      所屬院系 ='外語系'

 

(2) 在DELETE語句中使用多表連接
   創建一個score表的復制表score_copy。

SELECT  *

INTO   score_copy

FROM  score

 

【例14】從score_copy表中,刪除“張三”的所有相關記錄。
  先查看score_copy表中關於“張三”的全部記錄。

SELECT  s.*

FROM   score_copy AS s,stu_info AS st

WHERE  st.sname = '張三'

AND    st.sno=s.sno

其次,使用下面的語句刪除記錄。

DELETE  score_copy

FROM   score_copy AS s,stu_info AS st

WHERE  st.sname ='張三'

AND    st.sno=s.sno

 

說明:刪除語句中,DELETE關鍵字后的表名指定要從哪個數據表刪除數據,在本語句中DELETE關鍵字后是score_copy,因此,只刪除score_copy表中的相關數據,而與FROM子句中列出的其他表無關,例如與stu_info表無關。
再次使用上面的SELECT語句,查看“張三”的相關內容。
(3) 使用DELETE語句刪除所有記錄
如果DELETE語句后不加WHERE子句,則會將表內所有記錄全部刪除。這里需要注意區分的是,DELETE語句刪除的是所有記錄,而並不是數據表本身。
【例15】刪除stu_info_copy表內的所有記錄。
 

DELETE  FROM  stu_info_copy

5、 使用TRUNCATE語句刪除所有記錄
    實際上使用DELETE語句刪除表中所有記錄的效率有時非常低,因為SQL Server會向事務處理日志寫入一些內容,這些內容在刪除執行失敗時,可以幫助用戶將數據回滾(回退)到刪除執行前的狀態。
TRUNCATE是刪除表中所有記錄的另一種語句,與DELETE語句相比,TRUNCATE運行效率非常高,因為使用TRUNCATE語句時,SQL Server不會寫入任何內容,換個角度說,TRUNCATE語句所做的修改是不能回滾的。
【例16】刪除stu_info_copy表內的所有記錄。

TRUNCATE TABLE stu_info_copy

6、 綜合練習
1.判斷以下INSERT語句是否能夠將數據正確插入到stu_info_copy表。

INSERT INTO stu_info_copy

VALUES ('0016', '瑪麗','', '198927', 'marry@163.com ', '13716161616','物理系')

分析:從錯誤信息(從字符串轉換日期和/或時間時,轉換失敗)。分析INSERT語句后發現,給出生日期(birth)字段插入的值“198927”不是日期格式的字符串,所以該語句運行錯誤。在本例中如果將值改為“19890207”,則插入語句會正確運行,如下所示。

INSERT INTO stu_info_copy

VALUES ('0016', '瑪麗', '', '19890207', 'marry@163.com ', '13716161616', '物理系')

2.將計算機系所有學生的“信息基礎”課程的考試成績更改為95分。
分析:在score表中沒有學生的院系信息,也沒有課程的課程名稱信息,而stu_info表中有院系信息,course表中有課程名稱信息,因此必須將stu_info表和course表連接到score表上進行更新。

UPDATE  score

SET     exam= 95

FROM   stu_info AS st ,score AS s,course AS c

WHERE  st.depart='計算機系 '

AND    c.cname='信息基礎'

AND    s.cno=c.cno

AND    st.sno=s.sno

UPDATE  score

SET     exam= 95

FROM   stu_info

 INNER JOIN

        score  ON stu_info.sno = score.sno

INNER JOIN

        course ON score.cno = course.cno

WHERE  stu_info.depart = N'計算機系'

AND     course.cname = N'信息基礎'
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM