《《数据库查询》教学课件.pptx》由会员分享,可在线阅读,更多相关《《数据库查询》教学课件.pptx(65页珍藏版)》请在知学网上搜索。
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,SQL数据查询功能,查询语句的基本结构,Select,单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点您的内容已经简明扼要,字字珠玑,但信息却千丝万缕、错综复杂,需要用更多的文字来表述;但请您尽可能提炼思想的精髓,否则容易造成观者的阅读压力,适得其反,from,where,groupby,having,orderby,01,简单查询,添加标题,02,查询所有学生的学号与姓名,添加标题,03,Selectsno,sn,fromS,添加标题,简单查询,查询所有学生的记录,Select*,fromS,查询经过计算的列,查询全体学生的姓名及其出生年份,添加标题,selectsn,2010-age,fromS,添加标题,给经过计算的列加上列名,SelectsnAS姓名,2010-ageAS年份,fromS,查询全体学生的姓名及其出生年份,01,条件查询,单击此处添加小标题,03,并列出学生的学号,单击此处添加小标题,02,查询在选课表SC中有哪些学生选修了课程,,单击此处添加小标题,04,selectsno,fromsc,单击此处添加小标题,消除相同的元组,SELECTDISTINCTsno,FROMSC,并列出学生的学号,查询在选课表SC中有哪些学生选修了课程,,查询满足条件的元组,WHERE子语句常用的查询条件,(1)算术操作符,+(加号)、(减号)、*(乘号)和/(除号)。
,(2)比较操作符,=(等于)、(大于)、=(大于,等于)、!=(不等于)、(小于大于)、,!(不大于)和!85,FROMSC,02,单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点,SELECTSNO,CNO,SCORE,01,查询成绩高于85分的学生的学号,课程号,和成绩,确定范围,SELECTSN,DEPT,AGE,单击此处添加正文,文字是您思想的提炼,为了演示发布的良好效果,请言简意赅地阐述您的观点您的内容已经简明扼要,字字珠玑,但信息却千丝万缕、错综复杂,需要用更多的文字来表述;但请您尽可能提炼思想的精髓,否则容易造成观者的阅读压力,适得其反,FROMS,WHEREAGEBETWEEN18AND21,(WHEREAGE=18ANDAGE=85,查询选修了C01或C02且分数大于等于85,分组查询,Groupby子语句将查询,结果按照某一列或是多,列的值分组,值相等的为,一组,Group,by子,语句,分组查询,统计每门课程的选课人数,列出课程号和,人数,selectcnoas课程号,count(sno)as,选课人数,fromsc,groupbycno,语句,BY子,ORDER,询结果按照一个或多个,属性列的升序(ASC),或降序(DESC)排列,,缺省值为升序。
,ORDERBY子语句对查,结果排序,对结果进行排序,照成绩的降序排序,selectsno,score,fromsc,wherecno=3,orderbyscoredesc,查询选修3课程的学生的学号和成绩,并按,对结果进行排序,单击此处添加正文,文字是您思想的提炼,请尽量言简意赅地阐述观点,select*,orderbydept,agedesc,froms,查询全体学生情况,查询结果按所在系的系,号升序排列,同一系中的学生按年龄降序排,列.,使用TOP子句显示前面的有限条记,查询成绩前5名的学生的学号,Selecttop5sno,fromsc,orderbyscore,录,常用的计算函数及其功能,函数名,使用格式,功能,COUNTCOUNT(*),统计表中元组的个数,不消除,重复行,不允许使用distinct,关键字,统计本列值的个数,COUNT,COUNT(),SUM,SUM(),按列计算值的总和(数值型的,列),按列求平均值,AVG,AVG(),MAX,MAX(),求一列中的最大值,MIN,MIN(),求一列中的最小值,利用函数统计汇总查询,查询学生总人数,SELECTCOUNT(*),FROMS,查询选修了3门以上的学生学号,Selectsno,fromsc,groupbysno,havingcount(*)3,利用函数统计汇总查询,查询学号为S01的学生的总分和平均分,SELECTSUM(SCORE)AS总分,,AVG(SCORE)AS平均分,FROMSC,WHERESNO=S01,利用函数统计汇总查询,的分数,SELECTMAX(SCORE)AS最高分,,MIN(SCORE)AS最低分,,MAX(SCORE)-MIN(SCORE)AS相差分数,FROMSC,WHERECNO=C01,求选修C01号课程的最高分,最低分,以及相差,添加标题,思考,添加标题,查询年龄最大的学生的姓名,添加标题,Selectsn,froms,Whereage=max(age),添加标题,代码错误!,正确代码?,当查询涉及到两个及两个以,上的表,称之为连接查询。
,内连接,外连接,连,01,接,02,查,03,询,04,左外连接,05,右外连接,06,全外连接,07,内连接也叫连接,被称,为普通连接或自然连接,内,添加标题,连,添加标题,接,添加标题,内连接是从结果中删,添加标题,除其他被连接表中没有,添加标题,匹配行的所有行,所以,添加标题,内连接可能会丢失信息,添加标题,,添加标题,SC表,内连接,S表,1,a,b,c,d,snosn,2,1,2,3,1,2,1,2,snocno,logo,s.snosnsc.snocno,1A11,1a12,1a13,2b21,2b22,3c31,3c32,外连接则扩充了内连接,添加标题,的功能,会把内连接中,添加标题,行不同,把外连接分为,添加标题,删除表源中的一些保留,添加标题,左外连接、右外连接和,添加标题,下来,由于保留下来的,添加标题,全外连接这3种连接,添加标题,外,添加标题,连,添加标题,接,添加标题,左外连接保留了第一个,添加标题,连,添加标题,左,添加标题,接,添加标题,外,添加标题,表的所有行,但只包含,添加标题,第二个表与第一表匹配,添加标题,的行第二个表相应的,添加标题,空行被放入NULL值。
,ABC,01,BD,02,a1b12,03,b15,04,a2b24,05,b26,06,a2b36,07,b37,08,a2b48,09,b38,10,R,11,S,12,左外连接,AR.BCS.BD,a1b12b15,a1b24b26,a2b36b37,a2b48nullnull,a2b36b38,添加标题,右外连接保留了第二个,添加标题,连,添加标题,右,添加标题,接,添加标题,外,添加标题,表的所有行,但只包含,添加标题,第一个表与第二个表匹,添加标题,配的行第一个表相应,添加标题,空行被入NULL值,ABC,BD,a1b12,b15,a2b24,b26,a2b36,b37,a2b48,b38,b53,R,S,右外连接,a2b36b37,01,a2b36b38,02,nullnullnullb53,03,AR.BCS.BD,a1b12b15,a1b24b26,04,全外连接会把两个表所,01,全,02,外,03,连,04,接,05,有的行都显示在结果表,06,中,07,ABC,BD,a1b12,b15,a2b24,b26,a2b36,b37,a2b48,b38,b53,R,S,全外连接,AR.BCS.BD,a1b12b15,a1b24b26,a2b36b37,nullnullnullb53,a2b36b38,a2b48nullNull,两个表的关键字满足连接条件,,则从两个表中提取数据并组合成,新的记录,内,连,接,Select列名,from表1(inner)jion表2,on连接条件,(Select列名,from表1,表2,where连接条件),Select列名,from表1left/right/full,jion表2,on连接条件,外,连,接,两个表的关键字满足连接条,件,则从两个表中提取数据,并组合成新的记录,内连接,01,查询选修课程号为3的学生的姓名,selectsn,fromsjoinsc,ons.sno=sc.snoandcno=3,(selectsn,froms,sc,wheres.sno=sc.snoandcno=3),02,内连接,查询每个学生的情况以及选修课的情况,Select*,fromscjions,ons.sno=sc.sco,(Select*,fromsc,s,wheres.sno=sc.sco,),1,2,-自然连接,去掉重复的列,单击此处添加小标题,查询每个学生的情况以及选修课的情况,单击此处添加小标题,Selects.sno,s,age,dept,cno,score,fromscjions,ons.sno=sc.sco,(Selects.sno,s,age,dept,cno,score,fromsc,s,wheres.sno=sc.sco,),单击此处添加小标题,复合条件查询,Selectsno,sn,Froms,sc,wheres.sno=sc.snoand,cno=2and,score=90,查询选修2号课程且成绩在90分以上的所,有学生的学号和姓名,多表查询,添加标题,01,单击此处添加小标题,02,单击此处添加小标题,03,单击此处添加小标题,04,查询1系中每个学生的学号,姓名,选修课的课程,名及成绩,Selectsno,sn,cn,score,froms,sc,c,wheres.sno=sc.snoand,o=oand,dept=1,嵌套查询,查询与“张三”在同一个系学习的学生,Selectsno,sn,dept,Froms,Wheredept=(,Selectdept,froms,Wheresn=张三,),嵌套查询,姓名,Selectsno,sn,Froms,Wheresno=(,Selectsnofromsc,Wherecno=(,Selectcno,fromc,Wherecn=数据库,),),1,2,查询选修了“数据库”课程的学生的学号和,查询选修了1号课程且成绩大于此课程,01,平均成绩的学生的学号和成绩,02,Selectsno,cno,fromsc,wherecno=1andscore,(selectavg(score),fromsc,wherecno=1,),03,带有ANY或ALL谓词的子查询,查询其他系中比1系某一学生小的学生姓名,和年龄,Selectsn,age,froms,whereageany(,selectage,froms,wheredept=1,),anddept1,带有ANY或ALL谓词的子查询,查询其他系中比1系所有学生都小的学生姓,名和年龄,Selectsn,age,froms,whereageall(,selectage,froms,wheredept=1,),anddept1,查询姓“张”同学的详细信息,使用TOP子句显示前面的有限条记,a2b36b37,Selecttop5sno,fromscjions,Selectsno,sn,dept,层的where子句返回,a1b24b26,查询姓“张”同学的详细信息,WHERESNLIKE张%,带EXISTS的子查询只返回真,a2b36b37,(WHEREAGE21),orderbyscoredesc,查询无考试成绩的学生的学号和相对应的,带有ANY或ALL谓词的子查询,查询其他系中比1系所有学生都小的学生姓,名和年龄,Selectsn,age,froms,whereage(selectmin(age),froms,wheredept=1,),anddept1,带有,EXISTS,谓词的,子查询,EXISTS表示存在的,量词,带有EXISTS,的子查询不返回任何,实际数据,它只得到,逻辑值“真”或,“假”。
当子查询的,查询结果为空时,外,层的where子句返回,true值,否则返回,false,带有EXISTS谓词的子查询,查询选修了(没有)1号课程的学生的姓名,selectsn,froms,where(not)exists(,select*,fromsc,wheres.sno=sc.sno,andcno=1,),带有EXISTS谓词的子查询,由EXISTS引出的子查询,其,目标列表达式通常用*,因为,带EXISTS的子查询只返回真,值(true)或者假值(false),selectsnoas学号,sum(score)as总分,fromsc,wheresno=1,union,selectsnoas学号,sum(score)as总分,fromsc,wheresno=2,04,结果集,03,合并查询,01,查询学号为1号学生的学号和总分,再查询出学号,为2号学生的学号和总分,将两个结果合并成一个,02,将结果存储到表中,Select.into表名,.,查询选修1号课程的学生的姓名,并将结,果存储在“查询结果”表中,selectsnas,froms,sc,wheres.sno=sc.snoandcno=1,姓名into查询结果,。