《物联网云计算系列培训教材数据库设计.ppt》由会员分享,可在线阅读,更多相关《物联网云计算系列培训教材数据库设计.ppt(37页珍藏版)》请在三一办公上搜索。
1、第五章,联接查询和分组查询,如下的T-SQL语句含义是什么?Temp表中A列为商品名称,请说出查询以大写字母开头的所有商品名称的T-SQL语句聚合函数COUNT()和SUM()各代表什么意思?,回顾和作业点评,SELECT Telephone FROM stuWHERE Telephone NOT LIKE 6%,SELECT A FROM TempWHERE A LIKE A-Z%,预习检查,分组查询主要解决什么问题?多表联接主要解决什么问题?用在什么场合?,统计学生考试信息 从多个数据表中取得学生考试成绩单,本章任务,使用GROUP BY进行分组查询掌握多表联接查询,本章目标,需求1,每年
2、级的学生人数各是多少?,分组查询原理,第一学期人数,第二学期人数,第三学期人数,三组,分组查询用法,SELECT FROM WHERE GROUP BY,分组查询语句,SELECT COUNT(*)AS 人数,SGrade AS 年级FROM Students GROUP BY SGrade,SELECT CourseID,AVG(Score)AS 课程平均成绩FROM ScoreGROUP BY CourseID,分组查询解析2-1,对分组后的每个组内的记录进行一个聚集,通常用到聚合函数,查询每门课程的平均分,按照什么进行分组?,分组查询解析2-2,SELECT CourseID,AVG(S
3、core)AS 课程平均成绩FROM ScoreGROUP BY CourseIDORDER BY AVG(Score),查询每门课程的平均分,并且按照分数由低到高的顺序排列显示,SELECT StudentID,CourseID,AVG(Score)AS 课程平均成绩FROM ScoreGROUP BY CourseID,思考,分组查询所查询的列1、分组列2、聚合函数计算出的列,分析以下的SQL,结果会怎样?,练习 使用分组查询学生相关信息,需求说明查询每个年级的总学时数,并按照升序排列查询每个参加考试的学员的平均分查询每门课程的平均分,并按照降序排列查询每个学生参加的所有考试的总分,并按照
4、降序排列,完成时间:15分钟,共性问题集中讲解,常见调试问题及解决办法代码规范问题,共性问题集中讲解,需求2,统计每学期男女同学的人数,该怎么办?,对学生进行分组计算每组学生的总人数,多列分组2-1,年级分组,性别分组,多列分组2-2,SELECT COUNT(*)AS 人数,SGrade AS 年级,SSex AS 性别 FROM StudentS GROUP BY SGrade,SSex ORDER BY SGrade,ORDER BY 子句在这里的作用?,需求3,如何获得总人数超过15人的年级?,分组筛选,SELECT FROM WHERE GROUP BY HAVING,SELECT
5、COUNT(*)AS 人数,SGrade AS 年级FROM Students GROUP BY SGradeHAVING COUNT(*)15,分组筛选语句,WHERE子句:用来筛选 FROM 子句中指定的操作所产生的行 GROUP BY子句:用来分组 WHERE 子句的输出 HAVING子句:用来从分组的结果中筛选行,WHERE与HAVING对比,SELECT 部门编号,COUNT(*)FROM 员工信息表WHERE 工资=2000GROUP BY 部门编号HAVING COUNT(*)1,思考,查询有多个员工的工资不低于2000 的部门编号,分析以下的T-SQL,其作用是什么?,指导限定
6、条件的分组查询2-1,训练要点GROUP BY子句HAVING子句聚合函数需求说明查询学生相关信息查询考试相关信息,讲解需求说明,指导限定条件的分组查询2-2,难点分析计算学生的年龄 至少一次不及格的信息,floor(months_between(sysdate,borndate)/12)floor(to_number(sysdate-borndate)/365),WHERE StudentResult60GROUP BY StudentNo,完成时间:25分钟,小结,如果查询语句将得到以下的查询结果,那么以下的查询语句将输出哪些信息?,SELECT*FROM A,SELECT A1,B1,M
7、AX(C1)FROM A,需求4,如何同时从这两个表中取得数据?,内联接(INNER JOIN)外联接左外联接(LEFT JOIN)右外联接(RIGHT JOIN),常用的多表联接查询,内联接3-1,Students,Score,查询结果,内联接使用比较运算符根据每个表的通用列中的值匹配两个表中的行,内联接3-2,SELECT FROM 表1INNER JOIN 表2ON,SELECT FROM 表1,表2WHERE,SELECT S.SName,C.CourseID,C.Score FROM Score AS CINNER JOIN Students AS SON C.StudentID=S
8、.SCode,SELECT Students.SName,Score.CourseID,Score.ScoreFROM Students,ScoreWHERE Students.SCode=Score.StudentID,等价,内联接语句,内联接3-3,SELECT S.SName,C.CourseID,C.Score FROM Students AS SINNER JOIN Score AS CON C.StudentID S.SCode,SELECT S.SName,C.CourseID,C.Score FROM Students AS SINNER JOIN Score AS CON C
9、.StudentID=S.SCode,15行,下面的查询语句返回的查询结果是一样的吗?,根据前面表中数据,下面的查询语句将会返回多少行记录?,SELECT Students.SName,Score.CourseID,Score.ScoreFROM Students,ScoreWHERE Students.SCode=Score.StudentID,两个语句的执行结果相同,指导两表内联接查询信息2-1,训练要点两表内联接查询INNER JOINON的使用 WHERE的使用需求说明查询学生相关信息查询考试相关信息,讲解需求说明,指导两表内联接查询信息2-2,难点分析查询年级编号为1的年级名称、科目
10、名称及学时,SELECT FROM Subject AS J INNER JOIN Grade AS G ON J.GradeId=G.GradeIdWHERE G.GradeId=1,完成时间:20分钟,SELECT S.SName AS 姓名,CS.CourseName AS 课程,C.Score AS 成绩FROM Students AS S INNER JOIN Score AS C ON(S.SCode=C.StudentID)INNER JOIN Course AS CS ON(CS.CourseID=C.CourseID),三表内联接,使用WHERE语句如何实现?,练习三表内联接
11、查询信息,需求说明查询学生学号、姓名、考试科目名称及成绩查询参加“走进Java编程世界”考试的学生姓名、成绩、考试日期,完成时间:10分钟,左外联接,Students,Score,查询结果,SELECT S.SName,C.CourseID,C.Score FROM Score AS CLEFT JOIN Students AS SON C.StudentID=S.SCode,不一样,主表和从表位置已互换,SELECT S.SName,C.CourseID,C.Score FROM Students AS SLEFT JOIN Score AS CON C.StudentID=S.SCode,
12、主表(左表)Students中的数据逐条匹配从表Score中的数据1、匹配,返回到结果集2、无匹配,NULL值返回到结果集,猜一猜:这样写,返回的查询结果是一样的吗?,SELECT 图书编号,图书名称,出版社名称FROM 图书表RIGHT OUTER JOIN 出版社表 ON 图书表.出版社编号=出版社表.出版社编号,右外联接,也许很久没出版书籍了,右外联接的原理与左外联接相同右表逐条去匹配记录;否则NULL填充,练习使用外联接查询信息,需求说明查询所有科目的参考信息 查询从未考试的科目信息查询所有年级对应的学生信息,完成时间:15分钟,在一个SQL语句中,GROUP BY、WHERE、HAVING这三部分正确使用次序是什么?将以下的SQL语句改写成内联接查询的语句如下T-SQL语句返回结果是什么?,SELECT Students.SName,Score.CourseID,Score.Score FROM Students,Score WHERE Students.SCode=Score.StudentID,总结,SELECT*FROM Item AS a LEFT JOIN OrderDetails AS b ON a.Icode=b.ItemCode,