6_3數據更新

使用的還是EMIS數據庫哈,不知道的可以看看前面的數據庫以及數據表的創建

use EMIS
go

--插入單行數據
--INSERT [INTO] <table_name > (column_name 1, column_name 2…, column_name n) VALUES(values 1, values 2,…, values n)
--INTO關鍵字是可選的,可以忽略,teble_name 指的是表的名稱,column_name 1, column_name 2…, column_name n指的是表中定義的列名稱,這些列必須在表中
--已經定義,VALUES子句中的值values 1, values 2,…, values n指的是要插入的記錄在各列中的取值。INSERT語句中的列名必須不VALUES子句中的值一一對應,且數據類型一致。
--給課程表中添加課程
insert into 課程 (課程號,課程名,先修課,學分,備註)
    values ('0041','sqlserver數據庫應用',null,3,null)
select * from 課程

--省略清單,添加課程
insert into 課程 values('0042','sqlserver數據庫高級應用','0041',3,null)

--default values子句
--如果表中所有列都允許爲空,或者定義有默認值或者其它可自勱獲取的數據類型,則可以使用INSERT...DEFAULT VALUES語句向表中插入一行
--僅用默認值的記錄,此行記錄唯一的參數是表名,列名和數據值都沒有。
--給都允許爲空的表中添加默認值,'選課少'表,三個字段都允許爲空
create table 選課少(studentId char(5), studentName varchar(20),studentage int)
go
insert into 選課少 default values

--插入多行數據
--利用INSERT…VALUES語句也可以向數據庫的表格中插入多行記錄,其語法結構如下:
--INSERT [INTO] <table_name > (column_name 1, column_name 2…, column_name n) VALUES(val 11, val 12,…, val 1n) , (val 21, val22,…, val 2n),…, (val n1, val n2,…, val nn)
--其中,需要在VALUES後面輸入各條記錄的值。上述方法雖然能夠達到插入多行數據的目的,但是需要錄入大量的數據值,效率過低。
--普通插入多行數據
insert into 課程 (課程號,課程名,先修課,學分,備註)
 values('0045','sql server 2014',null,3,null),
          ('0046','sql server 2015',null,3,null),
          ('0047','sql server 2016',null,3,null),
          ('0048','sql server 2017',null,3,null),
          ('0049','sql server 2018',null,3,null)

--select 插入查詢結果集
--• INSERT…SELECT語句借劣SELECT語句的靈活性,可以從任何地方抽取任意多行數據,並對數據迚行轉,從而作爲返回結果集插入數據庫表中。
 --• INSERT [INTO] table_name[(column_list)] SELECT column_list FROM table_name WHERE search_conditions
--• 其中,search_conditions指的是查詢條件,INSERT表和SELECT表的結果集的列數、列序、數據類型必須一致
--創建一個學分表,然後把每個選修課的課程所獲得的學分輸入該表中
create table 學分表
(學號 char(10) not null,姓名 varchar(20) not null,選修課程門數 int,學分 int)
go
insert into 學分表 
    select 學生.學號,學生.姓名,count(選課.課程號),sum(選課.成績) from 學生,選課
    where 學生.學號=選課.學號
    group by 學生.學號,學生.姓名

--大批量插入數據
--BULK INSERT語句是批量加載數據的一種方式,它按照用戶指定的格式把大量數據插入到數據庫的表中。
-- • BULK INSERT語句經常不FIELDTERMINATOR(字段之間的分隔符)子句和ROWTERMINATOR(行之間的分隔符) 子句一起使用。
--BULK INSERT 表名FROM ‘文件名’ WITH(FIELDTERMINATOR=‘字段分隔符 ’,ROWTERMINATOR=‘行分隔符' )
--大批量插入數據也就是說我在電腦桌面上創建一個文件比如說***.txt文件,該文件裏面保存有數據,並按照規律的分隔符分割
--然後運行下面的語句將該***.txt文件裏的數據插入到數據表中
--例如
bulk insert 表名
    from  文件路徑
        with(fieldterminator=';',rowterminator='\n')

--修改數據
--修改表中的數據可以使用查詢分析器中的網格界面迚行修改,也可以使用T-SQL的UPDATE語句實現數據的修改。
--UPDATE table_name SET column_1 =expression_1,column_2=expression_2, …, column_n =expression_n[WHERE search_conditions]
-- SET子句後面既可以跟具體的值,也可以是一個表達式。UPDATE語句只更新WHERE子句篩選的行,如果丌帶WHERE子句,則表中的所有行都將被更新。WHERE子句的條件也可以是一個子查詢。
--將軟件工程的學分修改爲4分
update 課程 set 學分=4 where 課程名='軟件工程'
--將選修課表中選修了“專業英語”課程的學生的成績減1分
update 選課  set 成績=成績-1
    where 課程號 in(select 課程號 from 課程 where 課程名='專業英語')

--刪除數據
--隨着系統的運行,表中可能會產生一些無用的數據,這些數據丌僅佔用空間,而且還影響查詢的速度,所以應該及時地刪除。
--truncate table table_name刪除所有記錄

--delete語句
--從表中刪除數據,最常用的是DELETE語句。
--DELETE語句的語法格式如下:
--DELETE FROM table_name[WHERE search_conditions]
 --如果省略了WHERE search_conditions子句,就表示刪除數據表中的全部數據;如果加上了WHERE search_conditions子句就可以根據篩選條件刪除表中的指定數據。

 --使用TRUNCATE TABLE語句比DELETE 語句要快,因爲它是逐頁刪除表中的內容,而DELETE則是逐行刪除內容。
 --TRUNCATE TABLE是不記錄日誌的操作,它將釋放表的數據和索引所佔據的所有空間以及所有爲全部索引分配的頁,刪除的數據是不可恢復的。
-- 而DELETE語句則不同,它在刪除每一行記錄時都要把刪除操作記錄在日誌中。刪除操作記錄在日誌中,可以通過事務回滾來恢復刪除的數據。
 --用TRUNCATE TABLE和DELETE語句都可以刪除所有的記錄,但是表結構還在,而DROP TABLE不但刪除表中的數據,而且還20 刪除表的結構並釋放空間。
 --清空bulk_table
 truncate table bulk_table  --逐頁記錄刪除,無日誌記錄
 --刪除bulk_table中所有記錄
 delete from bulk_table --逐條記錄刪除,有日誌記錄


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章