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 --逐条记录删除,有日志记录


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值