学生选课数据库SQL语句练习题(详细分解答案)
学生选课数据库SQL语句练习题(详细分解答案)
一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。
用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构表(一)Student属性名数据类型可否为空含义Sno Char(3) 否学号(主键)Sname Char(8) 否学生姓名Ssex Char(2) 否学生性别Sbirthday datetime 可学生出生年月Class Char(5) 可学生所在班级表(二)Course属性名数据类型可否为空含义Cno Char(5) 否课程号(主键)Cname Varchar(10) 否课程名称Tno Char(3) 否教师编号(外键)表(三)Score属性名数据类型可否为空含义Sno Char(3) 否学号(外键)Cno Char(5) 否课程号(外键)Degree Decimal(4,1) 可成绩主码:Sno+ Cno表(四)Teacher属性名数据类型可否为含义空Tno Char(3) 否教师编号(主键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年月Prof Char(6) 可职称Depart Varchar(10) 否教师所在部门表1-2数据库中的数据表(一)StudentSno Sname Ssex Sbirthday class108 曾华男1977-09-9503301105 匡明男1975-10-9503102107 王丽女1976-01-950332395033101 李军男1976-02-2095031109 王芳女1975-02-1095031103 陆君男1974-06-03表(二)CourseCno Cname Tno3-105 计算机导论8253-245 操作系统8046-166 数字电路8569-888 高等数学831表(三)ScoreSno Cno Degree103 3-245 86105 3-245 75109 3-245 68103 3-105 92105 3-105 88109 3-105 76101 3-105 64107 3-105 91108 3-105 78101 6-166 85107 6-166 79108 6-166 81表(四)TeacherTno Tname Tsex Tbirthday Prof Depart804 李诚男1958-12-02 副教授计算机系856 张旭男1969-03-12 讲师电子工程系825 王萍女1972-05-05助教计算机系831 刘冰女1977-08-14 助教电子工程系-- 1、查询Student表中的所有记录的Sname、Ssex和Class列。
SQL经典习题及答案(新手必看)
Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left Outer join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC where S#='1002')group by S# having count(*)=(select count(*) from SC where S#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学生ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.C# = R.C# andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.C# = IL.C# and IM.S#=IL.S#GROUP BY IL.C#)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.C# = IR.C#GROUP BY IR.C#);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.C#=course.C#GROUP BY t.C#ORDER BY 100* SUM(CASE WHEN isnull(score,0)>=60THEN 1ELSE 0END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.Sname AS 学生姓名,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#;27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 28、查询男生、女生人数Select count(Ssex) as 男生人数from Student group by Ssex having Ssex='男';Select count(Ssex) as 女生人数from Student group by Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数select Sname,count(*) from Student group by Sname having count(*)>1;;31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Sname, CONVERT(char (11),DATEPART(year,Sage)) as agefrom studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# ;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#;37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C# ;38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80and C#='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修人数select count(*) from sc group by C#;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。
(完整word版)sql语句练习题及答案
一在数据库 school 中建立student , sc, course 表。
学生表、课程表、选课表属于数据库School ,其各自的数据结构如下:学生Student (Sno,Sname,Ssex,Sage,Sdept)课程表course(Cno,Cname,Cpno,Ccredit)学生选课SC(Sno,Cno,Grade)二设定主码1 Student表的主码:sno2 Course表的主码:cno3 Sc表的主码:sno,cno1写出使用Create Table 语句创建表student , sc, course 的SQL语句2在student表中插入信息3 删除student表中的元组4在数据库school中删除关系student5在student表添加属性sbirthdate 类型datetime练习Delete1 删除所有JSJ 系的男生delete from Student where Sdept=’JSJ’ and Ssex=’男’;2 删除“数据库原理”的课的选课纪录delete from SC where Cno in (select Cno fromCourse where Cname=’数据库原理’);1 修改0001 学生的系科为: JSJ2 把陈小明的年龄加1岁,性别改为女。
2 修改李文庆的1001课程的成绩为93 分3 把“数据库原理”课的成绩减去1分Select 查询语句一单表1查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。
2查询姓名中第2个字为“明”字的学生学号、性别。
3查询1001课程没有成绩的学生学号、课程号4查询JSJ 、SX、WL 系的年龄大于25岁的学生学号,姓名,结果按系排列5按10分制查询学生的sno,cno,10分制成绩(1-10分为1 ,11-20分为2 ,30-39分为3,。
90-100为10)6查询student 表中的学生共分布在那几个系中。
SQL语句练习及参考答案
SQL语句练习及参考答案SQL 语句练习1.设学⽣选课数据库有关系S (sno,sname,age,sex )、SC (sno,cno,grade )和C(cno,cname,teacher ),分别表⽰学⽣、选课和课程,sno 代表学号,sname 代表学⽣姓名,age 代表年龄,sex 代表性别,grade 代表成绩,cno 代表课程号,teacher 代表任课教师。
试完成表⽰下列查询。
(1)检索年龄⼤于21的男学⽣学号(sno)和姓名(sname)。
(2)建⽴性别只能为“男”、“⼥”的约束。
(3)创建⼀个视图v1,该视图⽤来查询学⽣的选课情况,要求包含:学⽣姓名(sname),课程名(cname),任课教师teacher 和成绩grade 。
(4)检索选修课程号为k1和k5的学⽣学号(sno)。
(5)检索全部学⽣都选修的课程的课程号(cno)和课程名(cname)。
(6)删除所有男同学的选课记录。
1.(1)select sno,snae from s where sex=’男’ and age>21 (2)alter table s add constraint c1 check sex in (‘男’,’⼥’)(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o (4)select sno fromsc sc1 where cno=’k1’ and exists (se lect * fromsc sc2 where sc1.sno =sc2.sno and/doc/62176c89fe4733687e21aaca.html o=’k5’)(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where/doc/62176c89fe4733687e21aaca.html o=/doc/62176c89fe4733687e21aaca.html o and s.sno=sc.sno)(6)delete from sc where sno in (select sno from s where sex=’男’)或delete sc from sc,s where s.sno=sc.sno and sex=’男’2.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号, 图书编号, 借阅⽇期,还期)。
sql查询题目及答案
sql查询题目及答案1、查询所有数学系学生的信息。
--select * from s where 系='数学系'2、查询李老师所教的课程号、课程名--select 课程号,课程名from c where 教师like '李%'3、查询年龄大于20岁的女同学的学号和姓名。
--select 学号,姓名from s where year(getdate())-year(出生日期)+1>20 and 性别='女'4、查询学号为‘H0301’所选修的全部课程成绩。
--select 成绩from sc where 学号= 'H0301'5、查询平均成绩都在80分以上的学生学号及平均成绩。
--select 学号,AVG(成绩) from sc group by 学号having AVG(成绩)>=806、查询至少有6人选修的课程号。
--select 课程号from sc group by 课程号having count(*)>67、查询C02号课程得最高分的学生的学号--select 学号from sc where 课程号='c02' and 成绩=(select max(成绩) from sc where 课程号='c02')8、查询学号为’J0101’的学生选修的课程号和课程名--select 课程号,课程名from c,sc where 学号='j0101' and c.课程号=sc.课程号9、‘李小波’所选修的全部课程名称。
--Select c.课程名from s,c,sc where s.学号=sc.学号and c.课程号=sc.课程号and 姓名='李小波'10、所有成绩都在70分以上的学生姓名及所在系。
--select 姓名,系from s,sc where s.学号=sc.学号group by 学号having min(成绩)>=7011、英语成绩比数学成绩好的学生--select sc2.学号from c c1,c c2,sc sc1,sc sc2 where c1.课程名='英语'--and c2.课程名='数学' and sc1.成绩>sc2.成绩and sc1.学号=sc2.学号--and c1.课程号=sc1.课程号and c2.课程号=sc2.课程号12、至少选修了两门课及以上的学生的姓名和性别select 姓名,性别from s,sc--where s.学号=sc.学号group by 学号having count(*)>=213、选修了李老师所讲课程的学生人数--select count(*) from C,sc where 教师like '李%' and c.课程号=sc.课程号group by sc.课程号14、‘操作系统’课程得最高分的学生的姓名、性别、所在系--select 姓名,性别,系from s,sc--where s.学号=sc.学号and 成绩=--(select max(成绩) from c,sc where sc.课程号=c.课程号and 课程名='操作系统')15、显示所有课程的选修情况。
SQL语句练习及标准答案
SQL语句练习及答案————————————————————————————————作者:————————————————————————————————日期:sql语句练习题1数据库有如下四个表格:student(sno,sname,sage,ssex,sdpt) 学生表系表(dptno,dname)course(cno,cname, gradet, tno) 课程表sc(sno,cno,score) 成绩表teacher(tno,tname) 教师表要求:完成以下操作1.查询姓"欧阳"且全名为三个汉字的学生的姓名。
select sname from student where sname like “欧阳__‟;2.查询名字中第2个字为"阳"字的学生的姓名和学号。
select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。
select sname,sno,ssexfrom studentwhere sname not like “刘%”;4.查询db_design课程的课程号和学分。
select cno,ccredit from coursewhere cname like 'db_design'5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。
select * from course where cname like 'db%i_ _';6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
select sno,cno from sc where grade is null;7.查所有有成绩的学生学号和课程号。
select sno,cno from sc where grade is not null;8.查询计算机系年龄在20岁以下的学生姓名。
数据库语言SQL作业解答
S Q L语言习题1.关系数据模型如下:学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:选修课程“DB”的学生姓名SN。
方法1.SELECTSNFROMSWHERESNOIN(SELECTSNOFROMSCWHERECNO IN(SELECTCNO/*=*/FROMCWHERECN=‘DB’));方法2.SELECTSNFROMS,SC,CWHERE S.SNO=SC.SNOAND O=OANDCN=“DB”;2.关系数据模型如下:学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:查询课程名和它的直接先行课的课程名以及它的间接先行课的课程名。
SELECTCN,,FROMC,CCX,CCYWHEREC.PCNO=OANDCX.PCNO=O[例41]找出每个学生超过他选修课程平均成绩的课程号。
SELECTSno,CnoFROMSC xWHERE Grade>=(SELECT AVG(Grade)FROMSC yWHERE y.Sno=x.Sno);3.关系数据模型如下P84例4.26学生S(SNO,SN,SEX,AGE)课程C(CNO,CN,PCNO)PCNO为直接先行课号选课SC(SNO,CNO,GR)GR为课程考试成绩用SQL写出查询程序:所有学生都选修的课程名CN。
方法1.SELECTCNFROMCWHERE NOTEXISTS(SELECT*FROMSWHERE NOTEXISTS(SELECT*FROMSCWHERESNO=S.SNOANDCNO=O);变换后语义:不存在这样的学生x,该学生没有选修P。
(?x)P≡?(?x(?P))方法2.SELECTCNFROMCWHERECNOIN(SELECTCNOFROMSCGROUPBYCNOHAVINGCOUNT(*)=(SELECT COUNT(*)FROMS));[例46]查询选修了全部课程的学生姓名。
sql查询题目及答案
数据库中有如下三个表:学生表(学号id,姓名name,性别sex,系部depart,年龄age)8个学生记录选课表(学号id,课程号cid,成绩grade) 12门课程课程表(课程号cid,课程名cname,学分Ccredit) 6门课程学生-课程模式 S-T :学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)1.从学生表中查询所有同学的所有信息select*from学生表2.从学生表中查询所有学生的信息,并分别赋予一个别名select学号as xuehao,姓名as xingming,性别as xingbie,系部as xibu,年龄as nianling from学生表3.从学生表中查询姓名是Allen的学生的信息select*from学生表where姓名='Allen'4.从学生表中查询学号在1101到1199之间的所有学生的信息select*from学生表where学号between 1101 and 11995.从学生表中查询年龄小于18和大于20的所有学生的学号和姓名select学号,姓名from学生表where年龄<18 or年龄>206.从学生表中查询计算机系年龄小于20的所有学生的信息select*from学生表where系部='computer'and年龄<207.从学生表中查询姓名以A开头的学生的信息select*from学生表where姓名LIKE'A%'8.从学生表中查询姓名的第三个字符是A的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'__A%'9.从学生表中查询姓名中包含“llen”的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'10.从学生表中查询姓名中包含“llen”且姓名只有5个字符的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'and len(姓名)=511.从学生表中查询有年龄信息的学生的学号和姓名select学号,姓名from学生表where年龄is not null12.从学生表中查询最大年龄和最小年龄select max(年龄)最大年龄,min(年龄)最小年龄from学生表13.从学生表中查询所有学生的平均年龄select avg(年龄)平均年龄from学生表14.从学生表中查询学校所有系的名字select distinct系部from学生表15.从学生表中查询学校共有多少个系select count(distinct系部)系部总和from学生表16.从选课表中查询所有学生的选课情况select distinct课程号from选课表17.从选课表中查询选修课程号为C01课程的学生的学号select学号from选课表where课程号='C01'18.从选课表中查询所有没有选C02课程的学生的学号select distinct学号from选课表where课程号!='C02'19.从选课表中查询有选修C01或C02课程的学生的学号select distinct学号from选课表where课程号='C01' or 课程号='C02'20.从选课表中查询学号为1101的学生的选课情况select课程号from选课表where学号='1101'21.从选课表中查询所有选课信息,即学号、课程号、成绩,并给成绩加8分select学号,课程号,成绩=成绩+8 from选课表22.从选课表中查询学号为1101的学生的所有选修课程成绩的总和select sum(成绩)成绩总和from选课表where学号='1101'23.从选课表中查询选修课程好为C02所有学生的成绩平均值并赋予“平均成绩24.”列名select avg(成绩)平均成绩from选课表where课程号='C02'25.从选课表中查询选修课程号C02且该门课程考试及格的学生的学号select学号from选课表where课程号='C02'and成绩>=6026.从选课表中查询所有无考试成绩的学生的学号和课程的课程号select学号,课程号from选课表where成绩is null27.从选课表中查询选修了课程号以C开头的学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'C%'28.从选课表中查询选修了课程号以C、D或E开头学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'[CDE]%'29.从选课表中查询选修了课程号中包含DB的学生的学号和课程号select学号,课程号from选课表where课程号LIKE'%DB%'30.从选课表中查询选修了课程的学生的学号select distinct学号from选课表where课程号is not null31.从选课表中查询选修了课程的学生的人数select count(distinct学号)总人数from选课表31.找出姓名以D开头的学生姓名和所有成绩select学生表.姓名,选课表.成绩from学生表join选课表on学生表.学号=选课表.学号where学生表.姓名LIKE'D%'32.查找的所有学生姓名与学号,结果按学号降序排序select 学号,姓名from学生表order BY学号DESC33.查找成绩介于80和90之间的学生姓名,结果按成绩和姓名升序排序select学生表.姓名from选课表join学生表on学生表.学号=选课表.学号where选课表.成绩between 80 and 90order BY选课表.成绩,学生表.姓名34.查找english系的所有学生姓名,结果按成绩和姓名升序排序select学生表.姓名,学生表.学号,选课表.成绩from选课表join学生表on学生表.学号=选课表.学号where学生表.系部='english'35.查找同时选修了C01及C02两门课程的学生姓名及学号select学生表.姓名,A.学号from选课表as A join选课表as B on A.学号=B.学号join学生表on学生表.学号=A.学号where A.课程号='C01'and B.课程号='C02'36.查找所有选修了课程的学生姓名及所在系别select distinct学生表.姓名,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号is not null37.查找成绩高于90分的学生姓名、学号及系别select学生表.姓名,学生表.学号,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.成绩>=9038.找出选修了C01课程的学生姓名select学生表.姓名from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号='C01'39.查询English系学生人数select count(*) English 系总人数from学生表where系部='English'40.分别查询各系的学生人数select系部,count(*)人数from学生表group by系部41.创建一个角色uus.CREATE ROLE uus;42.给uus授权SELECT,UPDATE,INSERT .GRANT SELECT,UPDATE,INSERTON StuTO uus43.增加一个登录,登录名为tp,密码为123,默认的数据库为stuEXEC sp_addlogin 'tp', '123', 'stu'44.将登录tp增加为test库的一个用户,并连接到test库。
SQL语句练习参考答案(教学数据库)
以下为SQL查询练习参考答案(查询用到的表参照教材P82)。
1.查询全体学生的姓名和所在系。
Select Sno,SdeptFrom Student;2.查询所有课程的详细信息。
Select *From Course;或者Select Cno,Cname,Cpno,CcreditFrom Course;3.查询选修了课程的学生学号。
Select Distinct SnoFrom SC;注意:select子句中需要指定Distinct 关键词4.查询有学生选修的课程号。
Select Distinct CnoFrom SC;5.检索年龄在 18到 20之间(含18和20)的女生的学号、姓名及年龄。
Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage between 18 and 20);注意: where子句性别的常量值——女,需用英文状态下的单引号或双引号。
或者Select Sno,Sname,SageFrom StudentWhere Ssex=’女’ and (Sage >=18 and Sage<= 20);6.检索“200215121”学生选修课程号及成绩。
Select Cno,GradeFrom SCWhere Sno=’200215121’;7.检索选修了“1”号或“3”号课程的学生学号、课程号及成绩。
Select *From SCWhere Cno=’1’ or Cno=’3’;注意: where子句若用Cno=’1’ or ’3’是错误的,or连接的是两个布尔表达式。
8.检索所有姓王的同学的姓名、性别和所在系。
Select Sname,Ssex,SdeptFrom StudentWhere Sname like ’王*’;注意: Access中的通配符为’*’ 和’?’标。
准SQL中的通配符为’%’ 和’_’9.检索课程名中包括“数据库”的课程详细信息,结果按学分降序排列。
50SQL语句题目及答案
/*Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表*/--1、查询“001”课程比“002”课程成绩高的所有学生的学号;select s1.s#from SC s1,SC s2where s1.s#=s2.s# and s1.c#='001' and s2.c#='002' and s1.score>s2.score;--2、查询平均成绩大于60分的同学的学号和平均成绩;select s.s#,avg(s.score)from SC sgroup by s.s#having avg(s.score)>60;--3、查询所有同学的学号、姓名、选课数、总成绩;select d.s#,max(d.sname),count(distinct s.c#),sum(s.score)from Student d,SC swhere d.s#=s.s#group by d.s#;--4、查询姓“李”的老师的个数;select count(0)from Teacher twhere t.tname like '李%';--5、查询没学过“叶平”老师课的同学的学号、姓名;select d.s#,d.snamefrom Student dwhere not exists (select distinct(s.s#)from SC s,Teacher t,Course cwhere t.t#=c.t# and s.c#=c.c# and t.tname='叶平' and d.s#=s.s#);--6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select d.s#, d.snamefrom Student d, SC swhere s.s# = d.s# and s.c# = '001' and exists(select s1.s# from SC s1 where s1.s# = s.s# and s1.c# = '002');--7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select s.s#,max(d.sname)from SC s,Student d,Course c,Teacher twhere s.s#=d.s# and s.c#=c.c# and c.t#=t.t# and t.tname='叶平'group by s.s#having count(distinct s.c#) = (select count(0) from Course c,Teacher t where c.t#=t.t# and t.tname='叶平');--8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;select d.s#,d.snamefrom SC s1,SC s2,Student dwhere s1.s#=s2.s# and s1.s#=d.s# and s1.c#='002'and s2.c#='001' and s1.score<s2.score;--9、查询所有课程成绩小于60分的同学的学号、姓名;select s.s#,max(d.sname)from Student d,SC swhere d.s#=s.s# and s.score<60group by s.s#having count(0) = (select count(0) from SC s1 where s.s#=s1.s#);--10、查询没有学全所有课的同学的学号、姓名;select s.s#,max(d.sname)from Student d,SC swhere d.s#=s.s#group by s.s#having count(distinct s.c#) <> (select count(0) from Course);--11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select distinct s.s#,d.snamefrom Student d,SC swhere d.s#=s.s# and s.s#<>'1001' and exists(select s1.c# from SC s1 where s1.s#='1001' and s.c#=s1.c# );--12、查询至少学过学号为“1010”同学所有一门课的其他同学学号和姓名;select distinct s.s#,d.snamefrom Student d,SC swhere d.s#=s.s# and s.s#<>'1010' and s.c# in(select s1.c# from SC s1 where s1.s#='1010');--13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC sset s.score =(select avg(s1.score) from SC s1 where s.c# = s1.c#)where exists (select s.c#from Course c, Teacher twhere s.c# = c.c# and c.t# = t.t# and t.tname = '叶平');--14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select s.s#,max(d.sname)from Student d,SC swhere d.s#=s.s# and s.s#<>'1002'and exists(select c# from SC where s#='1002' and s.c#=c#)group by s.s#having count(0)=(select count(0) from SC where s#='1002')and count((select count(0) from SC where s#=s.s#))=(select count(0) from SC where s#='1002');--15、删除学习“叶平”老师课的SC表记录;delete SC s where exists(select s.c# from Course c,Teacher twhere s.c#=c.c# and c.t#=t.t# and t.tname='叶平');--16、向SC表中插入一些记录,这些记录要求符合以下条件:-- 没有上过编号“003”课程的同学学号、002号课的平均成绩;insert into SC(select d.s#,'002',(select round(avg(score),2) from SC where c#='002')from Student d where not exists (select distinct s.s# from SC s where s.s#=d.s# and s.c#='003'));--17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,-- 按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分;select s.s# as学生ID,(select avg(s1.score) from SC s1,Course c where s1.c#=c.c# and s.s#=s1.s# and ame='Java编程思想' ) as Java编程思想, (select avg(s1.score) from SC s1,Course c where s1.c#=c.c# and s.s#=s1.s# and ame='Struts2基础' ) as Struts2基础, (select avg(s1.score) from SC s1,Course c where s1.c#=c.c# and s.s#=s1.s# and ame='Spring基础' ) as Spring基础, count(0) as有效课程数,round(avg(s.score),2) as有效平均分from SC s,Course c where s.c#=c.c# and ame in('Java编程思想','Struts2基础','Spring基础')group by s.s#order by round(avg(s.score),2) desc;--18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分select s.c# as课程ID,max(s.score) as最高分,min(s.score) as最低分from SC sgroup by s.c#;--19、按各科平均成绩从低到高和及格率的百分数从高到低顺序select s.c# as课程ID,round(avg(s.score),2) as平均分,round(100*sum(case when s.score>=60 then 1 else 0 end)/count(s.score),0)||'%' as及格率from SC sgroup by s.c#;--20、查询如下课程平均成绩和及格率的百分数(用"1行"显示):-- 企业管理(001),马克思(002),OO&UML (003),数据库(004)select round(sum(case when ame='Java编程思想' then s.score else 0 end)/sum(case ame when 'Java编程思想' then 1 else 0 end),2) as Java编程思想,round(100*sum(case when s.score >= 60 and ame='Java编程思想' then 1 else 0 end)/sum(case when ame='Java编程思想' then 1 else 0 end),0)||'%' as及格率,round(sum(case when ame='Struts2基础' then s.score else0 end)/sum(case ame when'Struts2基础' then1 else0 end),2) as Struts2基础,round(100*sum(case when s.score >= 60 and ame='Struts2基础' then1 else0 end)/sum(case when ame='Struts2基础' then1 else 0 end),0)||'%' as及格率from SC s,Course cwhere s.c#=c.c#;--21、查询不同老师所教不同课程平均分从高到低显示-- SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,-- C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩select t.t# as教师ID,max(t.tname) as教师名称,ame as所教课程,round(avg(s.score), 2) as平均分from Teacher t, Course c, SC swhere t.t# = c.t# and c.c# = s.c#group by t.t#, ameorder by t.t#, round(avg(s.score), 2) desc;--22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:-- 企业管理(001),马克思(002),UML (003),数据库(004)select d.s#,d.sname,ame,s.score,s.rank1 as名次from Student d,Course c,(select s#,c#,score,row_number() over(partition by c# order by score desc) rank1 from SC) s where s.c#=c.c# and d.s#=s.s#and ame in('Java编程思想','Struts2基础','Hibernate基础','Spring基础')and (s.rank1 between 3 and 6)order by c.c#,s.rank1;--23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]select s.c#,max(ame),sum(case when s.score between 85 and 100 then 1 else 0 end) as分数85至100,sum(case when s.score between 70 and 85 then 1 else 0 end) as分数70至85,sum(case when s.score between 60 and 70 then 1 else 0 end) as分数60至70,sum(case when s.score between 0 and 60 then 1 else 0 end) as小于60from SC s,Course cwhere s.c#=c.c#group by s.c#;--24、查询学生平均成绩及其名次select d.s#,max(d.sname),round(avg(s.score),2) as平均分,dense_rank() over(order by avg(s.score) desc) as名次from Student d,SC swhere d.s#=s.s#group by d.s#;--25、查询各科成绩前三名的记录:(不考虑成绩并列情况)select c.c# as课程编号,ame as课程名称,d.sname as学生名称,s.rank1 as名次,s.score as成绩from (select s#,c#,score,row_number() over(partition by c# order by score desc) rank1from sc ) s,Course c,Student dwhere s.c#=c.c# and s.s#=d.s# and rank1 < 4order by c.c#,s.rank1;--26、查询每门课程被选修的学生数select s.c#,count(distinct s.s#) as人数from SC sgroup by s.c#;--27、查询出只选修了一门课程的全部学生的学号和姓名select d.s#,max(d.sname)from SC s,Student dwhere d.s#=s.s#group by d.s#having count(distinct s.c#) = 1;--28、查询男生、女生人数select sum(case d.ssex when '男' then 1 else 0 end) as男生,sum(case d.ssex when '女' then 1 else 0 end) as女生from Student d;--29、查询姓“张”的学生名单select *from Student dwhere d.sname like '张%';--30、查询同名同性学生名单,并统计同名人数select d.sname,d.ssex,count(0)from Student dgroup by d.sname,d.ssexhaving count(0)>1;--31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select *from Student dwhere to_char(d.sage,'yyyy') = '1981';--32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列select s.c#,round(avg(s.score),2) as平均分from SC sgroup by s.c#order by avg(s.score),s.c# desc;--33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select s.s#,max(d.sname),round(avg(s.score),2) as平均分from SC s,Student dwhere s.s#=d.s#group by s.s#having avg(s.score)>85;--34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数select d.sname,s.scorefrom Student d,SC s,Course cwhere d.s#=s.s# and s.c#=c.c# and ame='Java编程思想' and s.score<60;--35、查询所有学生的选课情况;select d.s#,max(d.sname),count(distinct s.c#) as选课数from Student d left join SC s on(d.s#=s.s#)group by d.s#;--36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;select max(d.sname),max(ame),s.scorefrom Student d,SC s,Course cwhere d.s#=s.s# and s.c#=c.c# and s.score>70group by s.s#,s.scorehaving count(0) = (select count(s1.c#) from SC s1 where s.s#=s1.s#);--37、查询不及格的课程,并按课程号从大到小排列select s.s#,ame,s.scorefrom SC s,Course cwhere s.c#=c.c# and s.score<60order by s.c# desc;--38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select d.s#,d.snamefrom Student d,SC swhere d.s#=s.s# and s.c#='003' and s.score>80;--39、求选了课程的学生人数select count(distinct s.s#) as选课的人数from SC s;--40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select sname,scorefrom (select d.sname,s.score,row_number() over(order by s.score desc) as rank1 from Student d,SC s,Course c,Teacher twhere d.s#=s.s# and s.c#=c.c# and c.t#=t.t# and t.tname='叶平')where rank1=1;--41、查询各个课程及相应的选修人数select s.c#,count(distinct s.s#) as选修人数from SC sgroup by s.c#;--42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select *from SC s1,SC s2where s1.c#<>s2.c# and s1.score=s2.score and s1.s#<>s2.s#;--43、查询每门功成绩最好的前两名select d.s#,d.sname,s.c#,s.score,s.rank1from (select s1.s#,s1.c#,s1.score,row_number() over(partition by s1.c# order by s1.score desc) as rank1 from SC s1) s,Student dwhere s.s#=d.s# and rank1 <3order by s.c#,s.rank1;--44、统计每门课程的学生选修人数(超过10人的课程才统计)。
学生选课数据库SQL语句练习题详细分解答案
学生选课数据库SQL语句练习题)详细分解答案()、课程表一、设有一数据库,包括四个表:学生表(Student)。
)以及教师信息表(Teacher(Course)、成绩表(Score表(四)所示,数据如表~的表(一)四个表的结构分别如表1-1语句创建四个表并完成SQL1-2的表(一)~表(四)所示。
用相关题目。
表1-1数据库的表结构表(一)Student 可否属性数据类(主键学SnoChar(3)学生姓Char(8)Sname学生性SsexChar(2)学生出生datetimeSbirthday学生所在Char(5)Class级Course 表(二可否数据类属性课程号(CnoChar(5)键课程名CnameVarchar(10)TnoChar(3)教师编(外键)表(三)Score属性名数据类型可否为含义空Sno Char(3) 否学号(外键)CnoChar(5)否课程号(外键)Degree Decimal(4,1) 可成绩wzm数据库.Sno+ Cno 主码:T eacher 表(四)可否为含义属性名数据类型空(Char(3)教师编Tno键教师姓TnameChar(4)教师性TsexChar(2)教师出生datetimeTbirthday职ProfChar(6)教师所在DepartVarchar(10)门数据库中的数据表1-2Student 表(一classSsexSbirthdaySnoSname 950331977-09-01曾108950311975-10-02匡105950331976-01-23107王950331976-02-20101李950311975-02-10109王950311974-06-03103陆男Course 表(二)Tno Cname Cno825 计算机导论3-105804 3-245 操作系统856数字电路6-166wzm数据库.8319-888 高等数学Score 表(三)Degree Cno Sno863-245103 753-245105 681093-245 921033-105 881053-105 761093-105 641013-105 911073-105 781083-105 851016-166791076-166811086-166Teacher表(四DepartProfTsexTbirthdayTnoTname副1958-12-02804李计算机电子工讲1969-03-12856张计算机1972-05-05助825王电子工助1977-08-14831刘系列。
(完整版)sql练习题+答案
(一) 新建以下几个表student(学生表):其中约束如下:(1)学号不能存在相同的(2)名字为非空(3)性别的值只能是’男’或’女’(4)系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系(5)出生日期为日期格式(6)年龄为数值型,且在0~100之间cs(成绩表):其中约束如下:(1)sno和cno分别参照student和course表中的sno,cno的字段(2)cj(成绩)只能在0〜100之间,可以不输入值create table cs (sno smallint not null referencesstudent ( sno ), ----定义成外键cno smallint not null referencescourse ( cno ), ----定义成外键cj smallint constraint e check (cj between0 and 100 ),---- 检查约束一—j(成绩)只能在~100之间,可以不输入值constraint f primary key ( sno , cno )---- 定义学生学号和课程号为sc表的主键)course(课程表)其约束如下:(1)课程号(cno)不能有重复的(2)课程名(cname非空(三)针对学生课程数据库查询(1)查询全体学生的学号与姓名。
Select sno , sname from student(2)查询全体学生的姓名、学号、所在系,并用别名显示出结果。
(3)查询全体学生的详细记录。
select * from student(4)查全体学生的姓名及其出生年份。
select sname , birth from student(5)查询学校中有哪些系。
select distinct dept from student(6)查询选修了课程的学生学号。
select sno from cs where eno is not null(7)查询所有年龄在20岁以下的学生姓名及其年龄。
sql查询题目及答案
数据库中有如下三个表:学生表(学号id,姓名name,性别sex,系部depart,年龄age)8个学生记录选课表(学号id,课程号cid,成绩grade) 12门课程课程表(课程号cid,课程名cname,学分Ccredit) 6门课程学生-课程模式 S-T :学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)1.从学生表中查询所有同学的所有信息select*from学生表2.从学生表中查询所有学生的信息,并分别赋予一个别名select学号as xuehao,姓名as xingming,性别as xingbie,系部as xibu,年龄as nianling from学生表3.从学生表中查询姓名是Allen的学生的信息select*from学生表where姓名='Allen'4.从学生表中查询学号在1101到1199之间的所有学生的信息select*from学生表where学号between 1101 and 11995.从学生表中查询年龄小于18和大于20的所有学生的学号和姓名select学号,姓名from学生表where年龄<18 or年龄>206.从学生表中查询计算机系年龄小于20的所有学生的信息select*from学生表where系部='computer'and年龄<207.从学生表中查询姓名以A开头的学生的信息select*from学生表where姓名LIKE'A%'8.从学生表中查询姓名的第三个字符是A的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'__A%'9.从学生表中查询姓名中包含“llen”的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'10.从学生表中查询姓名中包含“llen”且姓名只有5个字符的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'and len(姓名)=511.从学生表中查询有年龄信息的学生的学号和姓名select学号,姓名from学生表where年龄is not null12.从学生表中查询最大年龄和最小年龄select max(年龄)最大年龄,min(年龄)最小年龄from学生表13.从学生表中查询所有学生的平均年龄select avg(年龄)平均年龄from学生表14.从学生表中查询学校所有系的名字select distinct系部from学生表15.从学生表中查询学校共有多少个系select count(distinct系部)系部总和from学生表16.从选课表中查询所有学生的选课情况select distinct课程号from选课表17.从选课表中查询选修课程号为C01课程的学生的学号select学号from选课表where课程号='C01'18.从选课表中查询所有没有选C02课程的学生的学号select distinct学号from选课表where课程号!='C02'19.从选课表中查询有选修C01或C02课程的学生的学号select distinct学号from选课表where课程号='C01' or 课程号='C02'20.从选课表中查询学号为1101的学生的选课情况select课程号from选课表where学号='1101'21.从选课表中查询所有选课信息,即学号、课程号、成绩,并给成绩加8分select学号,课程号,成绩=成绩+8 from选课表22.从选课表中查询学号为1101的学生的所有选修课程成绩的总和select sum(成绩)成绩总和from选课表where学号='1101'23.从选课表中查询选修课程好为C02所有学生的成绩平均值并赋予“平均成绩24.”列名select avg(成绩)平均成绩from选课表where课程号='C02'25.从选课表中查询选修课程号C02且该门课程考试及格的学生的学号select学号from选课表where课程号='C02'and成绩>=6026.从选课表中查询所有无考试成绩的学生的学号和课程的课程号select学号,课程号from选课表where成绩is null27.从选课表中查询选修了课程号以C开头的学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'C%'28.从选课表中查询选修了课程号以C、D或E开头学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'[CDE]%'29.从选课表中查询选修了课程号中包含DB的学生的学号和课程号select学号,课程号from选课表where课程号LIKE'%DB%'30.从选课表中查询选修了课程的学生的学号select distinct学号from选课表where课程号is not null31.从选课表中查询选修了课程的学生的人数select count(distinct学号)总人数from选课表31.找出姓名以D开头的学生姓名和所有成绩select学生表.姓名,选课表.成绩from学生表join选课表on学生表.学号=选课表.学号where学生表.姓名LIKE'D%'32.查找的所有学生姓名与学号,结果按学号降序排序select 学号,姓名from学生表order BY学号DESC33.查找成绩介于80和90之间的学生姓名,结果按成绩和姓名升序排序select学生表.姓名from选课表join学生表on学生表.学号=选课表.学号where选课表.成绩between 80 and 90order BY选课表.成绩,学生表.姓名34.查找english系的所有学生姓名,结果按成绩和姓名升序排序select学生表.姓名,学生表.学号,选课表.成绩from选课表join学生表on学生表.学号=选课表.学号where学生表.系部='english'35.查找同时选修了C01及C02两门课程的学生姓名及学号select学生表.姓名,A.学号from选课表as A join选课表as B on A.学号=B.学号join学生表on学生表.学号=A.学号where A.课程号='C01'and B.课程号='C02'36.查找所有选修了课程的学生姓名及所在系别select distinct学生表.姓名,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号is not null37.查找成绩高于90分的学生姓名、学号及系别select学生表.姓名,学生表.学号,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.成绩>=9038.找出选修了C01课程的学生姓名select学生表.姓名from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号='C01'39.查询English系学生人数select count(*) English 系总人数from学生表where系部='English'40.分别查询各系的学生人数select系部,count(*)人数from学生表group by系部41.创建一个角色uus.CREATE ROLE uus;42.给uus授权SELECT,UPDATE,INSERT .GRANT SELECT,UPDATE,INSERTON StuTO uus43.增加一个登录,登录名为tp,密码为123,默认的数据库为stuEXEC sp_addlogin 'tp', '123', 'stu'44.将登录tp增加为test库的一个用户,并连接到test库。
数据库中SQL查询语句习题含答案
查询问题:设教学数据库Education 有三个关系: 学生关系S (SNO ,SNAME ,AGE ,SEX ,SDEPT );学习关系SC (SNO ,CNO ,GRADE );课程关系C (CNO ,CNAME ,CDEPT ,TNAME )(1)检索计算机系的全体学生的学号,姓名和性别;(2)检索学习课程号为C2的学生学号与姓名; (3)检索选修课程名为“DS ”的学生学号与姓名; (4)检索选修课程号为C2或C4的学生学号; (5)检索至少选修课程号为C2和C4的学生学号; (6)检索不学C2课的学生姓名和年龄; (7)检索学习全部课程的学生姓名;(8)查询所学课程包含学生S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别;SELECT Sno ,Sname ,Sex FROM SWHERE Sdept =’CS ’;(2)检索学习课程号为C2的学生学号与姓名;(3)检索选修课程名为“DS ”的学生学号与姓名 本查询涉及到学号、姓名和课程名三个属性,分别存放在S 和C 表中,但S 和C 表没有直接联系,必须通过SC 表建立它们二者的联系。
C → SC → S基本思路:(1)首先在C 表中找出“DS ”课程的课程号Cno ;(2)然后在SC 表中找出Cno 等于第一步给出的Cno 集合中的某个元素Cno ;(3)最后在S 关系中选出Sno 等于第二步中Sno 集合中某个元素的元组,取出Sno 和Sname 送入结果表列。
SELECT Sno ,Sname FROM SWHERE Sno IN (SELECT Sno FROM SCWHERE Cno IN (SELECT Cno FROM CWHERE Cname=‘DS ’));(4)检索选修课程号为C2或C4的学生学号;SELECT Sno FROM SCWHERE Cno=‘C2’ OR Cno=‘C4’;(5)检索至少选修课程号为C2和C4的学生学号; SELECT SnoFROM SC X ,SC YWHERE = AND =‘C2’ AND =‘C4’ ;(6)检索不学C2课的学生姓名和年龄;(7)检索学习全部课程的学生姓名;在表S 中找学生,要求这个学生学了全部课程。
sql查询题目及答案
数据库中有如下三个表:学生表(学号id,姓名name,性别sex,系部depart,年龄age)8个学生记录选课表(学号id,课程号cid,成绩grade) 12门课程课程表(课程号cid,课程名cname,学分Ccredit) 6门课程学生-课程模式 S-T :学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)1.从学生表中查询所有同学的所有信息select*from学生表2.从学生表中查询所有学生的信息,并分别赋予一个别名select学号as xuehao,姓名as xingming,性别as xingbie,系部as xibu,年龄as nianling from学生表3.从学生表中查询姓名是Allen的学生的信息select*from学生表where姓名='Allen'4.从学生表中查询学号在1101到1199之间的所有学生的信息select*from学生表where学号between 1101 and 11995.从学生表中查询年龄小于18和大于20的所有学生的学号和姓名select学号,姓名from学生表where年龄<18 or年龄>206.从学生表中查询计算机系年龄小于20的所有学生的信息select*from学生表where系部='computer'and年龄<207.从学生表中查询姓名以A开头的学生的信息select*from学生表where姓名LIKE'A%'8.从学生表中查询姓名的第三个字符是A的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'__A%'9.从学生表中查询姓名中包含“llen”的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'10.从学生表中查询姓名中包含“llen”且姓名只有5个字符的学生的学号和姓名select学号,姓名from学生表where姓名LIKE'%llen%'and len(姓名)=511.从学生表中查询有年龄信息的学生的学号和姓名select学号,姓名from学生表where年龄is not null12.从学生表中查询最大年龄和最小年龄select max(年龄)最大年龄,min(年龄)最小年龄from学生表13.从学生表中查询所有学生的平均年龄select avg(年龄)平均年龄from学生表14.从学生表中查询学校所有系的名字select distinct系部from学生表15.从学生表中查询学校共有多少个系select count(distinct系部)系部总和from学生表16.从选课表中查询所有学生的选课情况select distinct课程号from选课表17.从选课表中查询选修课程号为C01课程的学生的学号select学号from选课表where课程号='C01'18.从选课表中查询所有没有选C02课程的学生的学号select distinct学号from选课表where课程号!='C02'19.从选课表中查询有选修C01或C02课程的学生的学号select distinct学号from选课表where课程号='C01' or 课程号='C02'20.从选课表中查询学号为1101的学生的选课情况select课程号from选课表where学号='1101'21.从选课表中查询所有选课信息,即学号、课程号、成绩,并给成绩加8分select学号,课程号,成绩=成绩+8 from选课表22.从选课表中查询学号为1101的学生的所有选修课程成绩的总和select sum(成绩)成绩总和from选课表where学号='1101'23.从选课表中查询选修课程好为C02所有学生的成绩平均值并赋予“平均成绩24.”列名select avg(成绩)平均成绩from选课表where课程号='C02'25.从选课表中查询选修课程号C02且该门课程考试及格的学生的学号select学号from选课表where课程号='C02'and成绩>=6026.从选课表中查询所有无考试成绩的学生的学号和课程的课程号select学号,课程号from选课表where成绩is null27.从选课表中查询选修了课程号以C开头的学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'C%'28.从选课表中查询选修了课程号以C、D或E开头学生的学号和所选课程的课程号select学号,课程号from选课表where课程号LIKE'[CDE]%'29.从选课表中查询选修了课程号中包含DB的学生的学号和课程号select学号,课程号from选课表where课程号LIKE'%DB%'30.从选课表中查询选修了课程的学生的学号select distinct学号from选课表where课程号is not null31.从选课表中查询选修了课程的学生的人数select count(distinct学号)总人数from选课表31.找出姓名以D开头的学生姓名和所有成绩select学生表.姓名,选课表.成绩from学生表join选课表on学生表.学号=选课表.学号where学生表.姓名LIKE'D%'32.查找的所有学生姓名与学号,结果按学号降序排序select 学号,姓名from学生表order BY学号DESC33.查找成绩介于80和90之间的学生姓名,结果按成绩和姓名升序排序select学生表.姓名from选课表join学生表on学生表.学号=选课表.学号where选课表.成绩between 80 and 90order BY选课表.成绩,学生表.姓名34.查找english系的所有学生姓名,结果按成绩和姓名升序排序select学生表.姓名,学生表.学号,选课表.成绩from选课表join学生表on学生表.学号=选课表.学号where学生表.系部='english'35.查找同时选修了C01及C02两门课程的学生姓名及学号select学生表.姓名,A.学号from选课表as A join选课表as B on A.学号=B.学号join学生表on学生表.学号=A.学号where A.课程号='C01'and B.课程号='C02'36.查找所有选修了课程的学生姓名及所在系别select distinct学生表.姓名,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号is not null37.查找成绩高于90分的学生姓名、学号及系别select学生表.姓名,学生表.学号,学生表.系部from学生表join选课表on学生表.学号=选课表.学号where选课表.成绩>=9038.找出选修了C01课程的学生姓名select学生表.姓名from学生表join选课表on学生表.学号=选课表.学号where选课表.课程号='C01'39.查询English系学生人数select count(*) English 系总人数from学生表where系部='English'40.分别查询各系的学生人数select系部,count(*)人数from学生表group by系部41.创建一个角色uus.CREATE ROLE uus;42.给uus授权SELECT,UPDATE,INSERT .GRANT SELECT,UPDATE,INSERTON StuTO uus43.增加一个登录,登录名为tp,密码为123,默认的数据库为stuEXEC sp_addlogin 'tp', '123', 'stu'44.将登录tp增加为test库的一个用户,并连接到test库。
sql练习题及答案
sql练习题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。
在这篇文章中,我们将提供一些SQL练习题及其答案,旨在帮助读者加深对SQL的理解,并提供实践操作的机会。
练习题一:学生表考虑一个名为"Students"的学生表,包含以下字段:- 学生编号(StudentID)- 学生姓名(StudentName)- 学生年级(Grade)- 学生所在学校(School)请使用SQL语句创建并插入示例数据到"Students"表中。
答案:```sqlCREATE TABLE Students (StudentID INT,StudentName VARCHAR(50),Grade INT,School VARCHAR(50));INSERT INTO Students (StudentID, StudentName, Grade, School)VALUES (1, '张三', 11, '中学A'),(2, '李四', 10, '中学B'),(3, '王五', 10, '中学A'),(4, '赵六', 12, '中学C');```练习题二:查询学生表信息请编写SQL查询语句,查询出所有学生的姓名和所在学校。
答案:```sqlSELECT StudentName, School FROM Students;```练习题三:更新学生信息假设有一位新生加入学校,学生姓名为"李华",年级为11,学校为"中学B"。
请编写SQL语句将该学生信息插入到学生表中。
答案:```sqlINSERT INTO Students (StudentName, Grade, School)VALUES ('李华', 11, '中学B');```练习题四:删除学生信息假设"赵六"这位学生已经转学离开学校,需要从学生表中将其信息删除。
SQL语句练习及标准答案
SQL语句练习及标准答案SQL语句练习及答案————————————————————————————————作者:————————————————————————————————日期:sql语句练习题1数据库有如下四个表格:student(sno,sname,sage,ssex,sdpt) 学生表系表(dptno,dname)course(cno,cname, gradet, tno) 课程表sc(sno,cno,score) 成绩表teacher(tno,tname) 教师表要求:完成以下操作1.查询姓"欧阳"且全名为三个汉字的学生的姓名。
select sname from student where sname like “欧阳__?;2.查询名字中第2个字为"阳"字的学生的姓名和学号。
select sname,sno from student where sname like '_阳%';3.查询所有不姓刘的学生姓名。
select sname,sno,ssexfrom studentwhere sname not like “刘%”;4.查询db_design课程的课程号和学分。
select cno,ccredit from coursewhere cname like 'db_design'5.查询以"db_"开头,且倒数第3个字符为i的课程的详细情况。
select * from course where cname like 'db%i_ _';6.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
select sno,cno from sc where grade is null;7.查所有有成绩的学生学号和课程号。
select sno,cno from sc where grade is not null;8.查询计算机系年龄在20岁以下的学生姓名。
sql数据题(附答案)
二、有一个“学生-课程”数据库,数据库中包括三个表:(1) “学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在班(Sclass)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept) Sno 为关键字。
(2) “课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,可记为: Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。
(3) “学员成绩”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: SC(Sno,Cno,Grade)。
向每个表里至少插入二十条数据完成下列SQL语句:1、建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在班Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。
Unique3、删除Student表4、查询全体学生的学号与姓名5、查询全体学生的详细记录6、查所有参加过考试的学生的学号select distinct sno from sc7、查所有年龄在20岁以下的学生姓名及其年龄8、查考试成绩有不及格的学生的姓名9、查询年龄在20至23岁之间的学生的姓名、性别、和年龄10、查所有姓刘的学生的姓名、学号和性别select sname,sage,ssex from studentwhere sname like '刘%'11、查姓“欧阳”且全名为三个汉字的学生的姓名select sname from studentwhere sname like '欧阳_'12、查询参加了3号课程考试的学生的学号及其成绩,查询结果按分数的降序排列select sno,degree from scwhere cno=3 order by degree desc13、计算1号课程的学生平均成绩select avg(degree)as '1号课程平均成绩' from scwhere cno=114、查询参加1号课程考试的学生最高分数select max(degree)as '1号课程最高成绩' from scwhere cno=115、查询与“刘晨”在同一个班级学习的学生select sname,sclass from studentwhere sclass=(select sclass from student where sname='刘晨')16、将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在班:网站班;年龄:18岁)插入Student表中insert into student (sno,sname,ssex,sage,sclass)values(95020,'陈冬','男','18','网站班')17、将学生95001的年龄改为22岁Update student set sage=22 where sno=9500118、将网站班全体学生的成绩置零update sc set degree=0 where sno in(select sno from student where sclass=’网站班’)19、删除学号为95019的学生记录20、删除网站班所有学生的考试记录Delete from sc where sno in (select sno from student where class=’网站班’) 21:删除分数在60分以下的学生信息(从学生表里面删除)delete from student where sno in(select distinct sno from sc where degree<60) 22:计算所有课程的总分和平均分Select sum(degree),avg(degree)from sc23:查询所有课程里面的最高分和最低分Select max(degree),min(degree)from sc24:查询所有姓李的学生的平均分select avg(degree)from sc,studentwhere student.sno=sc.sno and student.sname like '李%'25:查询所有姓李的学生的‘数据库’的平均分select avg(degree)from sc,student ,coursewhere student.sno=sc.sno and student.sname like '李%'and o=o and ame='数据库'26:查询所有男生的考‘数据库’的平均分select avg(degree)from sc,student ,coursewhere student.sno=sc.sno and student.ssex=’男’ and o=o and ame='数据库'27:查询所有平均分在60分以下的课程名称Select ame from course,scWhere o=oGroup by o having avg(sc.degree)<6028:查询5班或者是6班的女生选修‘数据库’的这些人的‘数据库’的平均分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生选课数据库SQL语句练习题(详细分解答案)一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。
用SQL语句创建四个表并完成相关题目。
表1-1数据库的表结构表(一)Student含义属性名数据类型可否为空Sno Char(3) 否学号(主键)Sname Char(8) 否学生姓名Ssex Char(2) 否学生性别Sbirthday datetime 可学生出生年月Class Char(5) 可学生所在班级表(二)Course含义属性名数据类型可否为空Cno Char(5) 否课程号(主键)Cname Varchar(10) 否课程名称Tno Char(3) 否教师编号(外键)表(三)Score含义属性名数据类型可否为空Sno Char(3) 否学号(外键)Cno Char(5) 否课程号(外键)Degree Decimal(4,1) 可成绩主码:Sno+ Cno表(四)Teacher含义属性名数据类型可否为空Tno Char(3) 否教师编号(主键)Tname Char(4) 否教师姓名Tsex Char(2) 否教师性别Tbirthday datetime 可教师出生年月Prof Char(6) 可职称Depart Varchar(10) 否教师所在部门表1-2数据库中的数据表(一)StudentSno Sname Ssex Sbirthday class108 曾华男1977-09-01 95033105 匡明男1975-10-02 95031107 王丽女1976-01-23 95033101 李军男1976-02-20 95033109 王芳女1975-02-10 95031103 陆君男1974-06-03 95031 表(二)CourseCno Cname Tno3-105 计算机导论8253-245 操作系统8046-166 数字电路8569-888 高等数学831表(三)ScoreSno Cno Degree103 3-245 86105 3-245 75109 3-245 68103 3-105 92105 3-105 88109 3-105 76101 3-105 64107 3-105 91108 3-105 78101 6-166 85107 6-166 79108 6-166 81表(四)TeacherTno Tname Tsex Tbirthday Prof Depart804 李诚男1958-12-02 副教计算机系授856 张旭男1969-03-12 讲师电子工程系825 王萍女1972-05-05 助教计算机系831 刘冰女1977-08-14 助教电子工程系-- 1、查询Student表中的所有记录的Sname、Ssex和Class列。
select sname,ssex,class from student;-- 2、查询教师所有的单位即不重复的Depart列。
select distinct depart from Teacher;-- 3、查询Student表的所有记录。
select * from student;-- 4、查询Score表中成绩在60到80之间的所有记录。
select * from score where degree between 60 and 80;-- 5、查询Score表中成绩为85,86或88的记录。
select * from score where degree in(85,86,88);-- 6、查询Student表中“95031”班或性别为“女”的同学记录。
select * from student where class = '95031' or ssex='女';-- 7、以Class降序查询Student表的所有记录。
select * from student order by class desc;-- 8、以Cno升序、Degree降序查询Score表的所有记录。
select * from score order by cno,degree desc;-- 9、查询“95031”班的学生人数。
select class,count(*) as 学生人数from studentgroup by class having class='95031';-- 10、查询Score表中的最高分的学生学号和课程号。
(子查询或者排序)select sno,cno,degree,(select max(degree) from score) as maxscore--计算最高分from score where degree= (select max(degree) from score);-- 11、查询‘3-105’号课程的平均分。
select avg(degree) as avgdegreefrom score group by cno having cno='3-105';-- 12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select avg(degree) as avgdegree from score group by cno --按照课程分组取平均值having cno= (select cno from score group by cno havingcount(*)>=5)--至少有5名学生选修的课程and cno like '3%';--以3开头的课程-- 13、查询最低分大于70,最高分小于90的Sno列。
select sno,max(degree)as maxdegree,min(degree) asmindegree from Score group by snohaving max(degree)<90 and min(degree)>70-- 14、查询所有学生的Sname、Cno和Degree列。
select sname,cno,degree from studentjoin score on student.sno=score.sno;-- 15、查询所有学生的Sno、Cname和Degree列。
select sno,cname,degree from Scorejoin course on o=o;-- 16、查询所有学生的Sname、Cname和Degree列。
select sname,cname,degree from studentjoin score on student.sno=score.snojoin course on o=o;-- 17、查询“95033”班所选课程的平均分。
select avg(degree) as avgdegree from score where sno in(select sno from student where class='95033')18、假设使用如下命令建立了一个grade表:create table grade(low int(3),upp int(3),rank char(1)) insert into grade values(90,100,’A’)insert into grade values(80,89,’B’)insert into grade values(70,79,’C’)insert into grade values(60,69,’D’)insert into grade values(0,59,’E’)--现查询所有同学的Sno、Cno和rank列。
select sno,cno,(case when degree between 90 and 100 then 'A'when degree between 80 and 89 then 'B'when degree between 70 and 79 then 'C'when degree between 60 and 69 then 'D'when degree between 0 and 59 then 'E'END) as rank from score;-- 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select * from score where cno='3-105'and degree>(select degree from score where sno='109' and cno='3-105');-- 20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
select * from score where sno in--选学多门课程的同学中分数为非最高分成绩的同学的全记录(select sno from score group by sno having count(cno)>1--选学多门课程的同学intersect--取交集为选学多门课程的同学中分数为非最高分成绩的同学。
select distinct sno from score where sno not in( --分数为非最高分成绩的同学select sno from score where degree=(select max(degree)from score)))--分数最高成绩的同学-- 21、查询score中选学多门课程的同学中分数为非同课程最高分成绩的记录。
方法1:select * from score where sno in--选学多门课程的同学中分数为非同课程最高分成绩的同学的全记录(select sno from score group by sno having count(cno)>1--选学多门课程的同学intersect--取交集为选学多门课程的同学中分数为非同课程最高分成绩的同学。
select distinct sno from score where sno not in(--非同课程分数最高成绩的同学select distinct sno from score where degree in (--同课程分数最高成绩的同学select max(degree)from score group by cno)))--同课程分数最高成绩方法2:select * from score where sno in--选学多门课程的同学中分数为非同课程最高分成绩的同学的全记录(select sno from score group by sno having count(cno)>1-- 选学多门课程的同学intersect -- 取交集为选学多门课程的同学中分数为同课程非最高分成绩的同学select distinct sno from score where sno not in -- 选出非同课程最高分成绩的同学(select distinct sno from score as s1where degree=(select max(degree) from score as s2 where o=o group by cno)));-- 使用关联子查询选出同课程最高分成绩的同学-- 22、查询1975年之后出生的学生的所学课程以及成绩。