数据库的增删改查_第1页
数据库的增删改查_第2页
数据库的增删改查_第3页
数据库的增删改查_第4页
数据库的增删改查_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库的增删改查第一页,共三十七页,2022年,8月28日第二章数据库的增删改查第二页,共三十七页,2022年,8月28日回顾数据类型分哪两种类型装箱和拆箱的关系简单类型以及其字节数与范围变量命名规则声明变量方法第三页,共三十七页,2022年,8月28日课程目标使用insert语句向表中插入数据使用update语句更新表中数据使用delete语句删除表中数据使用select语句进行查询第四页,共三十七页,2022年,8月28日示例数据库:学生--课程数据库学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname)学生选课表:SC(Sno,Cno,Grade)

第五页,共三十七页,2022年,8月28日2.1添加数据使用insert语句添加数据的一般格式:insert[into]<表名>[列名]values<值列表>省略列名--指定值的顺序必须与表中的列顺序一致

只有部分列包含值insertinto员工信息表(姓名,性别,职务)values(‘张三','男','经理')insertinto员工信息表values(‘张三','经理','男')insertinto员工信息表(姓名,职务)values(‘李四',null)第六页,共三十七页,2022年,8月28日使用selectinto语句复制表的结构和数据select*into普通职员表from员工信息表where职务='职员'selectinto和insertinto都可以添加多行数据,两者的区别insertinto语句中用于添加数据的目标表要求已经存在selectinto语句会创建新表,要求不存在同名的表第七页,共三十七页,2022年,8月28日2.2更新数据update语句:可更新表中单行,行组或所有行的数据一般格式为:update表名set列名1=新值1,列名2=新值2…where条件

update员工信息表 set职务='职员' where姓名=‘张三’

update图书信息 set库存数量=库存数据+20 where出版社编号=1第八页,共三十七页,2022年,8月28日2.3删除数据使用delete语句删除行 delete[from]表名where条件deletefrom教师信息表where职务isnull注意:如果delete语句没有where条件,则删除表中所有行,但保留表的结构delete新职员表使用truncatetable删除表中所有行truncatetable新职员表用truncate和delete都可以删除表的所有行,两者的区别truncate语句不写日志,执行速度比delete语句快,但不可回滚第九页,共三十七页,2022年,8月28日数据查询是数据库中最常见的操作。SQL语言提供SELECT语句,通过查询操作可得到所需的信息。

SELECT语句的一般格式为:

2.4查询数据SELECT<列名>FROM<表名>[WHERE<查询条件表达式>][GROUPBY<分组的列名>[HAVING<条件表达式>]][ORDERBY<排序的列名>[ASC或DESC]]第十页,共三十七页,2022年,8月28日

SELECT语句的执行过程是:根据WHERE子句的检索条件,从FROM子句指定的基本表或视图中选取满足条件的元组,再按照SELECT子句中指定的列,投影得到结果表。如果有GROUP子句,则将查询结果按照<列名1>相同的值进行分组。如果GROUP子句后有HAVING短语,则只输出满足HAVING条件的元组。如果有ORDER子句,查询结果还要按照<列名2>的值进行排序。第十一页,共三十七页,2022年,8月28日[例3-23]查询全体学生的学号、姓名和年龄。SELECTSNo,SN,AgeFROMS[例3-24]查询学生的全部信息。SELECT*FROMS[例3-25]查询选修了课程的学生号。SELECTDISTINCTSNoFROMSC[例3-26]查询全体学生的姓名、学号和年龄。SELECTSNName,SNo,AgeFROMSSELECTSNASName,SNo,Age第十二页,共三十七页,2022年,8月28日2.4.2条件查询运算符含义=,>,<,>=,<=,!=,<>比较大小AND,OR,NOT多重条件BETWEENAND确定范围IN确定集合LIKE字符匹配ISNULL空值第十三页,共三十七页,2022年,8月28日比较大小

例2.5查询选修课程号为‘C1‘的学生的学号和成绩SELECTSNO,SCOREFROMSCWHERECNO=‘C1’

例2.6查询成绩高于85分的学生的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERESCORE>85

第十四页,共三十七页,2022年,8月28日2.4.2.2多重条件查询当WHERE子句需要指定一个以上的查询条件时,则需要使用逻辑运算符AND、OR和NOT将其连结成复合的逻辑表达式。其优先级由高到低为:NOT、AND、OR,用户可以使用括号改变优先级。例2.7查询选修C1或C2且分数大于等于85分学生的的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERE(CNO=’C1’ORCNO=’C2’ANDSCORE>=85))

