《数据操作语句》PPT课件.ppt
《《数据操作语句》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据操作语句》PPT课件.ppt(112页珍藏版)》请在三一办公上搜索。
1、第5章 数据操作语句,5.1 数据查询功能5.2 数据更改功能,5.1 数据查询功能,5.1.1 查询语句的基本结构5.1.2 单表查询5.1.3 多表连接查询5.1.4 使用TOP限制结果集5.1.5 子查询,5.1.1 查询语句基本格式,SELECT-需要哪些列FROM-来自于哪些表WHERE-根据什么条件GROUP BY HAVING ORDER BY,1.查询指定的列,查询表中用户感兴趣的部分属性列。例1:查询全体学生的学号与姓名。SELECT Sno,Sname FROM Student,一、选择表中若干列,5.1.2 单表查询,例2.查询全体学生的姓名、学号、所在系,SELECT
2、Sname,Sno,Sdept FROM Student,2.查询全部列,例3查询全体学生的记录 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student等价于:SELECT*FROM Student,3.查询经过计算的列,例5.查询全体学生的姓名及其出生年份。SELECT Sname,2010-Sage FROM Student,常量列,例5查询全体学生的姓名和出生年份,并在出生年份列前加入一个列,此列的每行数据均为“出生年份”常量值。SELECT Sname,出生年份:,2010-Sage FROM Student,改变列标题,用户还可以通过指定别名来改变
3、查询结果的列标题例:SELECT Sname 姓名,Year of Birth 出生年份,2010-Sage 年份,FROM Student,出生年份,年份,姓名,二、选择表中若干元组,1.消除取值相同的行,例6查询选修了课程的学生的学号,SELECT Sno FROM SC,有重复行!,二、选择表中若干元组,用DISTINCT去掉结果集中的重复行,SELECT DISTINCT Sno FROM SC,2.查询满足条件的元组(使用where子句),(1)比较大小,例7查询计算机系全体学生的姓名。SELECT Sname FROM Student WHERE Sdept=计算机系例8查询年龄在
4、20岁以下的学生的姓名及年龄。SELECT Sname,Sage FROM Student WHERE Sage 20例9查询考试成绩有不及格的学生的学号 SELECT DISTINCT Sno FROM SC WHERE Grade 60,(2)确定范围,用BETWEENAND和NOT BETWEENAND是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后边指定范围的下限,AND后边指定范围的上限。BETWEENAND的格式为:列名|表达式 NOT BETWEEN 下限值 AND 上限值如果列或表达式的值在不在下限值和上限值范围内,则结果为True,表明此记录符合
5、查询条件。,示例,例10查询年龄在2023岁之间的学生的姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23例11查询年龄不在2023之间的学生姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23,关于日期类型查询,例12查询2009年6月份出版的全部图书的详细信息。SELECT*FROM 图书表 WHERE 出版日期 BETWEEN 2009/6/1 AND 2009/6/30,注意:日期类
6、型的常量要用单引号括起来,而且年、月、日之间通常用分隔符隔开,常用的分隔符有“/”和“-”,(3)确定集合,使用IN运算符。用来查找属性值属于指定集合的元组。格式为:列名 NOT IN(常量1,常量2,常量n)当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录;NOT IN:当列中的值与某个常量值相同时,则结果为False,表明此记录为不符合查询条件的记录,示例,例13查询信息系、数学系和计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept IN(信息系,数学系,计算机系)例14查询信息系和计算机系之
7、外的其他系的学生姓名、性别和所在系。SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN(信息系,计算机系),(4)字符串匹配,使用LIKE运算符一般形式为:列名 NOT LIKE 匹配串中可包含如下四种通配符:_:匹配任意一个字符;%:匹配0个或多个字符;:匹配 中的任意一个字符;对于连续字母的匹配,例如匹配abcd,可简写为a-d,:不匹配 中的任意一个字符。,示例,例15.查询姓张的学生的详细信息。SELECT*FROM Student WHERE Sname LIKE 张%例16查询学生表中姓张、李和刘的学生的情况。SELECT*FROM
8、Student WHERE Sname LIKE 张李刘%例17查询名字中第2个字为小或大的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _小大%,示例(续),例18查询所有不姓“王”也不姓“张”的学生姓名SELECT Sname FROM Student WHERE Sname NOT LIKE 王张%或者:SELECT Sname FROM Student WHERE Sname LIKE 王张%或者:SELECT Sname FROM Student WHERE Sname NOT LIKE 王%AND Sname NOT
9、 LIKE 张%,示例(续),例19查询姓“王”且名字是2个字的学生姓名。SELECT Sname FROM Student WHERE Sname LIKE 王_,示例(续),例20查询姓王且名字是3个字的学生姓名SELECT Sname FROM Student WHERE Sname LIKE 王_ _,注意:尾随空格的处理。SELECT Sname FROM Student WHERE rtrim(Sname)LIKE 王_,例21.在Student表中查询学号的最后一位不是2、3、5的学生信息。SELECT*FROM Student WHERE Sno LIKE%235,转义字符,如
10、果要查找的字符串正好含有通配符,比如下划线或百分号,就需要使用一个特殊子句来告诉数据库管理系统这里的下划线或百分号是一个普通的字符,而不是一个通配符,这个特殊的子句就是ESCAPE。ESCAPE的语法格式为:ESCAPE 转义字符“转义字符”是任何一个有效的字符。在匹配串中包含转义字符,表明位于该字符后面的字符是普通字符,而不是通配符。,示例,例如,查找field1字段中包含字符串“30%”的记录:WHERE field1 LIKE%30!%ESCAPE!查找field1字段中包含下划线(_)的记录:WHERE field1 LIKE%!_%ESCAPE!,(5)涉及空值的查询,空值(NULL
11、)在数据库中表示不确定的值。例如,学生选修课程后还没有考试时,这些学生有选课记录,但没有考试成绩,因此考试成绩为空值。判断某个值是否为NULL值,不能使用普通的比较运算符。判断取值为空的语句格式为:列名 IS NULL判断取值不为空的语句格式为:列名 IS NOT NULL,示例,例22查询没有考试成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL例23查询所有有考试成绩的学生的学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL,(6)多重条件查询,在WHERE子句中可以使
12、用逻辑运算符AND和OR来组成多条件查询。用AND连接的条件表示必须全部满足所有的条件的结果才为True;用OR连接的条件表示只要满足其中一个条件结果即为True。例24查询计算机系年龄在20岁以下的学生姓名。SELECT Sname FROM Student WHERE Sdept=计算机系 AND Sage 20,示例(续),例25查询计算机系和信息系年龄大于等于20岁的学生姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE(Sdept=计算机系 OR Sdept=信息系)AND Sage=20或:SELECT Sname,Sdept,
13、Sage FROM Student WHERE Sdept IN(计算机系,信息系)AND Sage=20,可对查询结果进行排序。排序子句为:ORDER BY ASC|DESC,说明:按进行升序(ASC)或降序(DESC)排序。,3.对查询结果进行排序,示例,例26将学生按年龄的升序排序。SELECT*FROM Student ORDER BY Sage例27查询选修了c02号课程的学生的学号及其成绩,查询结果按成绩降序排列。SELECT Sno,Grade FROM SCWHERE Cno=c02 ORDER BY Grade DESC 例28.查询全体学生的信息,查询结果按所在系的系名升序
14、排列,同一系的学生按年龄降序排列。SELECT*FROM StudentORDER BY Sdept,Sage DESC,SQL提供的聚合函数有:COUNT(*):统计表中元组个数;COUNT(DISTINCT):统计本列列值个数;SUM(DISTINCT):计算列值总和;AVG(DISTINCT):计算列值平均值;MAX(DISTINCT):求列值最大值;MIN(DISTINCT):求列值最小值。上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。,4.使用聚合函数汇总数据,示例,例29统计学生总人数。SELECT COUNT(*)FROM Student 例30统计选修了
15、课程的学生的人数。SELECT COUNT(DISTINCT Sno)FROM SC例31统计9512101号学生的考试总成绩之和。SELECT SUM(Grade)FROM SC WHERE Sno=9512101,示例(续),例32计算C01号课程学生的考试平均成绩。SELECT AVG(Grade)FROM SC WHERE Cno=C01例33查询C01号课程的考试最高分和最低分。SELECT MAX(Grade),MIN(Grade)FROM SC WHERE Cno=C01注意:计算函数不能出现在WHERE子句中,示例(续),例34查询“9512101”学生的选课门数、已考试课程门
16、数以及考试最高分、最低分和平均分。SELECT COUNT(*)AS 选课门数,COUNT(Grade)AS 考试门数,MAX(Grade)AS 最高分,MIN(Grade)AS 最低分,AVG(Grade)AS 平均分 FROM SC WHERE Sno=9512101,作用:可以控制计算的级别:对全表还是对一组。目的:细化计算函数的作用对象。分组语句的一般形式:GROUP BY,n HAVING,5.对查询结果进行分组统计,(1)使用GROUP BY,例35统计每门课程的选课人数,列出课程号和人数。SELECT Cno as 课程号,COUNT(Sno)as 选课人数 FROM SC GR
17、OUP BY Cno 对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后再对每一组使用COUNT计算,求得每组的学生人数。,例36查询每个学生的选课门数和平均成绩。SELECT Sno as 学号,COUNT(*)as 选课门数,AVG(Grade)as 平均成绩 FROM SC GROUP BY Sno,注意,GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的结果集列别名。例如,例36中不能将GROU BY子句写成:GROUP BY 学号。带有GROUP BY子句的SELECT语句的查询列表中只能出现分组依据列或聚合函数,因为分组后每个组只返回一行
18、结果。,示例,例37统计每个系的学生人数和平均年龄。SELECT Sdept,COUNT(*)AS 学生人数,AVG(Sage)AS 平均年龄 FROM Student GROUP BY Sdept,示例,例38.带WHERE子句的分组。统计每个系的女生人数。SELECT Sdept,Count(*)女生人数 FROM Student WHERE Ssex=女 GROUP BY Sdept,示例,例39.按多列分组。统计每个系的男生人数和女生人数,以及男生的最大年龄和女生的最大年龄。结果按系名的升序排序。SELECT Sdept,Ssex,Count(*)人数,Max(Sage)最大年龄 FR
19、OM Student GROUP BY Sdept,Ssex ORDER BY Sdept,(2)使用HAVING,HAVING用于对分组自身进行限制,它有点象WHERE子句,但它用于组而不是对单个记录。例37查询修了3门以上课程的学生的学号SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3,示例,例40.查询选修了3门以上课程的学生的学号和选课门数。SELECT Sno,Count(*)选课门数 FROM SC GROUP BY Sno HAVING COUNT(*)3,处理过程:先执行GROUP BY子句对SC表数据按Sno进行分组,然后再用统
20、计函数COUNT分别对每一组进行统计,最后筛选出统计结果满足大于3的组。,处理过程图示,示例,例41查询修课门数等于或大于4的学生的平均成绩和选课门数。SELECT Sno,AVG(Grade)平均成绩,COUNT(*)修课门数 FROM SC GROUP BY Sno HAVING COUNT(*)=4,几个子句比较,WHERE子句用来筛选FROM子句中指定的数据源所产生的行数据。GROUP BY子句用来对经WHERE子句筛选后的结果数据进行分组。HAVING子句用来对分组后的结果数据再进行筛选。,示例,例42.查询计算机系和信息管理系的学生人数。方法1:SELECT Sdept,COUNT
21、(*)FROM Student GROUP BY Sdept HAVING Sdept IN(计算机系,信息管理系)方法2:SELECT sdept,COUNT(*)FROM Student WHERE Sdept IN(计算机系,信息管理系)GROUP BY Sdept第二种写法比第一种写法执行效率高。,示例,例43.查询每个系年龄小于等于20岁的学生人数。SELECT Sdept,COUNT(*)FROM Student WHERE Sage=20 GROUP BY Sdept,5.1.3 多表连接查询,若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的
22、查询连接查询包括内连接、外连接和交叉连接等。,连接基础知识,连接查询中用于连接两个表的条件称为连接条件或连接谓词。一般格式为:,必须语义相同,内连接,SQL-92 内连接语法如下:SELECT FROM 表1 INNER JOIN 表2 ON 连接条件,执行连接操作的过程:首先取表1中的第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中的一个元组。表2全部查找完毕后,再取表1中的第2个元组,然后再从头开始扫描表2,重复这个过程,直到表1中的全部元组都处理完毕为止。,示例,例44查询每个学生及其选课的详细信息。SELECT*F
23、ROM Student INNER JOIN SC ON Student.Sno=SC.Sno,改进例44,SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno,示例,例46.查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。SELECT Sname,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno WHERE Sdept=计算机系,表别名,可以为表提供别名,其格式如下:FROM AS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据操作语句 数据 操作 语句 PPT 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5519590.html