14.3数据查询SQL语言中最重要、最核心的操作就是数据查询。关系代数的运算在关系数据库中主要由SQL数据查询来体现。2▲SELECT语句完整的句法:其基本格式为:SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING组条件表达式]][ORDERBY列名2[ASC|DESC]];33.使用聚组函数聚组函数:聚组函数返回值是根据一组输入得到的,输入个数只有在执行完查询并且所有行都取出时才确定。聚组函数分类:函数描述AVG返回一列的平均值(该列必须是数字型的值)COUNT返回非NULL值的行数,*表示返回所有行数MAX返回一列的最大值MIN返回一列的最小值SUM返回一列的和(该列必须是数字型的值)4下面我们以学生选课系统为例说明SELECT语句的各种用法。学生表:Student(Sno,Sname,Sex,Age,Dept)5课程表:Course(Cno,Cname,Tname,Cpno,Credit)6选课表:SC(Sno,Cno,Grade)7例:查询学生表中的总人数selectcount(*)fromstudent;例:查询选修了课程的学生总人数selectcount(distinctsno)fromsc;8例:查询选修c3课程的平均成绩、最高成绩和最低成绩selectavg(grade),max(grade),min(grade)fromscwherecno='c3';例:查询学号为05880101学生选修课程的成绩总和selectsum(grade)fromscwheresno='05880101';94.对查询结果分组分组问题的引出:(1)查询选课信息表中的课程号及其选修该课程的学生学号。selectcno,snofromsc;10(2)查询选课信息表中选修了c1课程的学生人数。11(3)查询选课表中每门课程的课程号及这门课程的选修人数12(4)查询至少5个人选修了的课程号以及相应的选课人数。13例:查询选修3门及其以上课程的学生学号SELECTSnoFROMSCGROUPBYSnoHAVINGCOUNT(Cno)=3;14HAVING子句与WHERE子句的区别是:①WHERE子句的作用是在分组之前过滤数据。WHERE条件中不能包含聚组函数。使用WHERE条件选择满足条件的行。②HAVING子句的作用是在分组之后过滤数据。HAVING条件中经常包含聚组函数。使用HAVING条件选择满足条件的组。使用HAVING子句时必须首先使用GROUPBY进行分组。15练习:查询每个学生的学号和平均成绩;selectsno,avg(grade)fromscgroupbysno;为评选一等奖学金,需查询平均成绩70的学生的学号及其平均成绩。selectsno,avg(grade)fromscgroupbysnohavingavg(grade)80;165.对查询结果进行排序ORDERBY子句可指定按照一个或多个属性列的升序(ASC)或者降序(DESC)重新排列查询结果。省略不写,默认为升序排列。17例:查询选修c3课程的学生学号及成绩,查询结果按照成绩的降序排列SELECTSno,GradeFROMSCWHERECno='c3';ORDERBYGradeDESC;18例:查询所有学生的基本信息,查询结果按学生年龄的升序排列,年龄相同时则按学号降序排列SELECT*FROMStudentORDERBYAgeASC,SnoDESC;19查询男生的人数大于50人的系别名称以及男生人数,要求结果按照系别名称进行升序排列.Selectdept,count(sno)FromstudentWheresex='男'GroupbydeptHavingcount(sno)50Orderbydeptasc;20连接查询是指通过两个或两个以上的关系表或视图的连接操作来实现的查询。连接查询是关系数据库中最主要的查询,包括等值连接、非等值连接、自然连接、自身连接、外连接和复合条件连接等。4.3.3连接查询21连接基础知识连接查询中用于连接两个表的条件称为连接条件或连接谓词。一般格式为:[表名1.][列名1]比较运算符[表名2.][列名2]必须是可比的22SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;1.等值连接当连接运算符为“=”时,称为等值连接。使用其他运算符时,称为非等值连接。例:查询每个同学基本信息及其选修课程的情况。23SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;24如果是按照两个表中的相同属性进行等值连接,并且在结果中去掉了重复的属性列,我们称之为自然连接。例:用自然连接来完成查询每个同学基本信息及其选修课程的情况。2.自然连接SELECTStudent.Sno,Sname,Sex,Age,Dept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno;25Selectstudent.*,sc.*fromstudent,scwherestudent.sno=sc.sno;Selectstudent.sno,sname,sex,age,dept,cno,gradefromstudent,scwherestudent.sno=sc.sno;改成自然连接等值连接去掉重复属性2627连接条件用于多个表之间的连接,限制条件用于限制所选取的记录要满足什么条件,这种连接称为复合条件连接。3.复合条件连接28例:查询选修课程号为c1,并且成绩不及格的学生学号、姓名和系别名称SELECTStudent.Sno,Sname,DeptFROMStudent,SCWHEREStudent.Sno=SC.Sno/*连接条件*/andCno='c1'/*限制条件*/andGrade60;/*限制条件*/29例:查询计算机系选修maths课程的学生姓名、授课教师名以及这门课程的成绩SELECTSname,Tname,GradeFROMStudent,Course,SCWHEREStudent.Sno=SC.Sno/*连接条件*/andCourse.Cno=SC.Cno/*连接条件*/andDept='计算机系'/*限制条件*/andCname='maths';/*限制条件*/★多个表之间连接,WHERE子句中有多个连接条件。n个表之间的连接至少由n-1个连接条件。30selectx.snofromscx,scywherex.sno=y.snoandx.cno='c1'andy.cno='c2';例:在SC表中查询至少选修课程号为c1和c2的学生学号4.自身连接315.外连接例:查询每个学生及其选修课程的情况(若某一个学生没有选课,只输出学生的基本情况信息,其选课信息为空值。)SELECTStudent.Sno,Sname,Sex,age,dept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno(+);外连接的操作符是(+)。(+)号放在连接条件中信息不完全的那一边(即没有匹配行的那一边)。外连接运算符(+)出现在连接条件的右边,称为右外连接;外连接运算符(+)出现在连接条件的左边,称为左外连接。3233下课了。。。休息一会儿。。。