第十五页,共三十七页,2022年,8月28日2.4.2.3确定范围例2.8查询工资在1000至1500间的教师的教师号姓名及职称SELECTTNO,TN,PROFFROMTWHERESALBETWEEN1000AND1500等价于

SELECTTNO,TN,PROFFROMTWHERESAL>1000ANDSAL<1500

例3.9查询工资不在1000至1500之间的教师的教师号、姓名及职称。SELECTTNO,TN,PROFFROMTWHERESALNOTBETWEEN1000AND1500第十六页,共三十七页,2022年,8月28日2.4.2.4确定集合利用“IN”操作可以查询属性值属于指定集合的元组。例3.10查询选修C1或C2的学生的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN(‘C1’,‘C2’)此语句也可以使用逻辑运算符“OR”实现。SELECTSNO,CNO,SCOREFROMSCWHERECNO=‘C1’ORCNO=‘C2’利用“NOTIN”可以查询指定集合外的元组。

第十七页,共三十七页,2022年,8月28日例2.11查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩。SELECTSNO,CNO,SCOREFROMSCWHERECNONOTIN(‘C1’,‘C2’)等价于:SELECTSNO,CNO,SCOREFROMSCWHERECNO!=‘C1’ANDCNO!=‘C2’

最后一行也可以写成:WHERE(CNO<>‘C1’)AND(CNO<>‘C2’)第十八页,共三十七页,2022年,8月28日2.4.2.5部分匹配查询

上例均属于完全匹配查询,当不知道完全精确的値时,用户还可以使用LIKE或NOTLIKE进行部分匹配查询(也称模糊查询)。

LIKE定义的一般格式为:

<属性名>LIKE<字符串常量>

属性名必须为字符型,字符串常量的字符可以包含如下两个特殊符号:通配符功能实例%代表0个或多个字符‘ab%’,’ab’后可连接任意字符串_下划线代表一个字符‘a_b’,’a’与‘b’间可以有一个字符[]表示在某一范围内的字符[0-9],0~9之间的字符[^]表示不在某一范围内的字符[^0-9],不在0~9之间的字符第十九页,共三十七页,2022年,8月28日

%:表示任意知长度的字符串;_:表示任意单个字符。例3.12查询所有姓张的教师的教师号和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘张%’例3.13查询姓名中第二个汉字是“力”的教师号和姓名。SELECTTNO,TNFROMTWHERETNLIKE‘_力%’第二十页,共三十七页,2022年,8月28日2.4.2.6空值查询

某个字段没有值称之为具有空值(NULL)。通常没有为一个列输入值时,该列的值就是空值。空值不同于零和空格,它不占任何存储空间。例如,某些学生选课后没有参加考试,有选课记录,但没有考试成绩,考试成绩为空值,这与参加考试,成绩为零分的不同。例3.14查询没有考试成绩的学生的学号和相应的课程号。SELECTSNO,CNOFROMSCWHERESCOREISNULL注意:这里的空值条件为ISNULL,不能写成SCORE=NULL。

第二十一页,共三十七页,2022年,8月28日2.4.3

常用库函数及统计汇总查询SQL提供了许多库函数增强了基本检索能力。常用的库函数,如表3.2所示:

函数名称功能AVG按列计算平均值SUM按列计算值的总和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值同济个数例3.15求学号为S1学生的总分和平均分。SELECTSUM(SCORE)ASTotalScore,AVG(SCORE)ASAveScoreFROMSCWHERE(SNO='S1')注意:函数SUM和AVG只能对数值型字段进行计算。第二十二页,共三十七页,2022年,8月28日例2.16求选修C1号课程的最高分、最低分及之间相差的分数SELECTMAX(SCORE)ASMaxScore,MIN(SCORE)ASMinScore,MAX(SCORE)-MIN(SCORE)ASDiffFROMSCWHERE(CNO='C1')例3.17求计算机系学生的总数SELECTCOUNT(*)FROMSWHEREDEPT='计算机'例3.18求学校中共有多少个系SELECTCOUNT(DISTINCTDEPT)ASDeptNumFROMS注意:加入关键字DISTINCT后表示消去重复行,可计算字段“DEPT“不同值的数目。COUNT函数对空值不计算,但对零进行计算。第二十三页,共三十七页,2022年,8月28日例2.19统计有成绩同学的人数SELECTCOUNT(DISTINCTSNO)FROMSCWHERESCOREISNOTNULL上例中成绩为零的同学计算在内,没有成绩(即为空值)的不计算。例2.20利用特殊函数COUNT(*)求计算机系学生的总数SELECTCOUNT(*)FROMSWHEREDEPT=‘计算机’COUNT(*)用来统计元组的个数,不消除重复行,不允许使用DISTINCT关键字。第二十四页,共三十七页,2022年,8月28日

