浅学SQL Sever之数据库操纵(3)数据的操作第一部分
作者:互联网
这部分我主要开始讲的是在数据表建立后如何对数据进行操作的部分,如果中间有什么不足的地方请大家能够提出来,我好进行改进。
首先我们先建立一个数据表,代码如下所示:
create table student(
no char(8) primary key,
name char(8) not null,
sex char(2) check(sex = '男'or sex = '女'),
birthday smalldatetime check(birthday >= '1995-1-1' and birthday< = '2003-1-1'),
speciality varchar(50) default '软件工程',
avgrade numeric(4,1) check(avgrade >= 0 and avgrade <= 100),
dept varchar(50) default '工学院'
);
我们根据所建成的数据表来进行操作。
一、数据的插入
数据的插入可以有两种方法进行录入:第一种就是根据SQL 软件提供的模块功能进行数据的录入,在这里就不进行过多的介绍,如图所示根据数据库的可视化软件,找到相应的表格右击选择编辑前200行就可以进行数据的录入
现在开始介绍第二种数据的录入,第二种则是主要利用代码功能进行数据的录入。
语法格式为:
INSERT 表名 (所要填写的字段名)VALUES (与字段相匹配的值)
这个就相当于一个固定的语法结构其中 insert values 是不可以改变的,表名则是你所要录入数据所在的表名,而这里的字段名则是你要录入的字段名。比如:
insert student(no,name,sex,birthday) values('19503001','张三','男','1999-4-1');
insert student (no,name,sex) values('19503002','李三','男');
select * from student;
根据以上代码运行的结构如下:
从上面我们可以看出来我们所录入的数据与前面的字段值是一样的,至于专业软件工程和学院工学院则是根据我们建立数据库的时候所设置的约束形成的。但是有一点我们要特别的注意就是我们设置为主键的字段和非空的字段,我们一定要进行数据的录入,不然就会出现错误。比如我们的代码如下:
insert student (name,sex) values('李三','男');
那么他就会提示这样的错误:
所以我们在数据插入的时候一定要先看清楚建立表格时的完整性约束以插入数据失败。
如果我们在进行插入数据的时候不填写字段名,那么values后所跟的值一定要与数据表所拥有的字段名一定要匹配如果不匹配就会报错。比如:
insert student values('19503003','王三','男');
结果如下:
所以我们在利用代码插入数据的时候一定要提前看表的字段名与约束条件。争取的输入代码是这样的:
insert student values('19503003','王三','男','1999-3-25','电子信息工程','78','工学院');
insert student values('19503004','王大牛','男','1999-4-25','网络工程','88','工学院');
select * from student;
结构如下图所示:
二、选择字段进行查询
顾名思义我们在查询的过程当中有时候不需要对所有字段进行查询而是只要对其中的某一些字段进行查询。语法格式如下:
select 字段名1 as 自己想让他表现出来的名字,字段名2 as 自己想让他表现出来的名字 … …
from 所要查的表名;
对于上述格式我们可以这样理解,其中select from 是不能更改的固定组合,而as又是可写可不写的情况;至于我们是否要对字段名取别名则是根据情况而定。代码如下:
select no as 学号,name as 姓名 from student;
结果如下:
但是上述代码我们也可以更换为:
select no 学号,name 姓名 from student;
这样的结果也是一样的。
但是我们如果不想对字段名进行重新命名的话我们也可以这样写代码:
select no ,name from student;
不过结果就如下图所示:
从中我们可以看出来虽然内容是一样的但是所显示出来的字段名是不一样的。
三、构造计算字段进行查询
构造计算字段是根据表格现有的字段进行计算显示,比如我们建立的表格里面没有年龄这一字段只有出生日期这一字段,我们则可以根据计算来得出结构,构造计算字段的语法格式为:
select 字段名1 显示的字段名,所要计算的字段的公式 显示的字段名
from 所要操作的表名;
比如:
select * from student;
select no 学号, name 姓名, year(getdate())-year(birthday) 年龄 from student;
结果如下:
通过上面的语句我们可以形成一个对比,在上诉的语法当中year()与getdate()都是一个公式,year()是将年取出来计算,而getdate()则是获取本地的时间包括年月日之类的时间。
我们也可以自己设定公式,比如我们的分数总分加5分那么我们的语法可以为:
select * from student;
select no 学号, name 姓名,avgrade=avgrade+5 from student;
结果如下:
从这里我们可以看出我们如果没有对字段进行显示命名它就会显示原来的字段名,比如avgrade字段我们就没有对它进行重新的命名。在这字段当中如果它原来就是空,那么这个构造计算字段的公式就对它不起作用。
四、增加说明列
增加说明列只是在查询的过程当中增加一个说明的列。语法格式为:
select 字段名1,‘说明的内容:’,被说明列的字段名
from 操作的表名;
比如我们现在对成绩列进行说明,说明内容为:成绩是:那么我们的代码可以这样写:
select no,'成绩为:',avgrade from student;
结果如下:
这就是增加说明列的方法。
五、替换查询结果中的数据
这个就要利用到选择的放来进行查询,其语法格式为:
select 字段名1,字段名2,要进行选择替换的字段名=
case
when 表达式1 then 表达式2
when 表达式3 then 表达式4
end,字段名4
from 查询的表名
对于这一语法可以这么理解在 select from 当中增加一个case when then end 的一个固定结构。 when 表达式1 then 表达式2 这个语句中的表达式1是条件,而表达式2则是满足表达式1后显示的结果。
比如我们把成绩大于等于70分小于80分的结果显示为良好,大于等于80分的结果显示为优秀,成绩是空的为没有成绩。我们代码如下:
select no 学号,name 姓名, 成绩=
case
when avgrade>=70 and avgrade <80 then '良好'
when avgrade>=80 then '优秀'
when avgrade is null then '没有成绩'
end ,dept 学院
from student;
也可以这么写
select no 学号,name 姓名, 成绩=
case
when avgrade>=70 and avgrade <80 then '良好'
when avgrade>=80 then '优秀'
else '没有成绩'
end ,dept 学院
from student;
这两种代码最后的结果都是如下:
六、如何删除数据
删除表数据一般用:delete和truncate两种方法
delete的语法格式如下:
delete from <表名> [where条件]
truncate的语法格式如下:
truncate table <表名>
delete和truncate也是有区别的,我们现在就来讲讲他们的区别:
1、delete可以删除表中的一条或多条数据,也可以删除全部数据;而truncate只能将表中的全部数据删除。
2、delete删除表数据后,标识字段不能复用。也就是说如果你把id=10(假如id是标识字段)的那行数据删除了,你也不可能再插入一条数据让id=10.
3、truncate删除表数据后,标识重新恢复初始状态。默认为初始值为1,也就是说,truncate之后,再插入一条数据,id=1
例如我们删除掉学号为19503001的数据,代码如下:
delete from student
where no='19503001';
select * from student;
结果如下:
如果是用truncate来删除数据的话
truncate table student;
select * from student;
结果则是如下所示:
对于这部分我们一定要记得在数据的查询过程当中无论怎样都不会改变表中原来的数据。在本部分讲的内容当中就删除数据和插入数据这部分会改变表的数据,其他的都不会改变表的数据,它改变的只是我们所显示的内容哪怕是构造计算字段或者增加说明字段,其最根本的字段还是没有改变的,所以我们要分清查询数据和修改数据的区别。
以上就是这一部分的数据操作的内容,其他的会在后续的文章中在继续整理和分享。如果出现错误的地方欢迎大家提出来。谢谢大家的观看!!!
标签:Sever,no,浅学,select,student,SQL,avgrade,数据,字段名 来源: https://blog.csdn.net/wbl9904/article/details/115706564