第4章数据操作ppt课件.ppt
《第4章数据操作ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章数据操作ppt课件.ppt(92页珍藏版)》请在三一办公上搜索。
1、第4章 数据操作,4.1 数据查询功能4.2 数据更改功能4.3 视图,4.1 数据查询功能,4.1.1 查询语句的基本结构4.1.2 简单查询4.1.3 多表连接查询4.1.4 使用TOP限制结果集4.1.5 子查询,查询语句基本格式,SELECT-需要哪些列 FROM-来自于哪些表 WHERE-根据什么条件 GROUP BY HAVING ORDER BY,1.选择表中若干列,查询表中用户感兴趣的部分属性列。例1:查询全体学生的学号与姓名。SELECT Sno,Sname FROM Student例2:查询全体学生的姓名、学号和所在系。SELECT Sname,Sno,Sdept FROM
2、 Student,查询全部列,例3查询全体学生的记录 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student等价于:SELECT*FROM Student,查询经过计算的列,例4查询全体学生的姓名及其出生年份。SELECT Sname,2009-Sage FROM Student例5含字符串常量的列:查询全体学生的姓名和出生年份,并在出生年份列前加一列,此列的每行数据均为“出生年份”常量值。SELECT Sname,出生年份,2009-Sage FROM Student,消除取值相同的记录,例6在修课表中查询有哪些学生修了课程,要求列出学生的学号。SELEC
3、T Sno FROM SC结果中有重复的行。用DISTINCT关键字可以去掉结果中的重复行。DISTINCT关键字放在SELECT词的后边、目标列名序列的前边。SELECT DISTINCT Sno FROM SC,2.查询满足条件的元组,比较大小,例7查询计算机系全体学生的姓名。SELECT Sname FROM Student WHERE Sdept=计算机系例8查询年龄在20岁以下的学生的姓名及年龄。SELECT Sname,Sage FROM Student WHERE Sage 20例9查询考试成绩有不及格的学生的学号 SELECT DISTINCT Sno FROM SC WHER
4、E Grade 60,确定范围,用BETWEENAND和NOT BETWEENAND是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后边指定范围的下限,AND后边指定范围的上限。BETWEENAND的格式为:列名|表达式 NOT BETWEEN 下限值 AND 上限值如果列或表达式的值在(或不在)下限值和上限值范围内,则结果为True,表明此记录符合查询条件。BETWEENAND包括边界值。,示例,例10查询年龄在2023岁之间的学生的姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN
5、20 AND 23等价于:SELECT Sname,Sdept,Sage FROM Student WHERE Sage=20 AND Sage=23,示例,例11查询年龄不在2023之间的学生姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23等价于:SELECT Sname,Sdept,Sage FROM Student WHERE Sage 23,示例,例12 对于日期类型的数据也可以使用基于范围的查找。查询1991年6月出版的图书信息:SELECT title_id,type,pr
6、ice,pubdate FROM titles WHERE pubdate BETWEEN 1991/6/1 AND 1991/6/30,确定集合,用来查找属性值属于指定集合的元组。格式为:列名 NOT IN(常量1,常量2,常量n)IN:当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录。NOT IN:当列中的值与某个常量值相等时,结果为False,表明此记录为不符合查询条件的记录。,示例,例13 查询信息管理系、通信工程系和计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept IN(信息管理系,电
7、子商务系,计算机系)等价于:SELECT Sname,Ssex FROM Student WHERE Sdept=信息管理系 OR Sdept=电子商务系 OR Sdept=计算机系,示例(续),例14 查询既不是信息管理系、通信工程系,也不是计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN(信息管理系,电子商务系,计算机系)等价于:SELECT Sname,Ssex FROM Student WHERE Sdept!=信息管理系 AND Sdept!=电子商务系 AND Sdept!=计算机系,字符匹配,一般形式为:
8、列名 NOT LIKE 匹配串中可包含如下四种通配符:_:匹配任意一个字符;%:匹配0个或多个字符;:匹配 中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表达);:不匹配 中的任意一个字符。,示例,例15查询学生表中姓张的学生的详细信息。SELECT*FROM Student WHERE Sname LIKE 张%例16查询学生表中姓张、姓李和姓刘的学生的情况。SELECT*FROM Student WHERE Sname LIKE 张李刘%,示例(续),例17 查询Student表中名字的第2个字为“小”或“大”的学生的姓名和学号。SELECT Sname,Sno FROM
9、Student WHERE Sname LIKE _小大%,示例(续),例18 查询Student表中所有不姓“刘”的学生。SELECT Sname FROM Student WHERE Sname NOT LIKE 刘%例19 从Student表中查询学号的最后一位不是2、3、5的学生信息。SELECT*FROM Student WHERE Sno LIKE%235,涉及空值的查询,空值(NULL)在数据库中表示不确定的值。例如,学生选修课程后还没有考试时,这些学生有选课记录,但没有考试成绩,因此考试成绩为空值。判断某个值是否为NULL值,不能使用普通的比较运算符。判断取值为空的语句格式为:
10、列名 IS NULL判断取值不为空的语句格式为:列名 IS NOT NULL,示例,例20 查询还没有考试的学生的学号和相应的课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL查询结果如图4-20所示。例21 查询所有已经考试了的学生的学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL,多重条件查询,在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询。使用AND谓词的语法格式如下:布尔表达式1 AND布尔表达式2 AND AND 布尔表达式n只有当全部的布尔表达式均为真时,整个表达式
11、的结果才为真,只要有一个布尔表达式的结果为假,则整个表达式结果即为假。,多重条件查询(续),使用OR谓词的语法格式如下。布尔表达式1 OR布尔表达式2 OR OR 布尔表达式n表示只要其中一个布尔表达式为真,则整个表达式的结果即为真;只有当全部布尔表达式的结果均为假时,整个表达式结果才为假。,示例,例22 查询计算机系年龄在20岁以下的学生姓名SELECT Sname FROM Student WHERE Sdept=计算机系 AND Sage 20,示例(续),例23 查询计算机系和信息管理系学生中年龄在1820的学生的学号、姓名、所在系和年龄。SELECT Sno,Sname,Sdept,
12、Sage FROM Student WHERE(Sdept=计算机系 OR Sdept=信息管理系)AND Sage between 18 and 20也可写为:SELECT Sno,Sname,Sdept,Sage FROM Student WHERE Sdept in(计算机系,信息管理系)AND Sage between 18 and 20,3.对查询结果集进行排序,可对查询结果进行排序。排序子句为:ORDER BY ASC|DESC,说明:按进行升序(ASC)或降序(DESC)排序。,示例,例24 将学生按年龄的升序排序。SELECT*FROM Student ORDER BY Sag
13、e例25 查询选修了“C002”号课程的学生的学号及其成绩,查询结果按成绩降序排列。SELECT Sno,Grade FROM SC WHERE Cno=C002 ORDER BY Grade DESC,示例(续),例26 查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。SELECT*FROM Student ORDER BY Sdept,Sage DESC,4.使用统计函数汇总数据,SQL提供的统计函数有:COUNT(*):统计表中元组个数;COUNT(DISTINCT):统计本列列值个数;SUM():计算列值总和;AVG():计算列值平均值;MAX():求列
14、值最大值;MIN():求列值最小值。上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。,示例,例27 统计学生总人数。SELECT COUNT(*)FROM Student 例28 统计选修了课程的学生的人数。SELECT COUNT(DISTINCT Sno)FROM SC例29计算学号为“0611101”的学生的考试总成绩之和。SELECT SUM(Grade)FROM SC WHERE Sno=0611101,示例(续),例30 计算“C001”课程的学生的考试平均成绩。图4-25 例31查询结果SELECT AVG(Grade)FROM SC WHERE Cno=C
15、001例31 查询选修了“C001”号课程的学生的最高分和最低分。SELECT MAX(Grade)最高分,MIN(Grade)最低分 FROM SC WHERE Cno=C001,注意,统计函数不能出现在WHERE子句中。例如,查询年龄最大的学生的姓名,如下写法是错误的:SELECT Sname FROM Student WHERE Sage=MAX(Sage),5.对查询结果进行分组计算,作用:可以控制计算的级别:对全表还是对一组。目的:细化计算函数的作用对象。分组语句的一般形式:GROUP BY HAVING,使用GROUP BY示例,例32 统计每门课程的选课人数,列出课程号和人数。S
16、ELECT Cno as 课程号,COUNT(Sno)as 选课人数 FROM SC GROUP BY Cno该语句首先对查询结果按Cno的值分组,所有具有相同Cno值的元组归为一组,然后再对每一组使用COUNT函数进行计算,求得每组的学生人数。,示例(续),例33 查询每名学生的选课门数和平均成绩。SELECT Sno 学号,COUNT(*)选课门数,AVG(Grade)平均成绩 FROM SC GROUP BY Sno,注意,GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的结果集列的别名。带有GROUP BY 子句的SELECT语句的查询列表中只能出现分组依据
17、列或统计函数,因为分组后每个组只返回一行结果。,示例(续),例34 统计每个系的学生人数和平均年龄。SELECT Sdept,COUNT(*)AS 学生人数,AVG(Sage)AS 平均年龄 FROM Student GROUP BY Sdept,示例(续),例35 带WHERE子句的分组,统计每个系的女生人数。SELECT Sdept,Count(*)女生人数 FROM Student WHERE Ssex=女 GROUP BY Sdept,示例(续),例36 按多列分组。统计每个系的男生人数和女生人数以及男生的最大年龄和女生的最大年龄。结果按系名升序排序SELECT Sdept,Ssex,
18、Count(*)人数,Max(Sage)最大年龄 FROM Student GROUP BY Sdept,Ssex ORDER BY Sdept,使用HAVING,HAVING子句用于对分组后的结果再进行过滤,它的功能有点像WHERE子句,但它用于组而不是单个记录。在HAVING子句中可以使用统计函数,但在WHERE子句中则不能。HAVING通常与GROUP BY子句一起使用。,示例,例37 查询选修3门以上课程的学生的学号和选课门数。SELECT Sno,count(*)选课门数 FROM SC GROUP BY Sno HAVING COUNT(*)3,示例(续),例38 查询选课门数大于
19、等于4门的学生的平均成绩和选课门数。SELECT Sno,AVG(Grade)平均成绩,COUNT(*)选课门数 FROM SC GROUP BY Sno HAVING COUNT(*)=4,说明,WHERE子句用来筛选FROM子句中指定的数据源所产生的行数据。GROUP BY子句用来对经WHERE子句筛选后的结果数据进行分组。HAVING子句用来对分组后的结果数据再进行筛选。,说明(续),对于可以在分组操作之前应用的搜索条件,在WHERE子句中指定它们更有效,这样可以减少参与分组的数据行。应当在HAVING子句中指定的搜索条件应该是那些必须在执行分组操作之后应用的搜索条件。建议将所有行搜索条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 操作 ppt 课件
链接地址:https://www.31ppt.com/p-2104726.html