SQL的练习题,高手做下

有教学数据库,表结构如下:系(系编号,系名称,地址,电话)学生(学号,姓名,性别,生日,系编号)课程(课程号,课程名,学分,书号)选课(学号,课程号,成绩)教材(书号,书... 有教学数据库,表结构如下:
系(系编号,系名称,地址,电话)
学生(学号,姓名,性别,生日,系编号)
课程(课程号,课程名,学分,书号)
选课(学号,课程号,成绩)
教材(书号,书名,出版社,作者,价格)
请写出以上表格的建表语句,正确定义主键和外键。其中,选课表的成绩要求限制在0~100之间,学生表的性别只能用‘男’,‘女’表示。
编写查询语句:
1) 查询外语系的学生信息
2) 查询参加选课的学生人数
3) 查询参加选课的学生人次
4) 学校要查询不及格的学生明细,包括学号、姓名、课程名称、成绩
5) 查询价格高于教材平均价格的教材信息.
6) 求不及格,需要补考的人次
7) 查询名字不姓张且名字中含有‘红’或‘玉’的学生信息。
8) 查询清华大学出版社和东南大学出版社出版的图书信息
9) 查询学生姓名和总分
10) 对学生表定义一个只有女生数据的视图,并使用with check option约束。然后通过该视图分别添加男、女生数据,观察系统提示,并思考原因。
11) 求选课最多的学生信息
12) 定义视图,显示课程号,课程名,课程最高、最低、平均分。
13) 查询与李伟同选一门课的学生姓名,要求查询结果不显示李伟的名字。
14) 查询有参加选课的学生人数
15) 查询有学生参与选修学习的课程数。
16) 查询所有课程都通过的学生名单
17) 查询年龄在18-20之间的男生信息
18) 将1992年之后出生的学生信息查询出来,并插入到一个已有的表格Stu_1992(S_id,S_name,sex,birth,Dept_id)中。
19) 查询选修了英语课的学生姓名。
20) 查询书名中含有“英语”的书籍信息。
21) 查询书名中第二字是“语”的书籍信息。
22) 统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列。
23) 删除学生表中不参与选课的学生信息。
24) 查询既选修了英语,又选修了数学的学生学号。
25) 查询选修英语或者数学的学生学号。(注意:比较这两题的不同)
26) 检索至少选修两门课程的学生学号。
27) 定义视图,存放2012年内的学生学号、姓名、课程名、成绩。
28) 现对选课表定义触发器,限定每门课程的选课人数上限为10人,当选课人满后,后续学生再选课,则给出对应的提示。
展开
 我来答
伤之感
推荐于2016-12-01 · 超过30用户采纳过TA的回答
知道答主
回答量:267
采纳率:0%
帮助的人:70万
展开全部
答案:
1).select * from 学生 where 系编号 in (select 系编号 from 系 where 系名称='外语系')
2). select distinct 学号 into #kb01 from 选课 select cont(学号) from #kb01
3).select cont(学号) from 选课
4). select a.*,b.*,c.* from 选课 b join 学生 a on a.学号=b.学号 join 课程 c on b.课程号=c.课程号
where a.成绩<60
5). select a.书号,a.书名, a.*价格 from 教材 a where a.价格>(select avg(价格) from 教材)
6).select cont(学号) from 选课 where 成绩<60
7).select * from 学生 where substing(姓名,1,2)<>‘张’ and (姓名 like '%王%' or 姓名 like '%玉%')
8).select * from 教材 where 出版社 in ('清华大学出版社','东南大学出版社')
9).select a.* b.成绩 from 学生 a join (select 学号,sum(成绩) from 选课 group by 学号) b on a.学号=b.学号
13). select * from 学生 where 姓名<>'李伟' and 学号 in (select 学号 from 选课 where 课程号 in (select 课程号 from 选课 where 学号 in (select 学号 from 学生 where 姓名=‘刘伟’ )))
14).答案同第二题
15).select a.姓名,cont(b.课程) from 课程 b join 学生 a on a.学号=b.学号
16).select * from 学生 where 学号 not in (select 学号 from 选课 where 成绩<60)
17).select * from 学生 where 性别='男' and 生日 between '1993-01-01' and '1995-12-30'---这里有日期字段格式有关系
18).---------后面自己想,没有时间回答了
gxl5127
2013-06-21
知道答主
回答量:40
采纳率:0%
帮助的人:26.6万
展开全部
1)SELECT * FROM 学生 WHERE 系编号=xxx(该号码是外语系的号码)

2)SELECT COUNT(DISTANCT(学号)) FROM 选课

3)SELECT COUNT(*) FROM 选课

4)SELECT * FROM 选课 LEFT JOIN 学生 ON 选课.id=学生.id WHERE 成绩<60

5) SELECT * FROM 教材 WHERE 价格> (SELECT AVG(价格)FROM 教材)

6) SELECT COUNT(*) FROM 选课 LEFT JOIN 学生 ON 选课.id=学生.id WHERE 成绩<60

7) SELECT * FROM 学生 WHERE 姓名 like ‘%红%' and 姓名 like ‘%玉%' AND 姓名 NOT like ‘张%'

8) SELECT * FROM 教材 WHERE 出版社='清华大学出版社' and 出版社='东南大学出版社出版'

9) SELECT 学生,SUM(成绩) AS 总分 FROM 学生

10)

11)SELECT * FROM 学生 LEFT JOIN 选课 ON 学生.学号= 选课.学号 WHERE(SELECT MAX(选课号 FROM 选课 )

12)

13) (李伟选得课是xx课,其课程号是xxxx)
SELECT 姓名 FROM 学生 LEFT JOIN 选课 ON 学生.学号=选课.学号 WHERE 课程号='xxxx' AND 学生.姓名 NOT LIKE='李伟'

14)SELECT COUNT(学号) AS 人数 FROM 选课

15)SELECT COUNT(课程号) FROM 选课

16) SELECT 姓名 FROM 学生 LEFT JOIN 选课 ON 学生.学号=选课.学号 WHERE 选课.成绩》=60

17) SELECT * FROM 学生 WHERE 年龄>=19 AND 年龄《=20 AND 性别=’男‘

18)假定从1992年到现在是20岁
SELECT 学号,姓名,性别,生日,系编号 FROM 学生 WHERE 年龄<=20 (查询出来需要的信息)
INSERT INTO Stu_1992 (S_id,S_name,sex,birth,Dept_id) VALUES ('学号','姓名','性别','生日','系编号')

19)SELECT 姓名 FROM 学生 LEFT JOIN 选课 ON 学生.学号=课程.学号 WHERE 选课.学号=(SELECT 学号 FROM 课程 WHERE 课程名='英语')

20)SELECT * FROM 教材 WHERE 书名='%英语%’

21)SELECT * FROM 教材 WHERE 书名='_语%' (如果是知道书名是3个 则写成 _语_)

22)今天没时间了。改天有时间在接着弄哇。不一定全对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beiduc2z3
2013-06-18 · TA获得超过444个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:429万
展开全部
难都不难。可你要用15分换取28个题的答案么?
1分一题都没有...
追问
没财富值啊。。拜托咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式