首页 > 试题广场 >

设有三个关系:S(S#,SNAME,AGE,SEX),SC(

[问答题]
设有三个关系:S(S#,SNAME,AGE,SEX),SC(S#,C#,GRADE),C(C#,CNAME,TEACHER),试用SQL语言完成下列查询语句:
(1)检索LIU老师所授课程的课程号、课程名。
(2)检索年龄大于23岁的男学生的学号与姓名。
(3) 检索学号为’S1’学生所学课程的课程名与任课教师名。
(4)检索至少选修LIU老师所授课程中一门课的女学生姓名。
(5)检索WANG同学不学的课程的课程号。
(6)检索至少选修两门课程的学生学号。
*(7)检索全部学生都选修的课程的课程号与课程名。
*(8)检索选修课程包含LIU老师所授课程的学生学号。
select c#,CNAME from C where TEACHER like 'LIU%'
发表于 2018-09-21 09:13:48 回复(0)

(1)

Select C#,CNAME

From C

Where TEACHER=’LIU%’;


(2)

Select S#,SNAME

From S

Where AGE>23 and SEX=’男’;


(3)

Select CNAME,TEACHER

From SC,C

Where SC.C#=C.C# and S# =’S1’;


(4)

Select SNAME

From S,SC,C

Where S.S#=SC.S# and SC.C#=C.C# and TEACHER=’LIU%’and SEX=’女’;


(5)

(Select C#

from C

where C# not in

(select C#

From S,SC

Where S.S#=SC.S# and SNAME=’WANG%’);


(6)

Select S#

From SC

Group by S# having count(*)>=2;


*(7)

[解法1]  select SC.C#,CNAME

From S,SC,C

Where S.S#=SC.S# and SC.C#=C.C#

Group by SC.C#,CNAME having count(*)=

(select count(*) from S);
[解法2] 用p表示谓词:学生y选修了课程x,上述题意可形式化表示如下。

意即:没有一个学生y是不选修课程x。
Select C#, CNAME
From C
Where not exists
( select *
From S
Where not exists
( select *
From SC
Where S#=S.S# and C#=C.C# ));
*(8)
查询学号为x的学生,对任一课程y,只要老师’LIU’讲授了课程y,则学生x也选修了课程y。
假设:若用p表示谓词“老师’LIU’讲授了课程y”,用q表示谓词“学生x选修了课程y”,则上述题意可形式化表示如下:

意即:不存在这样的课程y,老师’LIU’讲授了课程y,而学生x没有选修课程y。

Select S#

From SC SCX

Where not exists

( select *

From C CY

Where TEACHER=’LIU’and not exists

( select *

From SC SCZ

Where CY.C#=SCZ.C# and SCZ.S#=SCX.S# ));

发表于 2017-05-16 01:20:41 回复(0)