数据表的基本操作

数据表创建完成之后,我们会需要对数据表中的数据进行更新 ,这就需要我们对数据表中的数据进行操作了,这就是我们常说的增,删,改,查,从这篇文章开始,我们来了解关于对数据表的一些基本的操作

**数据更新**
数据表是数据库的重要对象,是存储数据的基本单元,当一个表结构创建完成之后,就涉及到要向表中传输数据的过程,以及对已有数据的修改和删除,这就是数据更新。

数据更新可以通过两种方式来进行实现:第一种 是 通过对象资源管理器

                                                                 第二种 是通过T-SQL语句来进行实现

首先 我们来看一下 插入数据

1.使用对象资源管理器来插入数据

向表中插入数据时,需要注意的问题是:

(1)如果表在表结构的设置中设置为不允许null值,则必须为该列输入值,不能为空

(2)对于表结构中允许Null值的列,可以不输入值,在数据窗口上将显示为Null

  (3)   插入表中的数据要与列的数据类型相互兼容并且符合列的约束条件

关于使用对象资源管理器如何向student表中插入数据,这儿我们不做赘述

这儿我们来重点说一下使用T-SQL语句来插入数据

插入数据使用INSERT语句,INSERT语句的基本语法格式如下所示

INSERT[INTO][(column_list)]

VALUES(DEFAULT | NULL|expression[,…..n])[,….n]

语法说明

(1)INTO关键字是可选项,可以省略,但加上INTO关键字使得语句的意思传达更加明确

(2)tabel_name 是插入数据的表名

(3)column_list是要插入数据的列的列表,当向表中所有列插入数据且数据的输入顺序与表的结构相同时,column_list可以省略

(4)VALUES子句包括所要插入数据的列的值,列值的数量,顺序,数据类型要与column_list中列名的数量,顺序,类型相一致

1.DEFAULT为列插入的默认值

2.NULL 为列插入的空值

3。expression可以是一个变量,常量或者表达式

我们来看一道例题

使用T-SQL语句向Student表中插入一行数据(S201510101,孙鑫,DEFAULT,1996-07-07,519,计算机信息管理,山西,200,NULL)

插入的T-SQL语句为:INSERT INTO Student VALUES(‘S20151001′,’孙鑫’,DEFAULT,1996-07-07,0,519,‘计算机信息管理’,‘山西’,200,NULL)

注意:在上述的T-SQL语句中我们可以看到文字部分的内容一般会使用单引 框柱,但是数字部分一般是不用单引 框柱的

例2.想表中插入两行数据,学 分别为“S201430104”“S201430105”,姓名分别为“李林林”“秦璐”

INSERT INTO Student(Stu_Id,Stu——Name)

VALUES(‘201430104’,’李林林’),(‘S201430105’,’秦璐’)

上述的语法为T-SQL的插入式语法

4.1.2  修改数据

对于资源修改器中如何修改数据的方法,我们在这里不做赘述

我们还是来关注 如何使用T-SQL语句来修改数据

UPDATE

SET column_name=DEFAULT|NULL|expression[,….n][WHERE

]

对于上述程序的说明

table_name 是所要修改的表名

而clumn_name  表示的是要修改的列名

DEFAULT|NULL|expression表的是为列 赋予的新值,值的类型要与列的数据类型相兼容,并且符合列的约束条件

我们还是来看一道例题

例3.使用T-SQL语句将student 表中学 为“S201510101”的学生的性别修改为“男”

具体的代码如下所示

update Student SET Stu_Sex=‘男’where Stu_Id=‘S201510101’//这段代码我们需要解释一下,update 表示的是我们需要修改一个表的内容,而Student 表示的 我们要修改的这个表的名称,修改的位置 我们在代码的最后部位得到了体现 where Stu_Id=”S201510101″ 表示找到了需要修改的位置

然后将这个位置的内容修改为  将这个位置的信息修改为“男”

我们再来看一道题   

例4 将student 表中李小林同学的籍贯修改为“山西”,备注里面写上“三好学生”

