当前位置:文档之家› SQL语句

SQL语句

题型:SQL语句题目3.1:设教学数据库中有4个关系:教师关系 T(T#,TNAME,TITLE)课程关系 C(C#,CNAME,T#)学生关系 S(S#,SNAME,AGE,SEX)选课关系 SC(S#,C#,SCORE)试用SQL查询语句表示下列查询。

①检索年龄小于17岁女生的学号和姓名。

②检索男生所学课程的课程号和课程名。

③检索男生所学课程的任课老师的工号和姓名。

④检索至少选修两门课程的学生学号。

⑤检索至少有学号为S2和S4学生选修的课程的课程号。

⑥检索WANG同学不学的课程的课程号。

⑦检索全部学生都选修的课程的课程号与课程名。

⑧检索选修课程包含LIU老师所授全部课程的学生学号。

答案:①SELECT S#,SNAMEFROM SWHERE AGE<17 AND SEX=’F’;②SELECT C.C#,CNAMEFROM S,SC,CWHERE S.S#=SC.S# AND SC.C#=C.C# AND SEX=’M’;③SELECT T.T#’,TNAMEFROM S,SC,C,TWHERE S.S#=SC.S# AND SC.C#=C.C# AND C.T#=T.T# AND SEX=’M’;④SELECT DISTINCT X.S#FROM SC AS X,SC AS YWHERE X.S#=Y.S# AND X.C#!=Y.C#;⑤SELECT DISTINCT X.C#FROM SC AS X,SC AS YWHERE X.S#=S2 AND Y.S#=S4 AND X.C#=Y.C#;⑥SELECT C#FROM CWHERE NOT EXISTS(SELECT *FROM S,SCWHERE S.S#=SC.S# AND SC.C#=C.C# AND SNAME=’WANG’);⑦SELECT C#,CNAMEFROM CWHERE NOT EXISTS(SELECT *FROM SWHERE NOT EXISTS(SELECT *FROM SCWHERE S#=S.S# AND C#=C.C#));⑧SELECT DISTINCT S#FROM SC AS XWHERE NOT EXISTS(SELECT *FROM C,TWHERE C.T#=T.T# AND TNAME=’LIU’AND NOT EXISTS(SELECT *FROM SC AS YWHERE Y.S#=X.S# AND Y.C#=C.C#))题目:3.2 用CASE操作在下列更新语句中完成的SC表中的元组更新:①若课程号为C5则增加6分,若课程号为C8则增加10分,其他一律增加5分。

②若C4课程的成绩低于该门课的平均成绩,则提高5%,否则提高4%。

答案:① UPDATE SCSET SCORE=SCORE+CASEWHEN C#=’C5’THEN 6WHEN C#=’C8’THEN 10ELSE 5END;②UPDATE SCSET SCORE=SCORE*CASEWHEN SCORE<(SELECT AVG(SCORE)FROM SCWHERE C#=’C4’)THEN 1.05ELSE 1.04ENDWHERE C#=’C4’;题目3.3:设教学数据库中有4个关系:教师关系 T(T#,TNAME,TITLE)课程关系 C(C#,CNAME,T#)学生关系 S(S#,SNAME,AGE,SEX)选课关系 SC(S#,C#,SCORE)试用SQL查询语句表示下列更新操作:①往关系C中插入一个课程元组(‘C8‘,‘VC++’,‘T6’)。

②检查所授每门课程的平均成绩大于80分的教师姓名,并把检索到的值送到另一个已存在的表FACULTY(TNAME)中。

③在SC中删除尚无成绩的选课元组。

④把选修LIU老师的课程的女同学选课元虚全部删去。

⑤把MATHS课不及格的成绩全改为60分。

⑥把低于所有课程总平均成绩的女同学成绩提高5%。

⑦在表SC中修改C4课程的成绩,当成绩小于70分时提高5%,若成绩大于70分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操所得UPDATE语句实现)。

⑧在表SC中,当成绩低于全部课程的平均成绩时,提高5%。

