实验名称:数据库表的基本操作与表内数据操作

实验目的:

  1. 掌握数据库表创建方法(交互式、T-SQL法)
  2. 掌握修改数据库表结构的方法
  3. 掌握删除数据库表的方法
  4. 掌握交互式EXCEL文件录入数据至数据库表的方法
  5. 掌握T-SQL语句向数据库表中插入数据的方法
  6. 掌握修改与删除数据库表中数据的方法
  7. 掌握选择性复制数据库表的方法

实验意义:

  1. 通过实验学习,对于SQL Server中数据库表的基本创建方法,通过交互式与T-SQL语句熟练数据库表的创建、设计、修改与删除。
  2. 针对数据库的操作内容,通过反复练习数据库的数据录入、修改与删除等功能,熟练对表中数据的基本操作。导入数据、更新数据、删除数据与提取复制数据是数据库表中常用的操作内容。

实验内容:

  1. 创建数据库表与修改结构
  2. 删除数据库表
  3. 录入数据至数据库表
  4. 修改与删除数据
  5. 复制数据
  6. 习题练习

实验步骤:

  • 数据库表的创建与结构修改

在对象资源管理器内选择需要操作的数据库,右击表文件,选择新建表。

VB6 批量删除SQLSERVER表索引_数据库

接下来设置表内结构,设计表的列名与列的数据类型,并设计其是否能为空值。

设置前需要先了解主要的字符类型与其存储空间如下。

VB6 批量删除SQLSERVER表索引_数据库_02

基于nchar为双字节类型,更适合于亚洲字体的存放,因此将列名为中文字符的均采用nchar数据类型,括号内的数字即设置最大存放多少个中文字符。

注意:TNO与TN为教师名称和教师号,这两列数据不能为空值,可作为候选键。

VB6 批量删除SQLSERVER表索引_数据库_03

接下来对设计完毕的数据库表进行保存操作,并设置名称。

VB6 批量删除SQLSERVER表索引_SQL_04

最后可对设置完毕的数据库表进行查看。

VB6 批量删除SQLSERVER表索引_数据库表_05

在对象资源管理器内可以查看到列信息,各列的列名称与数据类型。

VB6 批量删除SQLSERVER表索引_数据库_06

接下来再采用交互式方法创建学生表S如下

VB6 批量删除SQLSERVER表索引_数据_07

采用T-SQL语句创建课程表C,需要再对象资源管理器上方选择该语句执行的数据库区域为WJN。

VB6 批量删除SQLSERVER表索引_数据库表_08

刷新之后可以看到数据库WJN内存在三个所创建的表格

VB6 批量删除SQLSERVER表索引_sql_09

再采用同样的方法创建学生选课表SC表

VB6 批量删除SQLSERVER表索引_sql_10

T-SQL语句创建老师授课表TC表

VB6 批量删除SQLSERVER表索引_数据_11

接下来是对表的设计操作,通过右击表,选择设计,可以修改表的结构

VB6 批量删除SQLSERVER表索引_数据_12

接下来是对S表的NATIVE列属性修改,将其改为char(40),并且设置其为不允许为空值

VB6 批量删除SQLSERVER表索引_sql_13

选择保存,但是弹出来警告语句,显示无法保存,需要在工具中进行设置

VB6 批量删除SQLSERVER表索引_数据库表_14

VB6 批量删除SQLSERVER表索引_数据库表_15

找到Designers,打开后,取消勾选“组织保存要求重新创建表的更改”

VB6 批量删除SQLSERVER表索引_sql_16

VB6 批量删除SQLSERVER表索引_数据_17

再次保存之后,即可成功修改表S

接下来再次修改NATIVE内数据类型,修改数据类型长度为16,并且允许有空值

VB6 批量删除SQLSERVER表索引_数据_18

  • 删除数据库表 

右击数据库表,选择设计,然后选中某列然后右击,选中删除列,即可把改列删除。

VB6 批量删除SQLSERVER表索引_数据库表_19

采用T-SQL语句增加列NATIVE,并设置其列属性

VB6 批量删除SQLSERVER表索引_数据_20

在对象资源管理器中刷新之后可以看到表S中列已经存在,并且属性信息也可以看出

VB6 批量删除SQLSERVER表索引_数据_21

T-SQL语句修改列NATIVE属性信息如下:

VB6 批量删除SQLSERVER表索引_SQL_22

修改完成后再次在对象资源管理器中刷新后可以看出属性信息已经变化

VB6 批量删除SQLSERVER表索引_数据库_23

对表整体的删除操作

右击表TC,选中删除,并在弹出的界面点击确定

VB6 批量删除SQLSERVER表索引_数据_24

VB6 批量删除SQLSERVER表索引_sql_25

在对象资源管理器中刷新后可以看出表TC已经不存在

VB6 批量删除SQLSERVER表索引_SQL_26

采用T-SQL语句对TC表进行删除操作

其中删除语句前加上语句USE WJN GO,通过该语句设置了T-SQL查询语句的空间。

VB6 批量删除SQLSERVER表索引_数据库表_27

  • 录入数据至数据库表