UPDATE Student SET Stu_NativePlace=”山西” ,Stu_Remark=‘三好学生’  WHERE Stu_Name=”李小妹”//这儿是将某一个学生的学生信息进行更改,我们一般使用的语法就是,首先对内容的进行更改,就是UPDATE Student Stu_NativePlace=”山西”这一段的作用就是 将学生的信息更改为籍贯“山西”,然后再写上备注,备注的内容为“三好学生” 语法格式为 Stu_Remark=‘三好学生’

最后再说明修改内容的学生为 WHERE Stu_Name=“李小妹”

注意:1.首先我们可以看到修改的内容为山西和修改的备注的内容为三好学生,这两项的语法之间是用逗 隔开的,这是需要注意的

2.我们可以看到无论是修改的籍贯,还是备注对“李小妹”进行查询,我们都可以看到,使用的符 位“”,而当要备注为’三好学生’的情况下,使用的符 为单引 ,关于这点为何这样使用,我们后面再做解释

例5 将Student表中的所有学生的补助增加100元

UPDATE Student SET Stu_Subsidy=Stu_Subsidy+100//这儿的操作似乎更像是一个赋值的操作

我们可以看到,无论是删除还是修改一个表格 它的语法结构都是 UPDATE Student Set 后面加上你要删除或者要修改的内容

下面我们来看一下关于删除的T-SQL语句

和上面相同,对于如何使用资源管理器来进行删除的操作 我们不做赘述

使用T-SQL语句啦删除数据

删除数据可以使用DELETE语句或TRUNCATE TABLE语句

1)DELETE语句

DELETE语句的基本语法格式如下

DELETE[FROM]

[WHERE]

关于上述代码的说明

(1)FROM是关键字选项,可以省略,但是加上FROM的关键字将使得语句的意思表达更加明确

(2)table_name 表示的是要删除数据的表名

(3)WHERE字句指定删除数据的条件,仅对满足search_condition所指定条件的记录进行删除。如果省略WHERE字句,则将删除表中的所有记录,应该慎重使用

我们来再看一道关于删除的例题

使用T-SQL 语句删除 Student 表中“李小林”同学的信息

DELETE FROM Student’WHERE Stu_Name=’李小林’//删除一个同学的信息,首先要做的就是找到这个同学的信息,DELETE FROM这部分是固定的 Student 表示的是要查询的表的名字,然后在这个表中找到李小林同学的信息,关于这个删除代码的格式也是比较重要的,DELETE FROM Student’WHERE Stu_Name=’李小林’,这行代码中单引 的位置也是比较重要的

4.2 数据查询

1.简单查询

简单查询是在一个表中进行数据查询,是实现复杂数据查询的基础。

我们来看一道例题

查询student表中的所有学生的学 ,姓名,性别,出生日期与籍贯

SELECT Stu_Id,Stu_Name,YEAR(GETDATE())-YEAR(Stu_Birthday)

FROM Student//关于查询一个学生的学 ,性别,出生日期和籍贯

例题:查询结果中的3列分别指定想对应的中文别名

SELECT Stu_Id as 学 ,Stu_Name as 姓名

year(GETDATE())-year(stu_birthday)as 年龄

FROM Student

4)消除结果集中的重复行

SELECT DISTINCT Stu_Major FROM student

4-17 查询Student 表中前3行的学生的信息

SELECT TOP 3 * FORM Student//这儿都是比较固定的用法,需要记住即可

4-18查询student表中前50%行的学生的学 ,姓名,性别,专业

SELECT TOP 50 PRESENT Stu_Id,Stu_Name,Stu_Major FROM Student//查询前50%行的学生的学 ,姓名,性别,专业一般使用的语言为 SELECT TOP 50 PRESENT,最后一定要强调,查询的表的名称为什么,比如这行代码,查询的表的名称就为Student

2.带条件的查询

1)比较运算符

比较运算符是WHERE字句中最常用的一种运算符,用于将两个表达式的值进行比较

4-19  查询Student 表中入学成绩大于等于530分的学生姓名,入学成绩,与籍贯

