SQL的查询 考试题目求教 题目已写答案求判断!

以下题目对于会SQL的技术人员来说是小菜一碟 麻烦路过的帮忙看看 本人的逻辑思维的确转不过来 听了老师

说 能明白一些 但是有很多都不太明白!

程序题
在名称为教学库的数据库中包含有学生,课程和选课表,他们的定义如下
学生(学生号char(7),姓名char(6),性别char(2),专业char(10),年级int )
课程(课程号char(4), 课程名char(10), 课程学分int )
选课(学生号char(7),课程号char(4), 成绩int )

在名称为图书库中包含有图书,读者,借书三个表,他们的定义分别为
图书(总编辑char(5) ,书名char(10) ,作者char(10),出版单位char(10),单位 numeric(9,2))
读者(借书证号char(3),单位char(8),姓名char(8) ,职称char(10)
借书(借书证号char(3), 总编辑char(5),借书日期datetime)

程序题查询如下
1.对选修了课程号为c001的学生成绩提高10%
此题本人做的答案请检查:updata 选课表 set 成绩=成绩*1.1 where 课程号='c001'

2.查询没有学生选修的课程名。
此题本人做的答案请检查:select 课程名 from 课程 where 课程名 not exists(select * from 选课表

where 选课表.课程号=课程表.课程号)

3.统计各出版社图书的最高价,最低价及册数,并按册数降序排列
此题本人做的答案请检查:select 出版单位,max(单价),min(单价),count(*) AS 册数 from 图书

group by 出版单位 order by 册数 desc

4.查询每个学生选修的门数及平均成绩。
此题本人做的答案请检查:select AVG(成绩),姓名 from 学生,选课 where 学生.学生号=选课.学生号

group by 姓名

5.查询2003年以前借书的读者借书证号,姓名和单位。
此题本人做的答案请检查:select 借书证号,姓名,单位 from 读者 where 借书日期<=2003 and 读者.借书

证号=借书.借书证号

6.查询电子系没有借书的读者姓名
此题本人做的答案请检查: select 姓名,职称 from 读者 where 职称='电子系' and 借书证号 NOT exists

(select 借书证号 from 借书 where 读者.借书证号=借书.借书证号)
此题我一直有一个疑惑 我目前查询电子系没有借书的读者姓名 没有借书 也就是借书证号为空或NULL 那

么读者也有一个借书证号 借书也有一个借书证号 2个是相对应的, 但是我没用到借书表 只有了读者表的借

书证号 需要在where语句后写入:借书证号=借书.借书证号 这个条件吗?

7.查询出至少有两名学生所选修的全部课程。
此题我做的不怎么好:select 姓名 from 学生 where 课程名 in (select 课程名,count(*) as 课程数

group by 姓名 having count(*)>=2

8,翻译题
create procedure xxk4
(
@a char(7). @b char(4), @c int
)
as
begin
update 选课
set 成绩=@c
where 学号=@a and 课程号=@b
该语句的功能是: 我只知道第一句 就是创建存储过程名为XXK4 下面那些都不知道了。。汗。。

求达人求教 最好解释一下错了哪题 谢谢啊 辛苦啊 打了那么多字!!!!!!

你还有马甲。。。

第一个不对,更新的是学生的成绩,而不是c001得成绩
1.对选修了课程号为c001的学生成绩提高10%
此题本人做的答案请检查:updata 选课表 set 成绩=成绩*1.1 where 课程号='c001'

UPDATE 选课表 SET set 成绩=成绩*1.1 WHERE 学生号 IN (SELECT 学生号 FROM 选课表 WHERE 课程号='c001')

2.查询没有学生选修的课程名。
此题本人做的答案请检查:select 课程名 from 课程 where 课程名 not exists(select * from 选课表 where 选课表.课程号=课程表.课程号)
SELECT 课程名 from 课程 WHERE 课程号 NOT IN (SELECT DISTINCT 课程号 FROM 选课表)

3. correct
4.查询每个学生选修的门数及平均成绩。
此题本人做的答案请检查:select AVG(成绩),姓名 from 学生,选课 where 学生.学生号=选课.学生号 group by 姓名
SELECT COUNT(c.课程号), AVG(c.成绩)
FROM 学生 stu LEFT JOIN 选课 c ON stu.学生号 = c.学生号
GROUP BY stu.学生号

5.查询2003年以前借书的读者借书证号,姓名和单位。
此题本人做的答案请检查:select 借书证号,姓名,单位 from 读者 where 借书日期<=2003 and 读者.借书证号=借书.借书证号
SELECT 借书证号,姓名,单位 FROM 读者 WHERE IN (SELECT 借书证号 FROM 借书 WHERE 借书日期<=2003)

6.查询电子系没有借书的读者姓名
此题本人做的答案请检查: select 姓名,职称 from 读者 where 职称='电子系' and 借书证号 NOT exists(select 借书证号 from 借书 where 读者.借书证号=借书.借书证号)
此题我一直有一个疑惑 我目前查询电子系没有借书的读者姓名 没有借书 也就是借书证号为空或NULL 那么读者也有一个借书证号 借书也有一个借书证号 2个是相对应的,
但是我没用到借书表 只有了读者表的借书证号 需要在where语句后写入:借书证号=借书.借书证号 这个条件吗?
SELECT 姓名
FROM 读者 t
WHERE 单位 = '电子系' AND NOT EXISTS(SELECT 1 FROM 借书 WHERE 借书证号 = t.借书证号)

7.查询出至少有两名学生所选修的全部课程。
此题我做的不怎么好:select 姓名 from 学生 where 课程名 in (select 课程名,count(*) as 课程数 group by 姓名 having count(*)>=2
SELECT * FROM 课程 WHERE 课程号 IN (SELECT 课程号 FROM 选课 GROUP BY 课程号 HAVING COUNT(*) >=2)

8
@a, @b, @c是参数, 譬如@a = '123', @b = 'c001', @c = 90
然后begin后面是执行一个update操作,将参数对应起来就可以了。
真个存储过程对例子要做的就是
UPDATE 选课
set 成绩=90
where 学号= 123 and 课程号='c001'

明白了么
温馨提示:答案为网友推荐,仅供参考
相似回答