SQL 语言章节练习答案一、设有如下关系模式: student(SNO, SNAME , SEX ,BIRTHDAY, CLASS) teacher(TNO,TNAME,SEX,BIRTHDAY,PR OF,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 , FROM teacher , course WHERE = and ='男' 7.查询最高分同学的学号,课程号和成绩;——(中) SELECT * FROM scoreWHERE 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 cnoFROM courseWHERE cname='数据库系统概论')10查询所有未讲课的教师的姓名和所在系别;——(难)S ELECT name, departFROM teacherWHERE NOT EXISTS(SELECT *FROM courseWHERE =)11.查询“计算机系”教师所教课程的成绩表;——(难)SELECT *FROM score , teacher , course WHERE ='计算机系'and =and =思路:涉及到三个表格,教师信息表,课程信息表,以及成绩表teacher ->计算机系教师教授的课程代码(teacher,course) =score-> 此课程的成绩表(course,score)=+ 限制条件 ='计算机系'缺一不可!!!!!!!!12.查询选修“5623”课程,且成绩高于“001”号同学成绩的所有同学的记录;——(难)SELECT *FROM student , scoreWHERE =and cno='5623'and degree>(SELECT degreeFROM scoreWHERE no='001'and cno='5623' )13.查询最低分大于70,最高分小于90的学生的学号;——(中)SELECT noFROM scoreGROUP BY noHAVING min(degree)>70and max(degree)<9014.查询成绩在60到100之间的所有记录;——(中)SELECT *FROM scoreWHERE degree BETWEEN 60 AND 10015.查询成绩比该课程平均成绩低的同学的成绩表;——(相关子查询)(难)SELECT *FROM score aWHERE degree <(SELECT avg(degree)FROM score bWHERE =group by)16.查询所有女教师和女同学的姓名、性别和生日;——(中)SELECT name, sex, birthdayFROM teacherWHERE sex='女'UNIONSELECT name, sex, birthdayFROM studentWHERE sex='女'17.查询“计算机系”和“无线电系”的教师的姓名和职称;——(中)SELECT name, profFROM teacherWHERE depart='计算机系' OR depart='无线电系’'18. 建立一个学生课程成绩视图V-SSC(NO, NAME, CNO, CNAME, DEGREE);CREATE VIEW V-SSCASSELECT ,, cno, cname, degreeFROM student,course,scoreWHERE = AND =19从视图V-SSC上查询平均成绩在80分以上的同学的NAME, CNAME 和DEGREE。
SELECT NAME, CNAME, DEGREEFROM V-SSCGROUP BY NOHAVING AVG(DEGREE)>80二、设有如下关系模式:——(中)图书关系B(图书编号B#,图书名T,作者A,出版社P);读者关系R(借书证号C#,读者名N,读者地址D);借阅关系L(C#,B#,借书日期E,还书标志BZ);BZ=NULL 表示未还;写出实现以下各题功能的SQL语句:1.查询“工业出版社”出版的图书名,用关系代数表达式描述关系查询,并写出查询语言。
))((''BPT工业出版社=∏σSelect Tfrom BWhere P = ’工业出版社’2.将书号为B5的图书的出版社改为“工业出版社”Update BSet P=’工业出版社’Where B# = ’B5’3.查询2007年以前借书的读者名字Select N , TFrom R , LWhere E <’2007’AND #=#4.将读者“孙祥”的借书信息从L表中删除。
Delete from L Where C# = ( Select C# From RWhere N=’孙祥’);三、设有关系模式:SB( SN , SNAME, CITY) 其中SB表示供应商,SN为供应商号,SNAME为供应商名字,CITY为供应商所在城市;PB(PN,COLOR为零件颜色,WEIGHT为零件重量;JB( JN, JNAME, JCITY)写出实现以下各题功能的SQL语句:1.取出所有工程的全部细节;——(易)SELECT *FROM JB2.取出所在城市为上海的所有工程的全部细节;——(易)SELECT *FROM JBWHERE JCITY='上海'3.取出重量最轻的零件代号;——(难)S ELECT PNFROM PBWHERE WEIGHT=(SELECT MIN(WEIGHT)FROM PB)4.取出为工程J01提供零件的供应商代号;——(易)SELECT SNFROM SPJBWHERE JN='J01'5.取出为工程J01提供零件P01的供应商代号;——(易)SELECT SNFROM SPJBWHERE JN='J01'AND PN='P01'6.取出由供应商0101提供零件的工程名称;——(易)SELECT JNAMEFROM JB,SPJBWHERE SN='0101'AND =7.取出供应商0101提供的零件的颜色;——(易)SELECT COLORFROM PB,SPJBWHERE SN='0101'AND =8.取出为工程J01或J02提供零件的供应商代号;——(中)SELECT SNFROM SPJBWHERE JN='J01' OR JN='J02'9.取出为工程J01提供黑色零件的供应商代号;——(易)S ELECT SNFROM SPJB,PBWHERE COLOR='黑色'AND JN='J01'AND =10.取出为所在城市为上海的工程提供零件的供应商代号;——(易)SELECT SNFROM SPJB,JBWHERE JCITY='上海'AND =11.取出为所在城市为上海或北京的工程提供黑色零件的供应商代号;——(中)SELECT SNFROM PB, JB, SPJBWHERE COLOR='黑色'AND JCITY IN ('上海','北京')AND =AND =涉及到城市,颜色,供应商,需要的表有三个PB, JB, SPJB(两个连接条件)+ 两个限制条件COLOR='黑色' + JCITY IN ('上海','北京')12.取出供应商与工程所在城市相同的供应商提供的零件代号;——(中)SELECT PNFROM SB, JB , SPJBWHERE =AND =AND =SB---SPJB-----JB13.取出上海的供应商提供给上海的任一工程的零件的代号;——(难)SELECT PNFROM SB, SPJB, JBWHERE ='上海'AND ='上海'AND =AND =多表连接选择条件 = 连接条件 + 限制条件14.取出上海供应商不提供任何零件的工程的代号;——(难)SELECT JNFROM SPJB WHERE JN NOT IN(SELECTFROM SB,SPJBWHERE = AND ='上海')!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!取出上海供应商提供的零件的工程代号,用NotIn15.取出这样一些供应商代号,它们能够提供至少一种由黑色零件的供应商提供的零件;——(难)SELECTFROM SB,SPJBWHERE IN(SELECTFROM SPJB,PBWHERE = AND ='黑色')先取出黑色零件的代码,再用集合IN16.取出由供应商0101提供零件的工程的代号;——(易)SELECT JNFROM SPJBWHERE SN='0101'。