SELECT Stu_Name, Stu_EnterScore,Stu_Nativeplace FROM Student WHERE stu_EnterScore>=530//这行代码的要求就多了一些限制的条件,需要查询的是入学成绩大于等于530分的学生姓名,入学成绩,与籍贯,这就需要在代码的末尾需要强调的就是FROM Student WHERE stu_EnterScore>=530

4-20,查询Student 表中“计算机信息管理”专业以外的其他专业的学生的学 ,姓名与专业

SELECT Stu_Id,Stu_Name,Stu_Major,FROM Student

WHere Stu_Major‘计算机信息管理’//需要注意的是每一个查询的限制条件

例4-21 查询Student表中“计算机信息管理”专业所以女生的信息

SELECT*FROM Student WHERE Stu_Major=‘计算机信息管理’AND Stu_Sex=”女”//此题中出现了两个查询的条件,对于有两个查询条件的情况,我们一般使用AND 将两个查询条件相连接起来

4-22 查询Student表中籍贯为“北京”“上海”的学生的学 ,姓名,入学成绩与籍贯

SELECT Stu_Id,Stu_Name,Stu_EnterScore,Stu_NativePlace FROM Student

WHERE Stu_Nativeplace=’北京’OR Stu_NativePlace=’上海’//此题中的上海和北京就是两个并列的查询条件,对于有两个并列的查询条件的情况,我们一般使用的方法是用OR 将这两个并列的查询条件连接起来

写在这个程序的时候我们突然发现上述的代码都有相似的之处,对于我们要具体查询的内容我们一般是 SELECT +要查询的内容FROM要查询的表      再在后面加上WHERE加上要查询的具体的要求来进行查询

我们来做一道例题  查询Student表中籍贯为“山西” “陕西”的学生的学 ,姓名,入学成绩与籍贯

SELECT Stu_Id,Stu_Name,Stu_EnterScore,Stu_NativePlace FROM Student

WHERE Stu_Nativeplacae=’山西’OR Stu_NativePlace=’陕西’//此题是上面那道题的衍生,解决这类题的语法是相同的

4-23 查询Student表中出生日期值为空的学生信息

SELECT*FROM Student WHERE Stu_Birthday IS NULL//此题中我们第一次发现了一种查询,就是查询某一个表中出生日期为空的学生的信息,对于这种我们出现了一种新的语法,就是将查询的内容为空的情况来进行标记出来,对于标记后为空的情况就是我们需要的内容,这道题里面我们用到了这个SELECT*FROM 而此处的*是我们第一次遇到,这里的*表示的就是查询这个表里面的所有的信息,然后在这所有的信息中找到Stu_Birthday为空的情况

(SELECT 在这次的查询之中加上了* FROM 后面跟着的Student 表示的是查询的表的名称,WHERW 后面跟着的就是出生日期为空的情况)

4-24 查询Student表中1995年出生的学生信息

SELECT*FROM Student WHERE Stu_birthday BETWEEN’1995-01-01’AND Stu_Birthday

