数据库技术与应用单元5 查询和更新数据.ppt
《数据库技术与应用单元5 查询和更新数据.ppt》由会员分享,可在线阅读,更多相关《数据库技术与应用单元5 查询和更新数据.ppt(94页珍藏版)》请在三一办公上搜索。
1、单元5 查询和更新数据,引言,数据库、表创建好后,接下来的工作是对数据进行操作,包括查询数据、插入数据、修改数据和删除数据等。数据操作是数据库工程师和数据库相关岗位人员日常工作中必做的也是最频繁的工作。,【学习任务】,任务1 单表查询任务2 数据汇总统计任务3 多表连接查询任务4 数据更新任务5 使用图形工具进行数据操作,【学习目标】,理解SELECT语句的语法格式;能根据实际需求对单表或多表进行数据查询,熟练编写SELECT语句;能对数据进行汇总计算、分组统计;能熟练使用SQL语句对数据进行更新;能使用图形工具进行数据操作。,任务1,任务1 单表查询,【任务提出】,数据库中最常见的操作是数据
2、查询,可以说数据查询是数据库的核心操作。查询可以对单表进行查询,也可以完成复杂的连接查询和嵌套查询,其中对单表进行查询是数据查询操作中最简单的,所以我们先从单表查询入手学习数据查询操作。,【任务分析】,实现数据查询操作必须使用SQL语言中的SELECT语句。所以先学习和理解SELECT语句,然后针对实际需求对表进行查询。,【相关知识与技能】,1单表查询的SELECT语句SELECT ALL|DISTINCT 目标列表达式 FROM 表名 WHERE 行条件表达式 ORDER BY 排序列 ASC|DESC,【相关知识与技能】,2SELECT语句的含义根据WHERE子句的行条件表达式,从FROM
3、子句指定的表中找出满足条件的行(记录),再按SELECT子句中的列名或表达式选出记录中的字段值形成查询结果。如果有ORDER BY子句,则查询结果还要按照排序列的值进行升序或降序排列。,【任务实施】,1选择表中的若干列(1)查询部分列格式:SELECT 列名,n FROM 表名【例1】查询所有学生的学号和姓名。SELECT Sno,Sname FROM Student【练习1】查询所有课程的课程编号、课程名称和课程学分。,【任务实施】,(2)查询全部列格式:SELECT*FROM 表名【例2】查询全体学生的详细信息。SELECT*FROM Student【练习2】查询所有班级的详细信息。,【任
4、务实施】,(3)为查询结果集内的列指定别名格式1:SELECT 原列名 AS 列别名,n FROM 表名格式2:SELECT 原列名 列别名,n FROM 表名格式3:SELECT 列别名=原列名,n FROM 表名【例3】查询所有学生的学号和姓名,并指定别名为学生学号、学生姓名。SELECT Sno 学生学号,Sname 学生姓名 FROM Student【练习3】查询所有班级的详细信息,并给查询结果各列指定中文意义的别名。,【任务实施】,(4)查询经过计算的列格式:SELECT 计算表达式或列名 FROM 表名【例4】查询所有学生的学号、姓名和出生年份。SELECT Sno,Sname,Y
5、EAR(Birth)出生年份 FROM Student【练习4】查询所有学生的学号、姓名和年龄。,【任务实施】,2选择表中的若干行(1)查询满足条件的记录格式:SELECT 目标列表达式 FROM 表名 WHERE 行条件表达式,【任务实施】,1)比较大小【例5】查询所有女生的学号和姓名。SELECT Sno,Sname FROM Student WHERE Sex=女【练习5】查询课程学时超过50学时的课程号和课程名称。【练习6】查询所有在1992年5月10日后(包含1992年5月10日)出生的学生的详细信息。【练习7】查询年龄小于20岁的学生的学号、姓名和出生年月。查询结果应如图5-12所
6、示。,【任务实施】,2)确定范围列名或计算表达式 NOT BETWEEN 下限值 AND 上限值【例6】查询平时成绩在90100之间(包含90和100)的学号和课程编号。SELECT Sno,Cno FROM Score WHERE Uscore BETWEEN 90 AND 100【练习8】查询出生年月在1991年1月1日至1991年5月30日之间的学生的学号和姓名。,【任务实施】,3)确定集合列名或表达式 NOT IN(常量1,常量2,常量n)【例7】查询课程学时为30或60的课程的课程编号和课程名称。SELECT*FROM Course WHERE ClassHour IN(30,60)
7、【练习9】查询所属专业为计算机应用技术、软件技术的班级的班级编号、班级名称及入学年份。,【任务实施】,4)字符匹配列名 NOT LIKE【例8】查询所有姓陈的学生的学号和姓名。SELECT Sno,Sname FROM Student WHERE Sname LIKE 陈%【练习10】查询所有姓陈且名为单个字的学生的学号和姓名。【练习11】查询所有课程名称中含有数据库的课程的课程编号、课程名称。【练习12】查询学生姓名中姓张、林、江的学生的学号和姓名。,【任务实施】,5)涉及空值列名 IS NOT NULL【例9】查询期末成绩现为空的学生的学号和课程编号。SELECT Sno,Cno FROM
8、 Score WHERE EndScore IS NULL,【任务实施】,(2)消除取值重复的行SELECT DISTINCT 目标列表达式 FROM 表名【例10】查询期末成绩有不及格的学生的学号。SELECT DISTINCT Sno FROM Score WHERE EndScore60【练习13】查询所有有选课记录的学生的学号。,【任务实施】,(3)限制返回行数SELECT TOP 指定的行数 PERCENT 目标列表达式 FROM 表名【例11】查询返回学生表中的最前面2条记录作为样本数据显示。SELECT TOP 2*FROM Student,【任务实施】,3对查询结果排序ORDE
9、R BY 排序列名 ASC|DESC【例12】查询所有学生的详细信息,查询结果按照出生年月降序排列。SELECT*FROM Student ORDER BY Birth DESC,【任务实施】,【练习14】查询选修了课程编号为0901170的课程的学生的学号及其平时成绩,查询结果按照平时成绩升序排列。【练习15】查询所有学生的详细信息,查询结果按照班级编号升序排列,对同一个班的学生按照学号升序排列。【练习16】查询所有学生中年龄最大的那位学生的学号和姓名。,【任务实施】,4多重条件查询【例13】查询班级编号为200901001的班中所有男生的详细信息,查询结果按照学号升序排列。SELECT*F
10、ROM Student WHERE ClassNo=200901001 AND SEX=男 ORDER BY Sno ASC【练习17】查询课程的平时成绩或期末成绩超过90分的学生的学号和课程编号,查询结果按照学号升序排列,学号相同的按照课程编号降序排列。【练习18】查询出年龄超过20岁女生的详细信息。,【任务总结】,行条件表达式中的归纳注意点如下:表达式中的字符型常量必须用单引号括起来,但字段名不能用单引号括起来;日期时间型常量须用单引号括起来。如1992年5月10日可使用以下任一格式表示:1992-05-10、1992/05/10、05/10/1992、19920510。范围运算符BETW
11、EENAND的语法格式为:列名 BETWEEN 下限值 AND 上限值;,【任务总结】,列表运算符IN的语法格式为:列名 IN(常量1,常量2,常量n);模式匹配符LIKE的语法格式为:列名 LIKE;空值判断符IS NULL的语法格式为:列名 IS NULL,不要写成:列名=NULL;如果有多个条件,须使用AND或OR连接。切记出现如下表达式90=Uscore=100。,【拓展练习】,1从Dorm表中查询所有宿舍的详细信息。2从Live表中查询学号为200931010100101学生的住宿信息,包含宿舍编号DormNo、床位号BedNo和入住日期InDate。3从Dorm表中查询所有男生宿舍
12、(宿舍类别DormType为男)的详细信息,结果按照楼栋Build升序排列,楼栋相同的按照宿舍编号DormNo升序排列。4从Live表中查询在2010年9月份入住宿舍的学生的学号Sno、宿舍编号DormNo和床位号BedNo。,【拓展练习】,5从CheckHealth表中查询宿舍编号DormNo为LCB04N101宿舍在2010年10月份的卫生检查情况,结果包含检查时间CheckDate、检查人员CheckMan、成绩Score和存在问题Problem。6从CheckHealth表中查询在2010年10月1日至2010年11月30日之间宿舍卫生检查成绩Score在7080分(包含70、80分)
13、之间的宿舍编号DormNo、检查时间CheckDate和存在问题Problem。7从Dorm表中查询在龙川南苑的宿舍详细信息。(在龙川南苑指楼栋Build包含龙川南苑)。,【拓展练习】,8从Dorm表中查询宿舍电话Tel目前为空的宿舍的宿舍编号DormNo、楼栋Build、楼层Storey和房间号RoomNo。9从Student表中查询所有学生的学号Sno、姓名Sname和年龄,查询结果按照年龄降序排列。10从CheckHealth表中查询2010年10月卫生检查成绩Score最高的宿舍编号DormNo和检查时间CheckDate。,任务2,任务2 数据汇总统计,【任务提出】,在对表数据进行查
14、询中,经常会对数据进行统计计算,如统计个数、平均值、最大最小值、计算总和等操作。另外,还会根据需要对数据进行分开统计汇总,如统计各个班级的人数等操作。,【任务分析】,SQL提供了许多集函数对数据进行各种统计计算。若需要对数据进行分组统计计算,GROUP BY子句就能够实现这种分组统计。,【相关知识与技能】,1集函数,【相关知识与技能】,2分组统计GROUP BY 分组列名3对组筛选HAVING 组筛选条件表达式区分HAVING子句和WHERE子句:HAVING子句是对GROUP BY分组后的组进行筛选,选择出满足条件的组;而WHERE子句是对表中记录进行选择,选择出满足条件的行。HAVING子
15、句中可以使用集函数,一般HAVING子句中的组筛选条件就是集函数。而WHERE子句中绝对不能出现集函数。,【任务实施】,1使用集函数汇总数据【例1】统计Student表中学生的记录数。SELECT COUNT(*)学生记录数 FROM Student【例2】统计出信息工程学院的专业个数。SELECT COUNT(DISTINCT Specialty)信息工程学院专业个数 FROM Class WHERE College=信息工程学院,【任务实施】,【练习1】查询学号为200931010100101学生的所有选修课程的平时成绩的总分和平均分。【练习2】查询课程编号为2003003课程的学生期末成
16、绩的最高分和最低分。,【任务实施】,2进行分组统计【例3】统计各班级学生人数。SELECT ClassNo,COUNT(Sno)班级人数 FROM Student GROUP BY ClassNo【练习3】统计各门课程的选课人数。【练习4】统计各门课程学生的平时成绩平均分、期末成绩平均分。,【任务实施】,3对组进行筛选【例4】查询出课程选课人数超过2人的课程编号。SELECT Cno FROM Score GROUP BY Cno HAVING COUNT(Sno)2【练习5】查询出所有选修课程的平均期末成绩小于50分的学生学号。,【任务总结】,若要对数据库表中数据进行统计计算,可使用集函数。
17、若要对数据进行分组统计计算,使用GROUP BY子句。若在表中数据分组后还要对这些组按条件进行筛选,输出满足条件的组,则使用HAVING子句。SELECT ALL|DISTINCT 目标列表达式 FROM 表名 WHERE 行条件表达式 GROUP BY 分组列名 HAVING 组筛选条件表达式 ORDER BY 排序列 ASC|DESC,【拓展练习】,1从Dorm表中查询所有男宿舍的总床位数。男宿舍指宿舍类别DormType值为男。2从CheckHealth表中查询宿舍编号为LCB04N101宿舍的被检查人员检查的次数。3从CheckHealth表中查询2010年11月份各宿舍的检查成绩的平
18、均值。4从Student表中查询目前男生的人数。5从Student表中查询目前男女生的人数。,【拓展练习】,6从Dorm表中查询出各楼栋的房间数。7从Live表中统计各个宿舍的现入住人数。8从CheckHealth表中统计各宿舍到目前为止的卫生检查的平均成绩。9从CheckHealth表中查询出到目前为止的卫生检查平均成绩超过90分的宿舍编号。10从CheckHealth表中查询宿舍被检查次数超过3次的宿舍编号。,任务3,任务3 多表连接查询,【任务提出】,前面任务1中完成的查询只涉及到一张表。而在实际使用中,查询往往是针对多个表进行的,可能涉及二张或更多张表。例:查询某个班级所有学生数据库原
19、理与技术课程的成绩。,【任务分析】,在关系型数据库中,将这种涉及到两个或两个以上表的查询,称为多表连接查询。连接查询是关系数据库中最重要的查询。连接查询根据返回的连接记录情况,分为“交叉连接”、“内连接”和“外连接”查询。,【相关知识与技能】,1交叉连接交叉连接是将连接的表的所有行进行组合。如两张表进行交叉连接,就是将第一张表的所有记录分别与第二张表的每条记录形成一条新的记录,连接后的结果集中的记录数为两个表的记录数的乘积。其语法格式是:SELECT 目标列表达式 FROM 表名1 CROSS JOIN 表名2【例1】交叉连接Student和Score表。SELECT*FROM Student
20、 CROSS JOIN Score从查询结果中可以看出,交叉连接后的结果集中的记录数为两个表的记录数的乘积。而结果中的记录其实并没有意义。所以交叉连接在实际应用中一般是没有意义的,所以使用较少。,【相关知识与技能】,2内连接内连接查询是返回多个表中满足连接条件的记录。根据连接条件中运算符的不同,分为等值连接查询和非等值连接查询。其中等值连接是实际应用中最常见的。等值连接条件通常采用“主键列=外键列”的形式。其一般格式为:FROM 表名1,表名2 WHERE FROM 表名1 INNER JOIN 表名2 ON【例2】连接Student和Score表,返回两张表中满足Sno相同的记录。SELEC
21、T*FROM Student JOIN Score ON Student.Sno=Score.Sno,【相关知识与技能】,【例3】查询所有学生的详细信息及其选课信息,查询结果包含两张表中的所有列,但去除重复列。SELECT Student.*,Cno,UScore,EndScoreFROM Student JOIN Score ON Student.Sno=Score.Sno例3中的查询,按照两个表中的相同字段进行等值连接,且目标列中去掉了重复的属性列,但保留了所有不重复的属性列,将这类等值连接称为自然连接。,【相关知识与技能】,在内连接查询中,只有满足连接条件的记录才能作为结果输出,但有时用
22、户也希望输出那些不满足连接条件的记录信息.如在上述例3的Student表和Score表的连接,在图5-21的查询结果中没有关于200931010100208学生的信息,原因在于他没有选课,在Score表中没有相应的记录。但是有时我们想以Student表为主体列出每个学生的详细信息及其课程成绩信息,若某个学生没有选课,则只输出他的详细信息,他的课程成绩信息为空值即可。这就需要使用外连接。外连接查询是除返回内部连接的记录以外,还在查询结果中返回左表或右表或左右表中不符合条件的记录。根据连接时保留表中记录的侧重不同分为“左外连接”、“右外连接”和“全外连接”。,【相关知识与技能】,(1)左外连接左外
23、连接是将左表中的所有记录分别与右表中的每条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回左表中不符合条件的记录,并在右表的相应列中填上NULL。左外连接的一般格式为:FROM 表名1 LEFT OUTER JOIN 表名2 ON【例4】查询所有学生的详细信息及其选课信息,如果学生没有选课,也显示其详细信息。SELECT Student.*,Cno,UScore,EndScoreFROM Student LEFT JOIN Score ON Student.Sno=Score.Sno,【相关知识与技能】,(2)右外连接和左外连接类似,右外连接将左表中的所有记录分别与右表中的每
24、条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回右表中不符合条件的记录,并在左表的相应列中填上NULL。右外连接的一般格式为:FROM 表名1 RIGHT OUTER JOIN 表名2 ON 可将上述例4的左外连接修改为右外连接来实现。SELECT Student.*,Cno,UScore,EndScoreFROM Score RIGHT JOIN Student ON Student.Sno=Score.Sno,【相关知识与技能】,(3)全外连接全外连接将左表中的所有记录分别与右表中的每条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回左右两个表中不符合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库技术与应用单元5 查询和更新数据 数据库技术 应用 单元 查询 更新 数据
链接地址:https://www.31ppt.com/p-2973610.html