设置待录入数据在EXCEL表格中,自定义录入数据如下表

VB6 批量删除SQLSERVER表索引_SQL_28

在数据库中右击选中任务,并点击导入数据

VB6 批量删除SQLSERVER表索引_数据_29

设置导入数据的数据源为Microsoft Excel

VB6 批量删除SQLSERVER表索引_SQL_30

在电脑文件夹中选择待导入的表格文件

VB6 批量删除SQLSERVER表索引_数据_31

点击下一步操作

VB6 批量删除SQLSERVER表索引_SQL_32

但弹出消息为无法导入,原因是该版本为SQL 2008 R2,只支持

Microsoft Excel格式为.xls格式的表格文件,因此无法导入.xlsx格式文件

VB6 批量删除SQLSERVER表索引_SQL_33

接下来对原始excel表格文件进行修改,将格式另存为.xls后缀

VB6 批量删除SQLSERVER表索引_数据库表_34

再次执行导入数据步骤,点击下一步发现可以顺利执行该过程

VB6 批量删除SQLSERVER表索引_SQL_35

查看数据库为默认的WJN数据库,因此继续执行下一步操作

VB6 批量删除SQLSERVER表索引_数据库表_36

选择复制一个或多个表或视图的数据,点击下一步

VB6 批量删除SQLSERVER表索引_sql_37

 

 

 

接下来可以选择设置直接导入输出目标的表,也可以编辑映射,通过源数据直接导出到新建的表中,下图先展示编辑映射的方法建立新表格

VB6 批量删除SQLSERVER表索引_数据库表_38

对照原始S表中属性信息,在对新的Sheet$表中设置相同的属性信息,点击编辑,采用T-SQL语句对属性信息进行设置

VB6 批量删除SQLSERVER表索引_sql_39

对应修改完成后如下图所示,不仅修改字符类型,长度,且修改了是否可以为空值选项

VB6 批量删除SQLSERVER表索引_sql_39

之后点击预览

VB6 批量删除SQLSERVER表索引_数据库_41

可以对比初始excel表格,发现数据无缺失、错误,点击确定

VB6 批量删除SQLSERVER表索引_数据库_42

点击下一步继续执行,立即运行

VB6 批量删除SQLSERVER表索引_数据库_43

点击完成

VB6 批量删除SQLSERVER表索引_SQL_44

最后显示执行成功

VB6 批量删除SQLSERVER表索引_数据库表_45

可以单击右下角的“报告”,点击“查看报告”

VB6 批量删除SQLSERVER表索引_数据库_46

可以看出均运行成功

VB6 批量删除SQLSERVER表索引_数据_47

最后在SQL中对该表右击,选中“查看前一千行”进行查看信息,可以看出与初始待导入的excel表完全相同。

VB6 批量删除SQLSERVER表索引_数据库_48

再回到刚才提到的导入数据映射的步骤,接下来是直接导出到目标表S内,可以不用编辑映射,因为S表已经存在各列极其属性信息,单击下一步

VB6 批量删除SQLSERVER表索引_数据库_49

 

 

无视这些警告,继续点击下一步执行

VB6 批量删除SQLSERVER表索引_数据库_50

接下来显示执行成功,关闭该界面

VB6 批量删除SQLSERVER表索引_sql_51

在对象资源管理器内右击表S,选择查看前一千行

VB6 批量删除SQLSERVER表索引_数据库表_52

可以看出该表与excel表相同,正常运行

VB6 批量删除SQLSERVER表索引_sql_53

采用同上的方法,继续导入其他表格如下

VB6 批量删除SQLSERVER表索引_sql_54

由于T表已经在我们之前删除操作中被删除,因此选用编辑映射的方法,直接由excel表格导入生成规定新建格式的新表,命名为T

VB6 批量删除SQLSERVER表索引_数据库_55

执行后,可以看出执行成功

VB6 批量删除SQLSERVER表索引_SQL_56

查看信息,可以看出顺利生成了T表

VB6 批量删除SQLSERVER表索引_SQL_57

接下来是利用T-SQL语句对表格单行或批量多行导入信息的操作

采用INSERT INTO C VALUES可以进行插入单行数据,如下图

VB6 批量删除SQLSERVER表索引_数据库_58

接下来是批量插入多行数据,需要在表后添加表的列名信息,各行信息用逗号隔开

VB6 批量删除SQLSERVER表索引_数据库表_59

该语句执行后即可批量插入多行信息。

 

 

 

  • 修改与删除数据

先进行交互式修改数据,右击表S,点击编辑前200行

VB6 批量删除SQLSERVER表索引_SQL_60

将王小明的DEPT信息由“计算机”改为“地信”

VB6 批量删除SQLSERVER表索引_数据库_61

刷新后即可看到表内信息发生改动

 

接下来是采用T-SQL语句将教师“刘雪”职称改为副教授

下图可看出教师刘雪修改前的信息

VB6 批量删除SQLSERVER表索引_数据库表_62

运行该T-SQL语句,修改表T信息

VB6 批量删除SQLSERVER表索引_数据库表_63

可以看出职称信息已经成功被修改

VB6 批量删除SQLSERVER表索引_数据库表_64

 