答案:①insert into C values(’C8’,’VC++’,’T6’)②insert into FACULTY(TNAME)select distinct TNAMEfrom(select TNAME,C.C#,AVG(SCORE)from T,C,SCwhere T.T#=C.T# and C.C# = SC.C#group by C.C#,TNAME)as result(TNAME,C#,AVG_SCORE) as xwhere 80<=ALL(select AVG_SCOREfrom result as ywhere y.TNAME=x.TNAME)③delete from SC where SCORE is null④delete from SCwhere S# in(select S# from Swhere SEX='F')andC# in(select C#from Cwhere T# in(select T#from Twhere TNAME='LIU'))⑤update SC set SCORE = SCORE*1.05where SCORE<(select AVG(SCORE)from SC) and S# in (select S#from Swhere SEX='男')⑥update SCSet SCORE = SCORE * 1.05Where SCORE<(select AVG(SCORE)From SC)And S# in(select S#From SWhere SEX=’男’)⑦第一种写法:update SCSet SCORE=SCORE*CASEWhen SCORE>70 then ‘1.04’Else ‘1.05’ENDWhere C#=’C4’第二种写法:Update SCSet SCORE=SCORE*1.04Where SCORE>70 and C#=’C4’Update SCSet SCORE = SCORE*1.05Where SCORE<=70 and C#=’C4’⑧update SCset SCORE=SCORE*1.05where SCORE<(select AVG(SCORE),C#from SCgroup by C#)题目3.4:试用SQL查询语句表达下列对教学数据库中4个基本表T、C、S、SC的查询:教师关系T(T#,TNAME,TITLE)课程关系 C ( C#,,CNAME,T# )学生关系S ( S#,SNAME,AGE,SEX )选课关系SC ( S#,C#,SCORE )①统计有学生选修的课程门数。

②求选修C4课程的女学生的平均年龄。

③求LIU老师所授课程的每门课程的平均成绩。

④统计每门课程的学生选修人数(超过10人的课程才统计)。

要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

⑤检索学号比W ANG同学大,而年龄比他小的学生姓名。

⑥在表SC中检索成绩为空值的学生学号和课程号。

⑦检索姓名以L打头的所有学生的姓名和年龄。

⑧求年龄大于女同学平均年龄的男学生姓名和年龄。

⑨求年龄大于所有女同学年龄的男学生姓名和年龄。

答案:①SELECT COUNT(DISTINCT C#)FROM SC;②SELECT A VG(AGE)FROM S,SCWHERE S.S#=SC.S# AND C#=’C4’ AND SEX=’F’;③SELECT C.C#,A VG(SCORE)FROM SC,C,TWHERE SC.C#=C.C# AND C.T#=T.T# AND TNAME=’LIU’GROUP BY C.C#;④SELECT C#,COUNT(S#)FROM SCGROUP BY C#HA VING COUNT(*) > 10ORDER BY 2 DESC,1;⑤SELECT SNAMEFROM SWHERE S# > ALL(SELECT S#FROM SWHERE SNAME=’WANG’)AND AGE < ALL(SELECT AGEFROM SWHERE SNAME=’WANG’);⑥SELECT S#,C#FROM SCWHERE SCORE IS NULL;⑦SELECT SNAME,AGEFROM SWHERE SNAME LIKE ‘L%’;⑧SELECT SNAME,AGEFROM SWHERE SEX=’M’AND AGE > (SELECT A VG(AGE)FROM SWHERE SEX=’F’);⑨SELECT SNAME,AGEFROM SWHERE SEX=’M’AND AGE > ALL(SELECT AGEFROM SWHERE SEX=’F’);题目3.5:SQL2提供CASE表达式操作,这个操作类似于程序设计语言中的多分支选择结构,其语法如下:CASEWHEN 条件1 THEN 结果1WHEN 条件2 THEN 结果2…WHEN 条件n THEN 结果nELSE 结果mEND如果自上而下“条件i”首先被满足,那么这个操作返回值“结果i”(可以是某个表达式的值);若没有一个条件被满足,那么返回值“结果m”.在基本表SC (S#,C#,SCORE)中,SCORE值是百分制。

如果欲转换成“成绩等第”,则规则如下:若SCORE <40则等第为F,若40<=SCORE<60 则等第为C,若60<=SCORE <80则等第为B,若80<=SCORE 则等第为A。

试写出下列两个查询语句:1.检索每个学生的学习成绩,成绩显示时以等第(GRADE)形式出现。

2.检索每个等第的学生人次。

答案:1)SELECT S# ,C#,CASEWHEN SCORE>=80 THEN ‘A’WHEN SCORE>=60 THEN ‘B’WHEN SCORE>=40 THEN ‘C’ELSE ‘F’END AS SCOREFROM SC2)SELECT GRADE ,COUNT(S#)FROM(SELECT S#,C#,CASEWHEN SCORE>=80 THEN ‘A’ WHEN SCORE>=60 THEN ‘B’ WHEN SCORE>=40 THEN ‘C’ ELSE ‘F’ENDFROM SC) AS RESULT(S#,C#,GRADE) DROUP BY GRADE;。

相关主题