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'信息基础'
SQL Server 插入、更新和删除数据的更多相关文章
- SQL Server 远程更新目标表数据
分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库. ** 温馨提示:如需转载本文,请注明内容出处.** 本文连接:http://www.cnblogs.c ...
- 本地数据库(sql server)插入一条新数据时,同步到服务器数据库
之前有个同学问我,本地数据库插入新数据时怎么同步到服务器上,当时我先想到是程序逻辑控制,作相应的处理. 但有时候我们程序不太好处理,那能不能从数据库入手呢,数据库不是有触发器(Trigger)吗,应该 ...
- MySQL入门很简单: 9 插入 更新与删除数据
1. 插入数据:INSERT 1)为表的所有字段插入数据 第一种: 不指定具体的字段名 INSERT INTO 表名 VALUES(值1,值2,...,值n): 第二种:INSERT语句中列出所有字段 ...
- mySQL 插入,更新和删除数据
插入数据: 语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如 ...
- mySQL 教程 第5章 插入 更新与删除数据
使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...
- SQL 必知必会·笔记<14>更新和删除数据
1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...
- 使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据
将数据存储在Amazon S3中可带来很多好处,包括规模.可靠性.成本效率等方面.最重要的是,你可以利用Amazon EMR中的Apache Spark,Hive和Presto之类的开源工具来处理和分 ...
- 【SQL Server性能优化】删除大量数据的方法比较
原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...
- PostgreSQL自学笔记:7 插入、更新与删除数据
7 插入.更新与删除数据 7.1 插入数据 先创建表person: create table person( id int not null, name char(40) not null defau ...
- php+mysqli实现批量执行插入、更新及删除数据的方法
本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只 ...
随机推荐
- 10个实战及面试常用Linux Shell脚本编写
来自:http://blog.51cto.com/lizhenliang/1929044 注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规 ...
- 自己用树莓派做了一个电视盒子,还可以看优酷和cctv
我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...
- PHP中使用PDO操作事务的一些小测试
关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...
- jquery播放视频事件
$('video').trigger('play'); $('video').trigger('pause'); 判断video播放器的播放状态,并进行切换播放,需要这样 let video = $( ...
- TP5增加扩展配置目录
ThinkPHP5.0.1版本开始增加了扩展配置目录的概念,在应用配置目录或者模块配置目录下面增加extra子目录,下面的配置文件都会自动加载,无需任何配置. 这极大的方便了我们进行扩展配置,比如在a ...
- centos linux服务器apache+mysql环境访问慢优化方法
查找软件安装目录:find / -name 软件名称 一.优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问 ...
- 【tp6】解决Driver [Think] not supported.
使用助手函数view时会出现 解决方法:使用composer安装composer require topthink/think-view
- Python调用函数带括号和不带括号的区别
1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...
- AT4144-[ARC098D]Donation【Kruskal重构树,dp】
正题 题目链接:https://www.luogu.com.cn/problem/AT4144 题目大意 \(n\)个点\(m\)条边的一张无向联通图,每个点有两个值\(a_i,b_i\).表示经过该 ...
- P4389-付公主的背包【生成函数,多项式exp】
正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 \(n\)种物品,第\(i\)种大小为\(v_i\),数量无限.对于每个\(s\in[1,m]\ ...