文档详情

数据库基础与实践技术:第6章 数据操作语言.ppt

发布:2025-04-12约4.86千字共49页下载文档
文本预览下载声明

单表查询示例1.查询黄老师和郭老师的授课信息。2.在Student表中查询学号的最后一位不是2、3、5的学生信息。3.查询选修DB_design课程的学生学号和姓名4.统计选修“JAVA”课程的人数。5.查询每个班的男女生人数。6.1.3多表连接查询一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的查询,主要包括:内连接。外连接:左外连接、右外连接、全外连接。*/1301.内连接示例【例2】统计每个系的学生的考试平均成绩。SELECTDept,AVG(grade)asAverageGradeFROMstudentSJOINSCONS.Sno=SC.SnoGROUPBYDept*/130多表连接查询进行分组2.自连接是特殊的内连接。相互连接的表物理上为同一张表。必须为两个表取别名,使之在逻辑上成为两个表。FROM表1AST1--在内存中生成“T1”JOIN表1AST2--在内存中生成“T2”*/130自连接示例【例3】查询至少被两个学生选的课程的课程号。SELECTDISTINCTa.CnoFROMSCaJOINSCbONa.Cno=b.CnoANDa.Sno!=b.Sno或者:SELECTCnoFROMSCGROUPBYCnoHAVINGCOUNT(*)1*/1303.外连接外连接会返回FROM子句中提到的至少一个表的所有行,只要这些行符合任何WHERE或HAVING搜索条件。左外连接FROM表1LEFT[OUTER]JOIN表2ON连接条件右外连接FROM表1RIGHT[OUTER]JOIN表2ON连接条件全外连接FROM表1FULL[OUTER]JOIN表2ON连接条件*/130内连接与外连接示意图A与B的左外连接结果:A+CA与B的右外连接结果:B+CA与B的内连接结果:C*/130示例【例4】查询没人选的课程的课程名。SELECTCnameFROMCourseCLEFTJOINSCONC.Cno=SC.CnoWHERESC.CnoISNULL或SelectCnamefromCoursewhereCnonotin(SelectCnofromSC)*/130示例【例5】查询计算机系没有选课的学生,列出学生姓名和性别。SELECTSname,SgenderFROMStudentSJOINSCONS.Sno=SC.SnoWHEREDept=计算机系ANDSC.SnoISNULLLEFT示例【例6】统计计算机系每个学生的选课门数,包括没有选课的学生。SELECTS.SnoAS学号,COUNT(SC.Cno)AS选课门数FROMStudentSJOINSCONS.Sno=SC.SnoWHEREDept=计算机系GROUPBYS.Sno*/130LEFT示例select*fromT1fulljoinT2onT1.T1_C11=T2.T2_C11*/1306.1.4使用TOP限制结果集行数 TOP(expression)[percent][WITHTIES]expression:指定返回行数的数值表达式。TOPnpercnet:取查询结果的前n%行。WITHTIES:包括并列的结果。【说明】1.TOP谓词写在选择列之前,distinct之后。2.如果使用了WITHTIES谓词,则要求必须使用ORDERBY子句对查询结果进行排序。*/130示例【例7】查询考试成绩最高的三个成绩,列出学号、课程号和成绩。SELECTTOP3Sno,Cno,GradeFROMSCORDERBYGradeDESC*/130示例【例8】查询选课人数最少的两门课程(不包括没有人选的课程),列出课程号和选课人数。SELECTTOP2WITHTIESCno课程号,COUNT(*)选课人数FROMSCGROUPBYCnoORDERBY选课人数ASC*/13

显示全部
相似文档