在学生选课数据库中完成规定查询,并创建视图。
1. 查询线性代数不及格的同学的学号和姓名;
SQL语句为:SELECT名单$.学号,姓名
FROM名单$,学生选课信息和成绩$,课程$
WHERE名单$.学号=学生选课信息和成绩$.学号AND课程$.课号=学生选课信息和成绩$.课号AND
课程$.课程名='线性代数'
AND学生选课信息和成绩$.成绩<60;
执行后结果为:
2. 查询没有选课记录的同学的所有基本信息;
SQL语句为:SELECT*
FROM名单$
WHERENOTEXISTS
(SELECT*
FROM学生选课信息和成绩$
WHERE学号=名单$.学号);
执行后结果为:
3. 查询具有简介先修课的课程信息及对应的先修课名;
SQL语句为:SELECTFIRST.课号,SECOND.课程名
FROM课程$FIRST,课程$SECOND
WHEREFIRST.先修课号=SECOND.课号;
执行后结果如下:
4. 统计高等数学(1)的平均成绩; SQL语句为:SELECTAVG(成绩)
FROM学生选课信息和成绩$,课程$
WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)';
执行后结果如下:
5. 统计各门课的选课人数;
SQL语句为:SELECT课号,COUNT(学号)
FROM学生选课信息和成绩$
GROUPBY课号;
执行后结果为:
6. 查询选修5门课以上的学生的学号;
SQL语句为:SELECT学号
FROM学生选课信息和成绩$
GROUPBY学号
HAVINGCOUNT(*)>5;
执行后结果为:
7. 用你的学号查询和你一个班的同学的学号和姓名;
SQL语句为:SELECT学号,姓名
FROM名单$
WHERE班级IN
(SELECT班级
FROM名单$
WHERE学号='201000800145');
执行后结果如下:
8. 查询高等数学(1)成绩比你高出10分以上的同学的姓名和对应成绩;
SQL语句为:SELECT姓名,成绩
FROM名单$,学生选课信息和成绩$
WHERE名单$.学号=学生选课信息和成绩$.学号AND学生选课信息和成绩$.课号='82006010'
AND成绩>(
SELECT成绩+10
FROM学生选课信息和成绩$,课程$
WHERE学生选课信息和成绩$.课号=课程$.课号AND课程$.课程名='高等数学(1)'
AND学生选课信息和成绩$.学号='201000800145')
执行后结果为:
9. 找到每门课获得最高成绩的同学的学号、姓名、课名和成绩;选做。 只能做到如下结果
SQL语句为:SELECT课号,姓名,成绩
FROM名单$,学生选课信息和成绩$SCX
WHERE名单$.学号=SCX.学号ANDSCX.成绩IN
(SELECTMAX(成绩)
FROM学生选课信息和成绩$SCY
WHERESCX.课号=SCY.课号
GROUPBY课号)
执行后结果为:
10. 创建计算机系一班同学的视图V_CS_Stu,并指定可以更新;
SQL语句为:CREATEVIEWV_CS_Stu
AS
SELECT*
FROM名单$
WHERE系别='计算机'AND班级='1'
WITHCHECKOPTION;
执行后结果如下:
11. 基于V_CS_Stu,创建计算机系一班同学的选课视图,包括学号、姓名、课程名;
SQL语句为:CREATEVIEWV_CS_Stu_SC
AS
SELECTdbo.V_CS_Stu.学号,dbo.V_CS_Stu.姓名,dbo.课程$.课程名
FROM名单$,课程$
CROSSJOINdbo.V_CS_Stu 执行后结果为:
12. 用V_CS_Stu查询计算机系一班同学中名字包含“权”字的同学
SQL语句为:SELECT*
FROMV_CS_Stu
WHERE姓名LIKE'%权'OR姓名LIKE'权%'
执行后结果如下:
13. 用V_CS_Stu更新学号以2010008001打头计算机系一班同学的出生日期为1994-5-2;
SQL语句为:UPDATEV_CS_Stu
SET生日=1994-5-2
WHERE学号>'201000800099'AND学号<'201000800200'
执行后结果如图所示:
14. 创建学号及他所有课的平均成绩的视图;
SQL语句为:
CREATEVIEWS_G(学号,平均成绩) AS
SELECT学号,AVG(成绩)
FROM学生选课信息和成绩$
GROUPBY学号;
执行后结果为:
15. 创建所有女同学的视图,只包含姓名、年龄、班级及系别;
SQL语句为:CREATEVIEWGIRL
AS
SELECT姓名,生日,班级,系别
FROM名单$
WHERE性别='女';
执行后结果为:
16. 删除14中所创建的视图。
SQL语句为:DROPVIEWS_G;
执行后结果为: