1、主要内容

● 通过SSMS,插入、更新和删除表数据
● 通过INSERT语句向表中插入数据
● 通过UPDATE语句更新表内数据
● 通过DELETE语句删除表内数据
● 使用INSERT、UPDATE和DELETE语句的几个技巧

2、 使用INSERT语句插入数据

(1) 插入完整的行

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

VALUES子句中必须列出所有字段的值,而且必须按表中字段顺序排列
说明:兼容的数据类型是指同一数据类型SQL Server能自动转换成兼容类型的数据类型,例如,SQL Server能够将日期格式的字符串自动转换为日期型数据,因此,日期格式的字符串与日期型数据是兼容的。

【例1】向数据表course添加如下表所示的课程内容。

  1. INSERT INTO course
  2. VALUES ('009','法律基础', '必修',3);
  3. INSERT INTO course
  4. VALUES ('010','素描', '选修',2)

(2) 向日期时间型字段插入数据
【例5】向数据表stu_info添加如表所示的学生信息。

  1. INSERT INTO stu_info
  2. VALUES ('0016','玛丽','女','1989-02-07',' marry@163.com ','13716161616','物理系')

(3) 将数据插入到指定字段
【例6】向数据表stu_info添加如表所示的学生信息。

  1. INSERT INTO stu_info(sno,sname, sex, birth, depart)
  2.  
  3. VALUES ('0017', '周伦杰','男','1987-05-07', '中文系')
  4.  
  5. INSERT INTO stu_info
  6.  
  7. VALUES ('0017','周伦杰','男','1987-05-07', NULL,NULL,'中文系')

(4) 将查询结果插入表

  1. INSERT INTO表名[(字段列表)]
  2.  
  3. SELECT语句

下面创建一个数据表,并命名为stu_info_copy。

  1. CREATE TABLE stu_info_copy
  2.  
  3. (
  4.  
  5. 学号 char(4) NOT NULL,
  6.  
  7. 姓名 nchar(20) NOT NULL,
  8.  
  9. 性别 nchar(1) NOT NULL,
  10.  
  11. 出生日期 date,
  12.  
  13. 电子信箱 char(50),
  14.  
  15. 手机号码 char(11),
  16.  
  17. 所属院系 nchar(30)
  18.  
  19. )

【例7】将stu_info表中所有数据,通过INSERT SELECT插入到stu_info_sopy表。

分析:因为两个表的表结构相同,而且要将stu_info中所有字段的内容都插入到stu_info_copy表中,所以在INSERT子句中可以省略字段列表。

  1. INSERT INTO stu_info_copy
  2.  
  3. SELECT *
  4.  
  5. FROM stu_info

因为两表的表结构一致,而且要将stu_info表所有字段的内容都复制过去,所以在INSERT子句中没有列出字段列表。但是,如果两表的表结构不同或者只复制一部分字段,则应当在INSERT子句中列出字段列表。
3 使用UPDATE语句更新数据
(1) 更新单个字段的数据

  1. UPDATE 表名
  2.  
  3. SET 字段名 = 更新值
  4.  
  5. WHERE 条件表达式

(1)UPDATE子句。指定SQLServer要使用的表,并打开表。
(2)WHERE子句。将表中满足条件的记录放入结果集。
(3)SET子句。更新结果集中所有记录的特定字段的数据。
注意:UPDATE语句中的WHERE子句可以被省略,这样一来,所有记录都会被更新。因此,在省略WHERE子句前应当考虑清楚,是否真的要更新所有记录的数据。
【例8】在stu_info表中,将名叫“张三”的学生的email更改为“zhangsan@163.com”。

  1. UPDATE stu_info
  2.  
  3. SET email='zhangsan@163.com '
  4.  
  5. WHERE sname='张三'

(2) 更新多个字段的数据

  1. UPDATE 表名
  2.  
  3. SET 字段名1=更新值1,
  4.  
  5. 字段名2=更新值2,
  6.  
  7. 字段名3=更新值3
  8.  
  9. WHERE 条件表达式

【例9】在stu_info表中,将没有院系的学生全部归为“国际交流学院”所属,并将email统一更改为“gjjl@imnu.edu.cn”。

  1. UPDATE stu_info
  2.  
  3. SET depart ='国际交流学院',
  4.  
  5. email='gjjl@imnu.edu.cn'
  6.  
  7. WHERE depart IS NULL

(3) 使用表连接更新数据
  通过FROM子句和WHERE子句配合,可以进行多表连接。
【例10】score表中,在每个学生“大学英语”的平时成绩上加5分。
分析:因为score表中只有课程编号,而并没有课程名称,因此,必须从course表中得到“大学英语”的课程编号后,然后才能根据该编号更新score表中的数据。所以解决问题的最佳方式是连接score表和course表进行更新操作。

  1. UPDATE score
  2.  
  3. SET usually= usually +5
  4.  
  5. FROM score AS s,course AS c
  6.  
  7. WHERE c.cname='大学英语'
  8.  
  9. AND s.cno=c.cno

(4) 使用UPDATE语句删除指定字段的数据
   UPDATE语句还有一个作用,即删除指定字段的数据。所谓删除,只是使用NULL值替换原有的字段值而已。
  注意:用NULL值替换字段值时,首先必须保证该字段可以为空,否则会出现错误。
【例11】在stu_info表中,将所有外语系学生的“telephone”字段的值删除。

  1. UPDATE stu_info
  2.  
  3. SET telephone = NULL
  4.  
  5. WHERE depart='外语系'

4、 使用DELETE语句删除数据
(1) 使用DELETE语句删除指定记录
   使用DELETE语句删除的是整行记录,而并非是记录中的某个字段值。

  1. DELETE FROM 表名
  2.  
  3. WHERE 条件表达式

【例12】从stu_info_copy表,删除名叫“安娜”的学生。

  1. DELETE FROM stu_info_copy
  2.  
  3. WHERE 姓名 = '安娜'

【例13】从stu_info_copy表,删除所有外语系的学生。

  1. DELETE FROM stu_info_copy
  2.  
  3. WHERE 所属院系 ='外语系'

(2) 在DELETE语句中使用多表连接
   创建一个score表的复制表score_copy。

  1. SELECT *
  2.  
  3. INTO score_copy
  4.  
  5. FROM score

【例14】从score_copy表中,删除“张三”的所有相关记录。
  先查看score_copy表中关于“张三”的全部记录。

  1. SELECT s.*
  2.  
  3. FROM score_copy AS s,stu_info AS st
  4.  
  5. WHERE st.sname = '张三'
  6.  
  7. AND st.sno=s.sno

其次,使用下面的语句删除记录。

  1. DELETE score_copy
  2.  
  3. FROM score_copy AS s,stu_info AS st
  4.  
  5. WHERE st.sname ='张三'
  6.  
  7. AND st.sno=s.sno

说明:删除语句中,DELETE关键字后的表名指定要从哪个数据表删除数据,在本语句中DELETE关键字后是score_copy,因此,只删除score_copy表中的相关数据,而与FROM子句中列出的其他表无关,例如与stu_info表无关。
再次使用上面的SELECT语句,查看“张三”的相关内容。
(3) 使用DELETE语句删除所有记录
如果DELETE语句后不加WHERE子句,则会将表内所有记录全部删除。这里需要注意区分的是,DELETE语句删除的是所有记录,而并不是数据表本身。
【例15】删除stu_info_copy表内的所有记录。

  1. DELETE FROM stu_info_copy

5、 使用TRUNCATE语句删除所有记录
    实际上使用DELETE语句删除表中所有记录的效率有时非常低,因为SQL Server会向事务处理日志写入一些内容,这些内容在删除执行失败时,可以帮助用户将数据回滚(回退)到删除执行前的状态。
TRUNCATE是删除表中所有记录的另一种语句,与DELETE语句相比,TRUNCATE运行效率非常高,因为使用TRUNCATE语句时,SQL Server不会写入任何内容,换个角度说,TRUNCATE语句所做的修改是不能回滚的。
【例16】删除stu_info_copy表内的所有记录。

  1. TRUNCATE TABLE stu_info_copy

6、 综合练习
1.判断以下INSERT语句是否能够将数据正确插入到stu_info_copy表。

  1. INSERT INTO stu_info_copy
  2.  
  3. VALUES ('0016', '玛丽','女', '198927', 'marry@163.com ', '13716161616','物理系')

分析:从错误信息(从字符串转换日期和/或时间时,转换失败)。分析INSERT语句后发现,给出生日期(birth)字段插入的值“198927”不是日期格式的字符串,所以该语句运行错误。在本例中如果将值改为“19890207”,则插入语句会正确运行,如下所示。

  1. INSERT INTO stu_info_copy
  2.  
  3. VALUES ('0016', '玛丽', '女', '19890207', 'marry@163.com ', '13716161616', '物理系')

2.将计算机系所有学生的“信息基础”课程的考试成绩更改为95分。
分析:在score表中没有学生的院系信息,也没有课程的课程名称信息,而stu_info表中有院系信息,course表中有课程名称信息,因此必须将stu_info表和course表连接到score表上进行更新。

  1. UPDATE score
  2.  
  3. SET exam= 95
  4.  
  5. FROM stu_info AS st ,score AS s,course AS c
  6.  
  7. WHERE st.depart='计算机系 '
  8.  
  9. AND c.cname='信息基础'
  10.  
  11. AND s.cno=c.cno
  12.  
  13. AND st.sno=s.sno
  14.  
  15. UPDATE score
  16.  
  17. SET exam= 95
  18.  
  19. FROM stu_info
  20.  
  21. INNER JOIN
  22.  
  23. score ON stu_info.sno = score.sno
  24.  
  25. INNER JOIN
  26.  
  27. course ON score.cno = course.cno
  28.  
  29. WHERE stu_info.depart = N'计算机系'
  30.  
  31. AND course.cname = N'信息基础'
 

SQL Server 插入、更新和删除数据的更多相关文章

  1. SQL Server 远程更新目标表数据

    分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库. ** 温馨提示:如需转载本文,请注明内容出处.** 本文连接:http://www.cnblogs.c ...

  2. 本地数据库(sql server)插入一条新数据时,同步到服务器数据库

    之前有个同学问我,本地数据库插入新数据时怎么同步到服务器上,当时我先想到是程序逻辑控制,作相应的处理. 但有时候我们程序不太好处理,那能不能从数据库入手呢,数据库不是有触发器(Trigger)吗,应该 ...

  3. MySQL入门很简单: 9 插入 更新与删除数据

    1. 插入数据:INSERT 1)为表的所有字段插入数据 第一种: 不指定具体的字段名 INSERT INTO 表名 VALUES(值1,值2,...,值n): 第二种:INSERT语句中列出所有字段 ...

  4. mySQL 插入,更新和删除数据

    插入数据: 语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如 ...

  5. mySQL 教程 第5章 插入 更新与删除数据

    使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...

  6. SQL 必知必会·笔记<14>更新和删除数据

    1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...

  7. 使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据

    将数据存储在Amazon S3中可带来很多好处,包括规模.可靠性.成本效率等方面.最重要的是,你可以利用Amazon EMR中的Apache Spark,Hive和Presto之类的开源工具来处理和分 ...

  8. 【SQL Server性能优化】删除大量数据的方法比较

    原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...

  9. PostgreSQL自学笔记:7 插入、更新与删除数据

    7 插入.更新与删除数据 7.1 插入数据 先创建表person: create table person( id int not null, name char(40) not null defau ...

  10. php+mysqli实现批量执行插入、更新及删除数据的方法

    本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只 ...

随机推荐

  1. 10个实战及面试常用Linux Shell脚本编写

    来自:http://blog.51cto.com/lizhenliang/1929044 注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规 ...

  2. 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...

  3. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  4. jquery播放视频事件

    $('video').trigger('play'); $('video').trigger('pause'); 判断video播放器的播放状态,并进行切换播放,需要这样 let video = $( ...

  5. TP5增加扩展配置目录

    ThinkPHP5.0.1版本开始增加了扩展配置目录的概念,在应用配置目录或者模块配置目录下面增加extra子目录,下面的配置文件都会自动加载,无需任何配置. 这极大的方便了我们进行扩展配置,比如在a ...

  6. centos linux服务器apache+mysql环境访问慢优化方法

    查找软件安装目录:find / -name 软件名称 一.优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问 ...

  7. 【tp6】解决Driver [Think] not supported.

    使用助手函数view时会出现 解决方法:使用composer安装composer require topthink/think-view

  8. Python调用函数带括号和不带括号的区别

    1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...

  9. AT4144-[ARC098D]Donation【Kruskal重构树,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4144 题目大意 \(n\)个点\(m\)条边的一张无向联通图,每个点有两个值\(a_i,b_i\).表示经过该 ...

  10. P4389-付公主的背包【生成函数,多项式exp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 \(n\)种物品,第\(i\)种大小为\(v_i\),数量无限.对于每个\(s\in[1,m]\ ...