2.4.4分组查询GROUPBY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。例3.21查询各位教师的教师号及其任课的门数。SELECTTNO,COUNT(*)ASC_NUMFROMTCGROUPBYTNOGROUPBY子句按TNO的值分组,所有具有相同TNO的元组为一组,对每一组使用函数COUNT进行计算,统计出各位教师任课的门数。若在分组后还要按照一定的条件进行筛选,则需使用HAVIN子句。第二十五页,共三十七页,2022年,8月28日例2.22查询选修两门以上课程的学生学号和选课门数SELECTSNO,COUNT(*)ASSC_NUMFROMSCGROUPBYSNOHAVINGCOUNT(*)>=2GROUPBY子句按SNO的值分组,所有具有相同SNO的元组为一组,对每一组使用函数COUNT进行计算,统计出每位学生选课的门数。HAVING子句去掉不满足COUNT(*)>=2的组。当在一个SQL查询中同时使用WHERE子句,GROUPBY子句和HAVING子句时,其顺序是WHERE-GROUPBY-HAVING。WHERE与HAVING子句的根本区别在于作用对象不同:WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,选择满足条件的组,必须用于GROUPBY子句之后,但GROUPBY子句可没有HAVING子句。

第二十六页,共三十七页,2022年,8月28日2.4.5查询的排序当需要对查询结果排序时,应该使用ORDERBY子句ORDERBY子句必须出现在其他子句之后。排序方式可以指定,DESC为降序,ASC为升序,缺省时为升序例3.23查询选修C1的学生学号和成绩,并按成绩降序排列。SELECTSNO,SCOREFROMSCWHERECNO='C1'ORDERBYSCOREDESC例3.24查询选修C2、C3、C4或C5课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。SELECTSNO,CNO,SCOREFROMSCWHERECNOIN('C2','C3','C4','C5')ORDERBYSNO,SCOREDESC第二十七页,共三十七页,2022年,8月28日例2.25求选课在三门以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。SELECTSNO,SUM(SCORE)ASTotalScoreFROMSCWHERESCORE>=60GROUPBYSNOHAVINGCOUNT(*)>=3ORDERBYSUM(SCORE)DESC

此语句为分组排序,执行过程如下:1.(FROM)取出整个SC2.(WHERE)筛选SCORE>=60的元组3.(GROUPBY)将选出的元组按SNO分组4.(HAVING)筛选选课三门以上的分组5.(SELECT)以剩下的组中提取学号和总成绩6.(ORDERBY)将选取结果排序

第二十八页,共三十七页,2022年,8月28日练习查询年龄不在20-23岁之间的学生姓名、系别和年龄。SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;书店来了一位新员工杜康,职务为部门主管,如何向员工信息表(员工编号,姓名,职务)中添加他的信息?杜康从部门主管升为部门经理,如何更新他的信息?杜康离职了,如何删除他的信息?第二十九页,共三十七页,2022年,8月28日在一个SQL语句中,groupby、where、having这三部分正确使用次序是什么?selectinto和insertinto者可以添加多行数据,两者的区别是什么?用truncate和delete都可以删除表的所有行,两者的区别是什么?where和having的作用都是筛选数据,它们的区别是什么?第三十页,共三十七页,2022年,8月28日小结第三十一页,共三十七页,2022年,8月28日第三十二页,共三十七页,2022年,8月28日3.3变量3.3.1变量及其作用域

1.变量命名规则在C#2005中,变量命名规则如下:1)变量名的第首字符必须是字母、汉字或下划线。2)变量名中不能包含空格、小数点以及各种符号。3)组成变量名的字符数不要太长,应控制在3~30个字符。4)变量名不能是关键字。如:int,object等不能用作变量名。5)变量名在同一范围内必须是唯一的。第三十三页,共三十七页,2022年,8月28日3.3变量与常量3.3.1变量及其作用域

2.为变量命名时的注意事项

在为变量命名时注意以下几点:1)变量名应该能够标识事物的特性,如用于存放姓名的字符串变量可使用strName命名。2)变量名应使用英文单词,而不能为汉语拼音。3)变量名尽量不使用缩写,除非它是众所周知的。4)若在变量名中使用了多个单词,则应大写每个单词的第一个字母,其它字母小写。例如:IsSuperUser。5)变量名应使用说明数据类型的前缀缩写,如str、i等。6)变量名中的单词尽量使用名词。如有动词要尽量放在后面。第三十四页,共三十七页,2022年,8月28日3.3变量与常量3.3.1变量及其作用域

2.为变量命名时的注意事项变量有两种典型的命名方法:骆驼表示法和匈牙利表示法。骆驼表示法以小写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论