北大“数据库原理”上机实践题目总结(16)
2. 往表中插入数据:
运动员((1001, 李明,男,计算机系)
1002,张三,男,数学系
1003, 李四,男,计算机系
1004, 王二,男,物理系
1005, 李娜,女,心理系
1006, 孙丽,女,数学系)
项目( x001, 男子五千米,一操场
x002,男子标枪,一操场
x003, 男子跳远,二操场
x004, 女子跳高,二操场
x005, 女子三千米,三操场)
积分( 1001, x001, 6
1002, x001, 4
1003, x001, 2
1004, x001, 0
1001, x003, 4
1002, x003, 6
1004, x003, 2
1005, x004, 6
1006, x004, 4)
3. 完成如下查询
athlete(a#,aname,sex,dno)
project(p#,pname,address)
grade(a#,p#,jf)
找出参加了张三所参加的所有项目的其他同学的姓名
SELECT ANAME
FROM W193_ATHLETE Y
WHERE NOT EXISTS
(SELECT * FROM W193_GRADE X
WHERE A# IN
(SELECT A# FROM W193_GRADE
WHERE A# IN (SELECT A# FROM W193_ATHLETE WHERE ANAME='张三' )
)
AND NOT EXISTS
(SELECT * FROM W193_GRADE WHERE A#=Y.A# AND P#=X.P# )
)
a) 求出目前总积分更高的系名,及其积分。
SELECT DNO,SUM(JF) AS JF
FROM W193_GRADE X,W193_ATHLETE Y
WHERE X.A#=Y.A#
GROUP BY DNO
HAVING SUM(JF)>=ALL
(SELECT SUM(JF)
FROM W193_GRADE X,W193_ATHLETE Y
WHERE X.A#=Y.A#
GROUP BY DNO
)
b) 找出在一操场进行比赛的各项目名称及其冠军的姓名
SELECT PNAME,ANAME
FROM W193_ATHLETE X, W193_GRADE Y, W193_PROJECT Z
WHERE X.A#=Y.A# AND Z.P#=Y.P# AND
ADDRESS='一操场' AND JF>=ALL(SELECT MAX(JF) FROM W193_GRADE
WHERE P# IN (SELECT P# FROM W193_PROJECT WHERE ADDRESS='一操场')
GROUP BY P#)
c) 找出参加了张三所参加的所有项目的其他同学的姓名
SELECT ANAME
FROM W193_ATHLETE Y
WHERE A# NOT IN (SELECT A# FROM W193_ATHLETE WHERE ANAME='张三')
AND NOT EXISTS
(SELECT * FROM W193_GRADE X
WHERE A# IN
(SELECT A# FROM W193_GRADE
WHERE A# IN (SELECT A# FROM W193_ATHLETE WHERE ANAME='张三' )
)
AND NOT EXISTS
(SELECT * FROM W193_GRADE WHERE A#=Y.A# AND P#=X.P# )
)