交互式删除表S的某行信息,右击表S,选择编辑前两百行

VB6 批量删除SQLSERVER表索引_数据库表_65

右击张鹏,点击删除

VB6 批量删除SQLSERVER表索引_数据库_66

刷新后,查看表内信息,可以看出张鹏的信息已经成功被删除

VB6 批量删除SQLSERVER表索引_数据库表_67

采用T-SQL语句删除教师表内刘雪老师信息

VB6 批量删除SQLSERVER表索引_数据库_68

刷新后,查看表内信息,可以看出刘雪的信息已经成功被删除

VB6 批量删除SQLSERVER表索引_数据库_69

  • 复制数据

采用T-SQL语句将表S复制到新表TEST1内

VB6 批量删除SQLSERVER表索引_数据库表_70

运行成功后,刷新可以看出该表已存在

VB6 批量删除SQLSERVER表索引_SQL_71

查看该表信息,与原表信息相同

VB6 批量删除SQLSERVER表索引_数据库_72

将T表中性别为‘男’提取教师名称,性别,年龄与职称至新表TEST2中

VB6 批量删除SQLSERVER表索引_SQL_73

展示提取前T表内的为性别为男的信息如下

VB6 批量删除SQLSERVER表索引_数据_74

可以看出将教师刘帅提取复制到新表内,并获得了想要的属性信息

VB6 批量删除SQLSERVER表索引_数据_75

  • 习题练习

习题3题目如下:

VB6 批量删除SQLSERVER表索引_sql_76

选做题目为1,2,4,5,6

首先采用交互式方法将数据导入至SC表内

先在excel中将前五行数据存储为.xls格式

VB6 批量删除SQLSERVER表索引_SQL_77

接下来在数据库WJN中选择导入数据

VB6 批量删除SQLSERVER表索引_数据库_78

VB6 批量删除SQLSERVER表索引_SQL_79

设置目标数据库表为SC表

VB6 批量删除SQLSERVER表索引_sql_80

继续进行下一步

VB6 批量删除SQLSERVER表索引_数据_81

显示执行成功

VB6 批量删除SQLSERVER表索引_sql_82

最后在SQL内查看SC表信息,对照原始数据,信息无误

VB6 批量删除SQLSERVER表索引_SQL_83

接下来是利用T-SQL语句批量插入表后五行数据如下

VB6 批量删除SQLSERVER表索引_SQL_84

最后对表SC进行查看,得到最终的全表信息

VB6 批量删除SQLSERVER表索引_sql_85

用T-SQL语句对S表中计算机系的全体学生岁数增加一岁

VB6 批量删除SQLSERVER表索引_数据库_86

对比结果,左图为增加岁数前,右图为增加岁数后:

VB6 批量删除SQLSERVER表索引_SQL_83

VB6 批量删除SQLSERVER表索引_数据_88

提取数据库表SC中分数小于60分成绩的到新表makeup_s中,T-SQL语句如下图

VB6 批量删除SQLSERVER表索引_数据库表_89

查看生成的makeup_s表,可以看出并未提取出表信息,因为原表中所有成绩均大于60分

VB6 批量删除SQLSERVER表索引_数据库_90

再删除成绩小于20分的代码如下

VB6 批量删除SQLSERVER表索引_数据_91

结果仍为空表

VB6 批量删除SQLSERVER表索引_数据库_92

  • 总结
  1. 数据库表的导入数据过程中,对于高版本的excel, SQL并不能兼容,需要转化为后缀名.xls的格式才能顺利完成数据的导入。
  2. 在完成实验3的过程中,采用T-SQL的INSERT INTO导入数据时,若多次执行导入数据,会导致数据库中出现多行重复数据,但是采用交互式语句并不能直接删除重复数据只保留一个非重复数据,因此需要采用编号分组的方法对多行重复表内数据。

以下进行举例实现该过程:

先利用T-SQL语句内插入与之前数据一样的几行数据,得到多行重复数据表格

VB6 批量删除SQLSERVER表索引_数据库_93

运行完成后,查看SC表,可以看出出现了多行重复数据,因此我们需要进行去除重复的数据,只保留非重复数据

VB6 批量删除SQLSERVER表索引_数据库表_94

新建PD作为区分,按照PD特有标识进行分组举例实现

VB6 批量删除SQLSERVER表索引_sql_95

一.删除完全重复数据:在新建查询内将该数据库表进行编号,再按相同行进行分组,分组完成后对每组不是最小的数进行删除

VB6 批量删除SQLSERVER表索引_数据库表_96

再对原始表进行ID去除

运行之后即得到我们最初始想要的10行的结果

VB6 批量删除SQLSERVER表索引_数据库表_97

二.删除部分重复数据:在新建查询内将该数据库表进行编号,再按相同行进行分组,每个分组中取最小的数生成到新的表中

对SC表中再加入一行重复数据进行举例模拟如下

VB6 批量删除SQLSERVER表索引_数据_98

代码执行如下:

VB6 批量删除SQLSERVER表索引_SQL_99

结果仍然达到要求

VB6 批量删除SQLSERVER表索引_数据_100