1、数据库期末复习资料sql对于教学数据库的三个基本表 学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询: (1)检索LIU老师所授课程的课程号和课程名。(2)检索年龄大于23岁的男学生的学号和姓名。(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。(4)检索WANG同学不学的课程的课程号。 (5)检索至少选修两门课程的学生学号。(6)检索全部学生都选修的课程的课程号与课程名。(7)检索选修课程包含LIU老师所授课的学生学号。 设有两个基本表R(A,B,C)和S(D,E,F)
2、,试用SQL查询语句表达下列关系代数表达式: (1)A(R)(2)B=17(R) (3)RS(4)A,F(C=D(RS) 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式: (1)RS(2)RS(3)RS(4)A,B(R)B,C(S) 试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER) (1)统计有学生选修的课程门数。 (2)求选修C4课程的学生的平均年龄。 (3)求LIU老师所授课程的每门课程的学生平均成绩
3、。 (4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列。 (5)检索学号比WANG同学大,而年龄比他小的学生姓名。 (6)检索姓名以WANG打头的所有学生的姓名和年龄。 (7)在SC中检索成绩为空值的学生学号和课程号。 (8)求年龄大于女同学平均年龄的男学生姓名和年龄。 (9)求年龄大于所有女同学年龄的男学生姓名和年龄。 试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:(1)往基本表S中插入一个学生元组(S9,WU,18)。(2)在基本表S中检索每一门课程成绩都大于等于80分的学
4、生学号、姓名和性别, 并把检索到的值送往另一个已存在的基本表STUDENT(S,SANME,SEX)。(3)在基本表SC中删除尚无成绩的选课元组。(4)把WANG同学的学习选课和成绩全部删去。(5)把选修MATHS课不及格的成绩全改为空值。(6)把低于总平均成绩的女同学成绩提高5%。(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%, 若成绩大于75分时提高4%(用两个UPDATE语句实现)。 “仓库管理”关系模型有五个关系模式: 零件PART(P,PNAME,COLOR,WEIGHT) 项目PROJECT(J,JNAME,DATE) 供应商SUPPLIER(S,SNAME
5、,SADDR) 供应PP(J,P,TOTOAL) 采购PS(P,S,QUANTITY) (1)试用SQLDDL语句定义上述五个基本表,并说明主键和外键。(2)试将PROGECT、PP、PART三个基本表的自然联接定义为一个视图VIEW1,PART、PS、SUPPLIER 三个基本表的自然联接定义为一个视图VIEW2。(3)试在上述两个视图的基础上进行数据查询:1)检索上海的供应商所供应的零件的编号和名字。 2)检索项目J4所用零件的供应商编号和名字。 对于教学数据库中基本表SC,已建立下列视图: CREATEVIEWSGRADE(S,CNUM,AVGGRADE) ASSELECTS,COUNT
6、(C),AVG(GRADE) FROMSC GROUPBYS 试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。 (1) SELECT* FROMSGRADE(2) SELECTS,CNUM FROMSGRADE WHEREAVGGRADE80(3) SELECTS,AVGGRADE FROMSGRADE WHERECNUM(SELECTCNUM FROMSGRADE WHERESS4)(4) UPDATESGRADE SETCNUMCNUM1 WHERESS4(5) DELETEFROMSGRADE WHERECNUM4 对于教学数据库的三个基本表 学生 S(S#,
7、SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE) 课程 C(C#,CNAME,TEACHER) 试用SQL的查询语句表达下列查询: (1)检索LIU老师所授课程的课程号和课程名。 SELECT C#,CNAME FROM C WHERE TEACHER=LIU (2)检索年龄大于23岁的男学生的学号和姓名。 SELECT S#,SNAME FROM S WHERE (AGE23) AND (SEX=M) (3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。 SELECT SNAME FROM S WHERE SEX=F AND S# IN (SELECT S# FRO
8、M SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER=LIU) NOTICE:有多种写法,比如联接查询写法: SELECT SNAME FROM S,SC,C WHERE SEX=F AND SC.S#=S.S# AND SC.C#=C.C# AND TEACHER=LIU 但上一种写法更好一些。 (4)检索WANG同学不学的课程的课程号。 SELECT C# FROM C WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME=WANG) (5)检索至
9、少选修两门课程的学生学号。 SELECT DISTINCT X.SNO FROMSC X,SC Y WHERE X.SNO=Y.SNO AND X.CNOY.CNO Notice:对表SC进行自连接,X,Y是SC的两个别名。 (6)检索全部学生都选修的课程的课程号与课程名。 SELECT C#,CNAME FROM C WHERE NOT EXISTS (SELECT * FROM S WHERE S# NOT IN (SELECT * FROM SC WHERE SC.C#=C.C#) 要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学。 其中,“不选这门课的同学”可以表
10、示为: SELECT * FROM S WHERE S# NOT IN (SELECT * FROM SC WHERE SC.C#=C.C#) 或者 SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE S.S#=C.S# AND SC.C#=C.C# ) (7)检索选修课程包含LIU老师所授课的学生学号。 SELECT DISTINCT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER=LIU) 3.3设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达
11、下列关系代数表达式: (1)A(R)(2)B=17(R) (3)RS(4)A,F(C=D(RS) (1)SELECT A FROM R (2)SELECT * FROM R WHERE B=17 (3)SELECT A,B,C,D,E,F FROM R,S (4)SELECT A,F FROM R,S WHERE R.C=S.D 3.43.4设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式: (1)RS(2)RS(3)RS(4)A,B(R)B,C(S) (1)SELECT A,B,C FROM R UNION SELECT A,B,C FROM S (2
12、)SELECT A,B,C FROM R INTERSECT SELECT A,B,C FROM S (3)SELECT A,B,C FROM R WHERE NOT EXISTS (SELECT A,B,C FROM S WHERE R.A=S.A AND R.B=S.B AND R.C=S.C) (4)SELECT R.A,R.B,S.C FROM R,S WHERE R.B=S.B 3.5试叙述SQL语言的关系代数特点和元组演算特点。 (P61-62) 3.6试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:(1)统计有学生选修的课程门数。 SELECT COUNT(
13、DISTINCT C#) FROM SC (2)求选修C4课程的学生的平均年龄。 SELECT AVG(AGE) FROM S WHERE S# IN (SELECT S# FROM SC WHERE C#=C4) 或者, SELECT AVG(AGE) FROM S,SC WHERE S.S#=SC.S# AND C#=004 (3)求LIU老师所授课程的每门课程的学生平均成绩。 SELECT CNAME,AVG(GRADE) FROM SC ,C WHERE SC.C#=C.C# AND TEACHER=LIU GROUP BY C# (4)统计每门课程的学生选修人数(超过10人的课程才统
14、计)。要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列。 SELECT DISTINCT C#,COUNT(S#) FROM SC GROUP BY C# HAVING COUNT(S#)10 ORDER BY 2 DESC, C# ASC (5)检索学号比WANG同学大,而年龄比他小的学生姓名。 SELECT X.SNAME FROM S AS X, S AS Y WHERE Y.SNAME=WANG AND X.S#Y.S# AND X.AGE(SELECT AVG(AGE) FROM S AS Y WHERE Y.SEX=女) (9)求年龄大于所有女同学年
15、龄的男学生姓名和年龄。 SELECT SNAME,AGE FROM S AS X WHERE X.SEX=男 AND X.AGEALL (SELECT AGE FROM S AS Y WHERE Y.SEX=女) 3.7试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:(1)往基本表S中插入一个学生元组(S9,WU,18)。 INSERT INTO S(S#,SNAME,AGE) VALUES(59,WU,18) (2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别, 并把检索到的值送往另一个已存在的基本表STUDENT(S,SANME,SEX)。
16、 INSERT INTO STUDENT(S#,SNAME,SEX) SELECT S#,SNAME,SEX FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE GRADE80 AND S.S#=SC.S#) (3)在基本表SC中删除尚无成绩的选课元组。 DELETE FROM SC WHERE GRADE IS NULL (4)把WANG同学的学习选课和成绩全部删去。 DELETE FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME=WANG) (5)把选修MATHS课不及格的成绩全改为空值。 UPD
17、ATE SC SET GRADE=NULL WHERE GRADE60 AND C# IN (SELECT C# FROM C WHERE CNAME=MATHS) (6)把低于总平均成绩的女同学成绩提高5%。 UPDATE SC SET GRADE=GRADE*1.05 WHERE GRADE(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM S WHERE SEX=F) (7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%, 若成绩大于75分时提高4%(用两个UPDATE语句实现)。 UPDATE SC SET GR
18、ADE=GRADE*1.05 WHERE C#=C4 AND GRADE75 3.8在第1章例1.4中提到“仓库管理”关系模型有五个关系模式: 零件PART(P,PNAME,COLOR,WEIGHT) 项目PROJECT(J,JNAME,DATE) 供应商SUPPLIER(S,SNAME,SADDR) 供应PP(J,P,TOTOAL) 采购PS(P,S,QUANTITY) (1)试用SQLDDL语句定义上述五个基本表,并说明主键和外键。 CREATE TABLE PART (P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL, COLOR CHAR(10),
19、WEIGHT REAL, PRIMARY KEY(P#) CREATE TABLE PROJECT (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL, DATE DATE, PRIMARY KEY(J#) CREATE TABLE SUPLIER (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20), PRIMARY KEY(S#) CREATE TABLE P_P (J# CHAR(4),P# CHAR(4),TOTAL INTEGER, PRIMARY KEY(J#,P#), FOREIGN KE
20、Y(J#) REFERENCE PROJECT(J#), FOREIGN KEY(P#) REFERENCE PART(P#) CREATE TABLE P_S (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER, PRIMARY KEY(P#,S#), FOREIGN KEY(P#) REFERENCE PART(P#), FOREIGN KEY(S#) REFERENCE SUPLIER(S#) (2)试将PROGECT、PP、PART三个基本表的自然联接定义为一个视图VIEW1,PART、PS、SUPPLIER 三个基本表的自然联接定义为一个视图VIEW2。
21、CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL) AS SELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL FROM PROJECT,PART,P_P WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# CREATE VIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY) AS SELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIE
22、R.S#,SNAME,SADDR,QUANTITY FROM PART,P_S,SUPPLIER WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S# (3)试在上述两个视图的基础上进行数据查询:1)检索上海的供应商所供应的零件的编号和名字。 SELECT P#,PNAME FROM VIEW2 WHERE SADDR=SHANGHAI 2)检索项目J4所用零件的供应商编号和名字。 SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#=J4) 3.9对于教学数据库中基本表SC,
23、已建立下列视图: CREATEVIEWSGRADE(S,CNUM,AVGGRADE) ASSELECTS,COUNT(C),AVG(GRADE) FROMSC GROUPBYS 试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。 (1) SELECT* FROMSGRADE 允许 SELECT S#,COUNT(C#),AVG(GRADE) FROM SC GROUP BY S# (2) SELECTS,CNUM FROMSGRADE WHEREAVGGRADE80 允许 SELECT S#,COUNT(C#) FROM SC WHERE AVG(GRADE)80 (
24、3) SELECTS,AVGGRADE FROMSGRADE WHERECNUM(SELECTCNUM FROMSGRADE WHERESS4) 允许 SELECT S#,AVG(GRADE) FROM SC AS X WHERE COUNT(X.C#)(SELECT COUNT(Y.C#) FROM SC AS Y WHERE Y.S#=S4) GROUP BY S# (4) UPDATESGRADE SETCNUMCNUM1 WHERESS4 不允许 (5) DELETEFROMSGRADE WHERECNUM4 不允许 3.10预处理方式对于嵌入式SQL的实现有什么重要意义? 预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式; 然后再用宿主语言的编译程序把源程序编译成目标程序。这样,不用扩充宿主语言的编译程序, 就能处理SQL语句。 3.11 在宿主语言的程序中使用SQL语句有哪些规定?在宿主语言的程序中使用SLQ语句有以下规定: (1)在程序中要区分SQL语句与宿主语言语句 (2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定: 1)引用时,这些
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1