资源描述:
《sql查询语句练习(解析版)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、sql查询语句练习(解析版)BYDD表情况Student(S#,Sname,Sage,Ssex)学生表Course(C#,Cname,T#)课程表SC(S#,C#,score)成绩表Teacher(T#,Tname)教师表createtableStudent(S#varchar2(20),Snamevarchar2(10),Sageint,Ssexvarchar2(2));createtableCourse(C#varchar2(20),Cnamevarchar2(10),scorevarchar2(4));createtableSC(S#varchar2(20),C#varch
2、ar2(20),scorevarchar2(4));createtableTeacher(T#varchar2(20),Tnamevarchar2(10));insertintoStudent(S#,Sname,Sage,Ssex)values('1001','李五','15','男');insertintoStudent(S#,Sname,Sage,Ssex)values('1002','张三','16','女');insertintoStudent(S#,Sname,Sage,Ssex)values('1003','李四','15','女');insertintoStuden
3、t(S#,Sname,Sage,Ssex)values('1004','陈二','14','男');insertintoStudent(S#,Sname,Sage,Ssex)values('1005','小四','15','男');问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号; selecta.S#from(selects#,scorefromSCwhereC#='001')a,(selects#,score fromSCwhereC#='002')b wherea.score>b.scoreanda.s#=b.s#;解析:(selects#,scorefr
4、omSCwhereC#='001')a//从SC中查询C#=001的学生学号和分数,并定义为a表。(selects#,scorefromSCwhereC#='002')b//从SC中查询C#=002的学生学号和分数,并定义为b表。wherea.score>b.scoreanda.s#=b.s#条件,a表与b表中学号相同且分数比b中的高。2、查询平均成绩大于60分的同学的学号和平均成绩; selectS#,avg(score)romsc groupbyS#havingavg(score)>60;解析:groupbyS#havingavg(score)>60这里是指平均分数大
5、于60分的学号。使用HAVING子句原因是,WHERE关键字无法与合计函数一起使用。合计函数(比如SUM)常常需要添加GROUPBY语句,根据一个或多个列对结果集进行分组。3、查询所有同学的学号、姓名、选课数、总成绩; selectStudent.S#,Student.Sname,count(SC.C#),sum(score) fromStudentleftOuterjoinSConStudent.S#=SC.S# groupbyStudent.S#,Sname解析:StudentleftOuterjoinSConStudent.S#=SC.S#左外连接,从student表返回所
6、有的行放于左表中,从SC中返回的与左表匹配的行放于右表。Student表中有但SC表中没有的在右表中对应行留空。 groupbyStudent.S#,Sname以Student.S#,Sname分组。4、查询姓“李”的老师的个数; selectcount(distinct(Tname)) fromTeacher whereTnamelike'李%';解析:distinct(Tname) 在表中,可能会包含重复值。DISTINCT用于返回唯一不同的值,这里的作用就是防止返回的Tname出现重复值。 whereTnamelike'李%'模糊查询,"%"代表一或多个字符。5、查询没学过
7、“叶平”老师课的同学的学号、姓名;SelectStudent.S#,Student.Sname fromStudent whereS#notin(selectdistinct(SC.S#)fromSC,Course,Teacherwhere SC.C#=Course.C#andTeacher.T#=Course.T#andTeacher.Tname='叶平');解析:notin题目是查询没学过“叶平”老师课的同学的学号、姓名,这里使用notin就表示所要查询的S#不在后