SQL语言章节练习答案
- 格式:doc
- 大小:55.50 KB
- 文档页数:5
SQL语言章节练习答案 一、设有如下关系模式: student(SNO, SNAME , SEX ,BIRTHDAY, CLASS) teacher(TNO,TNAME,SEX,BIRTHDAY,PROF,DEPART) PROF为职称,DEPART为系别 course(CNO, CNAME, TNO) score(SNO, CNO, DEGREE) DEGREE 为成绩 写出实现以下各题功能的SQL语句: 1.查询至少有2名男生的班号;——(难) SELECT CLASS FROM student WHERE SEX='男' GROUP BY CLASS HAVING COUNT(*)>=2; Having语句用来对结果集进行附加筛选,通常与group by语句一起使用。 ************************************************************* 2.查询不姓“王”的同学记录;——(易) SELECT * FROM student WHERE NAME NOT LIKE '王%' 3.查询每个学生的姓名和年龄;——(难) SELECT NAME,2007-year(BIRTHDAY) FROM student 4.查询学生中最大和最小的birthday日期值;——(中) SELECT MAX(BIRTHDAY), MIN(BIRTHDAY) FROM student 5.查询学生表的全部记录并按班号和年龄从大到小的顺序;——(中) SELECT * FROM student ORDER BY CLASS,BIRTHDAY DESC 6.查询男教师及其所上的课程;——(中) SELECT teacher.name, course.cname FROM teacher , course WHERE teacher.no=course.tno and teacher.sex='男' 7.查询最高分同学的学号,课程号和成绩;——(中) SELECT * FROM score WHERE degree= ( SELECT max(degree)
FROM score ) 满足嵌套子查询的条件(最后投影的属性列可以在一个表格中给出) **************************************88 8.查询和“李军”同性别并同班的所有同学的姓名;——(中) SELECT NAME FROM student WHERE sex= ( SELECT sex FROM student WHERE name='李军' ) and class= ( SELECT class FROM student WHERE name='李军' ) 要习惯用多重条件的复合运算来做题 9.查询选修“数据库系统概论”课程的男同学的成绩表;——(中)
SELECT * FROM score WHERE no IN ( SELECT no FROM student WHERE sex='男') and cno= ( SELECT cno FROM course WHERE cname='数据库系统概论' ) 10查询所有未讲课的教师的姓名和所在系别;——(难) SELECT name, depart FROM teacher WHERE NOT EXISTS (SELECT * FROM course WHERE course.tno=teacher.no ) 11.查询“计算机系”教师所教课程的成绩表;——(难) SELECT * FROM score , teacher , course WHERE teacher.depart='计算机系' and teacher.no=course.tno and course.cno=score.cno 思路: 涉及到三个表格,教师信息表,课程信息表,以及成绩表 teacher ->计算机系教师教授的课程代码 (teacher,course) teacher.no=course.tno score-> 此课程的成绩表 (course,score)course.cno=score.cno + 限制条件 teacher.depart='计算机系' 缺一不可!!!!!!!! 12.查询选修“5623”课程,且成绩高于“001”号同学成绩的所有同学的记录;——(难) SELECT * FROM student , score WHERE student.no=score.no and cno='5623' and degree> ( SELECT degree FROM score WHERE no='001' and cno='5623' ) 13.查询最低分大于70,最高分小于90的学生的学号;——(中)
SELECT no FROM score GROUP BY no HAVING min(degree)>70 and max(degree)<90 14.查询成绩在60到100之间的所有记录;——(中)
SELECT * FROM score WHERE degree BETWEEN 60 AND 100 15.查询成绩比该课程平均成绩低的同学的成绩表;——(相关子查询)(难)
SELECT * FROM score a WHERE degree < ( SELECT avg(degree) FROM score b WHERE b.cno=a.cno group by b.cno ) 16.查询所有女教师和女同学的姓名、性别和生日;——(中) SELECT name, sex, birthday FROM teacher WHERE sex='女' UNION SELECT name, sex, birthday FROM student WHERE sex='女' 17.查询“计算机系”和“无线电系”的教师的姓名和职称;——(中) SELECT name, prof FROM teacher WHERE depart='计算机系' OR depart='无线电系’' 18. 建立一个学生课程成绩视图V-SSC(NO, NAME, CNO, CNAME, DEGREE); CREATE VIEW V-SSC AS SELECT student.no,student.name, cno, cname, degree FROM student,course,score WHERE student.no=score.no AND course.cno=score.cno
19从视图V-SSC上查询平均成绩在80分以上的同学的NAME, CNAME 和DEGREE。 SELECT NAME, CNAME, DEGREE FROM V-SSC GROUP BY NO HAVING AVG(DEGREE)>80
二、设有如下关系模式: ——(中) 图书关系B(图书编号B#,图书名T,作者A,出版社P); 读者关系R(借书证号C#,读者名N,读者地址D); 借阅关系L(C#,B#,借书日期E,还书标志BZ);
BZ=NULL 表示未还; 写出实现以下各题功能的SQL语句: 1.查询“工业出版社”出版的图书名,用关系代数表达式描述关系查询,并 写出查询语言。
))((''BPT工业出版社 Select T from B Where P = ’工业出版社’ 2.将书号为B5的图书的出版社改为“工业出版社”
Update B Set P=’工业出版社’ Where B# = ’B5’ 3.查询2007年以前借书的读者名字
Select N , T From R , L Where E <’2007’ AND L.C#=R.C# 4.将读者“孙祥”的借书信息从L表中删除。 Delete from L Where C# = ( Select C# From R Where N=’ 孙祥’);
三、设有关系模式: SB( SN , SNAME, CITY) 其中SB表示供应商,SN为供应商号,SNAME为供应商名字,CITY为供应商所在城市; SN SNAME CITY 0101 李明 上海
0102 张丽 广州
0103 张小杰 深圳
0104 王刚 厦门
PB(PN, PNAME, COLOR, WEIGHT) 其中PB表示零件,PN为零件代号,PANME为零件名字,COLOR为零件颜色,WEIGHT为零件重量; PN PNAME COLOR WEIGHT P01 钉子 黑色 1 P02 螺丝 棕色 2 P03 轴承 灰色 5 JB( JN, JNAME, JCITY) 其中JB表示工程,JN为工程编号,JNAME为工程名字,CITY为工程所在城市; JN JNAME JCITY J01 加工 上海
J02 打磨 深圳
J03 设计 武汉
SPJB(SN, PN, JN, QTY)其中SPJB表示供应关系,QTY表示提供的零件数量。 SN PN JN QTY 0101 P01 J01 15 0103 P02 J02 20 0104 P03 J03 35 0101 J04 0103 P01 J05 30 写出实现以下各题功能的SQL语句: 1.取出所有工程的全部细节;——(易) SELECT * FROM JB 2.取出所在城市为上海的所有工程的全部细节;——(易) SELECT * FROM JB WHERE JCITY='上海' 3.取出重量最轻的零件代号;——(难) SELECT PN FROM PB WHERE WEIGHT= ( SELECT MIN(WEIGHT) FROM PB ) 4.取出为工程J01提供零件的供应商代号;——(易) SELECT SN FROM SPJB WHERE JN='J01' 5.取出为工程J01提供零件P01的供应商代号;——(易) SELECT SN FROM SPJB WHERE JN='J01' AND PN='P01' 6.取出由供应商0101提供零件的工程名称;——(易) SELECT JNAME FROM JB,SPJB WHERE SN='0101' AND SPJB.JN=JB.JN 7.取出供应商0101提供的零件的颜色;——(易) SELECT COLOR FROM PB,SPJB WHERE SN='0101' AND SPJB.PN=PB.PN 8.取出为工程J01或J02提供零件的供应商代号;——(中)
SELECT SN FROM SPJB WHERE JN='J01' OR JN='J02' 9.取出为工程J01提供黑色零件的供应商代号;——(易) SELECT SN FROM SPJB,PB WHERE COLOR='黑色' AND JN='J01' AND PB.PN=SPJB.PN 10.取出为所在城市为上海的工程提供零件的供应商代号;——(易) SELECT SN FROM SPJB,JB WHERE JCITY='上海'