数据库第三章部分习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2 对于教学数据库的三个基本表

S(S#,SNAME,AGE,SEX)

SC(S#,C#,GRADE)

C(C#,CNAME,TEACHER)

试用SQL的查询语句表达下列查询:

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

select s#,sname from S

where age<17 and sex=F;

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

select c#,cname from C

where c# in (select distinct c#

from SC

where s# in (select s# from S where sex=M)) 3.2.3检索男生所学课程的任课老师的工号和姓名

select t#,tname from T

where t# in(select distinct t#

from C

where c# in(select distinct c#

from SC

where s# in(select s#

from S

where sex=1)));

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

select s#

from SC

group by s#

having count(c#)>=2;

3.2.5检索至少有学号为S2和S4所学的课程和课程名

select c#,cname

from C

where c# in((select c#

from sc where s#='S2')

intersect

(select c# from sc where s#='S4') );

3.2.6检索‘WANG’同学不学的课程号

select c# from c

except

(select distinct c#

from sc

where s# =(select s# from s where sname='WANG'));

3.2.7检索全部学生都选修的课程号和课程名

select c#,cname

from c

where not exists(select s#

from s

where c.c# not in (select c# from sc where sc.s#=s.s# ));

3.2.8检索选修课程包含'LIU'老师所授课程的全部课程的学生的学号和姓名select s#,sname

from s

where not exists((select c#

from c

where t#=(select t#

from t

where tname='LIU')) except(select c# from sc where

sc.s#=s.s#) );

3.4 设有两个基本表R (A ,B ,C )和S (A ,B ,C ),试用SQL 查询语句表达下列

关系代数表达式:

① R ∪S ② R ∩S ③ R -S ④ R ×S ⑤πA,B

πB,C (S )

⑥ π1,6(σ3=4(R ×S ) ⑦π1,2,3( S ) ⑧ R ÷πC (S ) 解:① (SELECT * FROM R)

UNION

(SELECT * FROM S);

② (SELECT * FROM R)

INTERSECT

(SELECT * FROM S);

③ (SELECT * FROM R)

MINUS

(SELECT * FROM S);

④ SELECT *

FROM R, S ;

⑤ SELECT R.A, R.B, S.C

FROM R, S

WHERE R.B=S.B ;

⑥ SELECT R.A, S.C

FROM R, S

WHERE R.C=S.A ;

⑦ SELECT R.* (R.*表示R 中全部属性)

FROM R, S

WHERE R.C=S.C ;

⑧ R ÷πC (S )的元组表达式如下:

{ t |(∃u )(∀v )(∃w )(R (u )∧ S (v )∧ R (w )∧ w[1]=u[1] ∧

w[2]=u[2] ∧ w[3]=v[3] ∧ t[1]=u[1] ∧ t[2]=u[2])}

据此,可写出SELECT 语句:

SELECT A, B

FROM R RX

WHERE NOT EXISTS

( SELECT *

FROM S

WHERE NOT EXISTS

( SELECT *

FROM R RY

WHERE RY.A=RX.A AND RY.B=RX.B AND RY.C=S.C));

3.6 试叙述SQL语言的关系代数特点和元组演算特点。

答:SQL的关系代数特点如下:

①有关系代数运算的并、交、差、自然联接等运算符;

②FROM子句体现了笛卡尔积操作,WHERE子句体现了选择操作,SELECT子

句体现了投影操作。

SQL的元组演算特点如下:

①FROM子句中的基本表名应视为“元组变量”,属性名应视为“元组分量”;

②有存在量词EXISTS符号。

3.12 试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C的更新操作:

①往关系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 TEACHER

FROM (SELECT TEACHER, C.C#, AVG(GRADE)

FROM S, SC

WHERE SC.C#=C.C#

GROUP BY TEACHER, C.C#)

AS RESULT(TEACHER, C#, AVG_GRADE) AS X

WHERE 80<=ALL(SELECT AVG_GRADE

FROM RESULT AS Y

WHERE Y.TEACHER=X.TEACHER);

③ DELETE FROM SC

WHERE GRADE IS NULL;

④ DELETE FROM SC

相关文档
最新文档