(对于上述代码的理解我们可以看到SELECT表示查询,后面加上*FROM 表示要查询的表的的名称为Student  WHERE表示的是出生日期在1995-01-01到1995-12-31之间的人

4-24 查询Student表中1996年出生的学生的信息

SELCER*FROM Student WHERE Stu_birthday  BETWEEN’1996-01-01’AND Stu_Birthday

4-25 查询Student 表中“软件工程”“电子商务”连个专业的学生信息

SELECET*FROM Student WHERE Stu_Major IN(‘软件工程’,‘电子商务’)//此处的SELECT*FROM表示的也是查询这个表中的所有的信息,当这个查找到“软件工程”和“电子商务”这两个专业的学生的时候就会输出

SQL Sever提供了4种通配符,%表示任意多个的字符(上述的我们经常使用的*也是一个通配符,表示的是查询这个表中所有的信息)

查询Student表中所有的姓“赵”的学生的学 ,姓名,性别,专业

SELECT Stu_Id,Stu_Name,Stu_SEX,Stu_Major FROM student

WHERE Stu_Name LIKE‘赵%’//注意此处查询的内容和上面的查询内容,查询的内容都要用单引 框起来,此处用到了通配符%,表示的就是赵后面可能跟着的任何的汉字,什么赵一二呀,什么赵三四呀  等等等,这个的作用就是找出这个表中所有姓赵的人,还是上面的注意事项,对于要查询的内容,必须用‘’来框起来

4-27 查询Student表中学 以“S201430”“S201440”开头的学生的学 姓名,专业,入学成绩

SELECT Stu_Id, Stu_Name,Stu_Major,Stu_EnterScore FROM Student

WHERE Stu_Id LIKE ‘S2014[34]0%’

//这行代码就相对于上一行代码比较有讲的意义了,这行代码中也使用了通配符,因为要查询的是以S201430和S201440开头的学生的姓名,专业,以及入学成绩。那么就需要使用到通配符,WHERE Stu_Id LIKE’S2014[34]0%’//此处的[34]加上后面的0%表示的就是30或者40 这儿就显示出了通配符的强大性了

4-28 查询Student表中“计算机信息管理”专业所有学生的信息,查询结构按照性别升序排列,出生日期按照降序排列

***在这里我们用DESC来表示降序*******

SELECT*FROM Student WHERE Stu_Major=’计算机信息管理’

ORDER BY Stu_Sex,Stu_Birthday DESC(查询出来的第一个结果ORDER BY一下默认为升序排列,而后面的Stu_Birthday 后面跟上DESC 表示的是降序排列

4-29查询Student表中入学成绩最高的3名学生的学 ,姓名,入学成绩,专业

SELECT TOP 3 Stu_Id,Stu_Name,Stu_EnterScore,Stu_Major FROM Student 

ORDER BY Stu_EnterScore DESC//

4-30 查询Student表中学生的总人数

SELECT COUNT(*)AS 人数 FROM Student//这是需要特殊记忆的一个代码的格式

***上述这个查询Student表中的学生的总人数,这个需要特殊记忆,SELECT COUNT(*)AS加上人数然后查询的表的名字为Student

4-31查询Student表中的学生来自于几个省市

SELECT COUNT(DISTINCT Stu_NativePlace)AS 籍贯数目 FROM student

****上述的内容也是需要特殊记忆的****
4-32查询SC_result表中学 为“S201410201”的学生的总分,平均分,最高分,最低分

SELECT SUM(Score)AS总分,AVG(Score)AS平均分,MAX(Score)AS最高分,MIN(Score)AS最低分

FROM SC_result WHERE Stu_Id=”S201410201′

下面我们需要使用到的就是通过group by来实现分组,分组之后就可以对每组数据进行分别统计了

4-33 查询Student表中各专业学生的人数

SELECT Stu_Major,Count(*)AS人数FROM Student GROUP BY Stu_Major//将查询出的数据进行分组

对于上述的代码的理解

上述代码首先选出了学生的专业,然后对学生的专业进行了分组

4-34查询SC_result表中每个学生的平均分

SELECT Stu_Id,AVG(score)AS平均分 FROM SC_result GROUP BY Stu_Id//将查询出的数据进行分组

4-35 查询SC_result表中平均分高于85分的学生的学 ,平均分

SELECT Stu_Id,AVG(Score) AS平均分FROMSC_result GROUP BY Stu_Id HAVING AVG(score)>85//查询出平均分高于85的学生的学 ,然后进行分组

对于上述操作指令的理解   首先我们找到这个平均分,然后将这个平均分进行分组

集合并运算

4-38 查询选修了“c1021””c1031”课程的学生学

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1021″

UNION

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1031″

集合并运算可将多个SELECT语句的结果集进行合并,并去除重复的记录,形成新的结构集

4-39 查询了既选修了“c1021”课程,又选修了“c1031”课程的学生学

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1021″

INTERSECT

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1031″

4-40 查询选修了“C1021”课程,但没有选修“C1031”课程的学生学

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1021″

EXCEPT

SELECT Stu_Id FROM SC_result WHERE Cour_Id=”C1031″

集合差运算是将属于运算符左侧结果集,但不属于运算符右侧结果集的记录组成一个新的结果集

 

 

 

 

 

 

 

 

 

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年4月9日
下一篇 2019年4月9日

相关推荐