将课程的课程号和选修人数定义为一个视图
时间: 2023-12-10 11:40:10 浏览: 133
可以使用以下SQL语句定义一个视图:
```SQL
CREATE VIEW course_enrollment AS
SELECT course_id, COUNT(*) AS enrollment
FROM student_course
GROUP BY course_id;
```
这个视图将从student_course表中获取课程号和对应的选修人数,并按照课程号进行分组汇总。通过使用这个视图,我们可以方便地查询每门课程的选修人数,而不必每次都写复杂的SQL语句。例如,可以使用以下语句查询课程号为C001的选修人数:
```SQL
SELECT enrollment FROM course_enrollment WHERE course_id = 'C001';
```
相关问题
生成代码sql视图 使用企业管理器创建视图 : ① 在stu库中以“student”表为基础,建立MA系学生的视图V_MAStudent ② 建立一个所有IS系学生的班级号、学号以及其平均成绩的视图COMPUTE_AVG_GRADE; (2) 使用SQL语句创建视图: ① 建立一个每个学生的学号、姓名、选修的课号、课名及成绩的视图S_C_GRADE; ② 建立IS系选修了1号课程且成绩在90分以上的学生的视图V_IS_Score ③ 将各系学生人数,平均年龄定义为视图V_NUM_AVG。 (3) 查询以上所建的视图结果 (4) 查询选修了1号课程的学生 (5) 在MA系学生的视图中找出年龄小于20岁的学生 (6) 将数学系学生视图V_MAStudent中班级号为1,学号1的学生姓名改为“王武” (7)向数学系学生视图V_MAStudent中插入一个新的学生记录,其中班级号为1,学号为6,姓名为赵新,年龄为20岁 (8) 删除数学系学生视图V_MAStudent班级号为1,学号为6的记录 (9) 用企业管理器删除视图“V_MAStudent” (10) 用SQL语句删除视图S_C_GRADE
以下是生成代码 SQL 视图的示例:
(1) 使用企业管理器创建视图:
① 在 stu 库中以“student”表为基础,建立 MA 系学生的视图 V_MAStudent:
在企业管理器中找到 stu 库,右键点击“Views”,选择“New View...”打开视图设计器,然后按照以下步骤创建视图:
- 在“Add Table”对话框中选择 student 表,点击“Add”按钮添加该表。
- 在视图设计器的“Diagram”面板中选择 student 表,然后在其上方的“Criteria”面板中输入“department = 'MA'”筛选条件。
- 在视图设计器的“Properties”面板中输入视图名称“V_MAStudent”。
最终生成代码如下:
```sql
CREATE VIEW V_MAStudent AS
SELECT *
FROM student
WHERE department = 'MA';
```
② 建立一个所有 IS 系学生的班级号、学号以及其平均成绩的视图 COMPUTE_AVG_GRADE:
同样在视图设计器中按照以下步骤创建视图:
- 添加 student 表和 sc 表,并通过班级号和学号将它们连接起来。
- 在“Columns”面板中选择需要显示的列,包括班级号、学号和平均成绩。
- 在“Group By”面板中选择班级号和学号,以便计算平均成绩。
最终生成代码如下:
```sql
CREATE VIEW COMPUTE_AVG_GRADE AS
SELECT sc.class_id, sc.student_id, AVG(sc.score) AS avg_grade
FROM student s
INNER JOIN sc ON s.id = sc.student_id
WHERE s.department = 'IS'
GROUP BY sc.class_id, sc.student_id;
```
(2) 使用 SQL 语句创建视图:
① 建立一个每个学生的学号、姓名、选修的课号、课名及成绩的视图 S_C_GRADE:
```sql
CREATE VIEW S_C_GRADE AS
SELECT student.id AS student_id, student.name AS student_name, course.id AS course_id, course.name AS course_name, sc.score
FROM student
INNER JOIN sc ON student.id = sc.student_id
INNER JOIN course ON sc.course_id = course.id;
```
② 建立 IS 系选修了 1 号课程且成绩在 90 分以上的学生的视图 V_IS_Score:
```sql
CREATE VIEW V_IS_Score AS
SELECT student.id, student.name, sc.score
FROM student
INNER JOIN sc ON student.id = sc.student_id
WHERE student.department = 'IS' AND sc.course_id = 1 AND sc.score >= 90;
```
③ 将各系学生人数、平均年龄定义为视图 V_NUM_AVG:
```sql
CREATE VIEW V_NUM_AVG AS
SELECT department, COUNT(*) AS num_students, AVG(age) AS avg_age
FROM student
GROUP BY department;
```
(3) 查询以上所建的视图结果:
查询 V_MAStudent 视图:
```sql
SELECT * FROM V_MAStudent;
```
查询 COMPUTE_AVG_GRADE 视图:
```sql
SELECT * FROM COMPUTE_AVG_GRADE;
```
查询 S_C_GRADE 视图:
```sql
SELECT * FROM S_C_GRADE;
```
查询 V_IS_Score 视图:
```sql
SELECT * FROM V_IS_Score;
```
查询 V_NUM_AVG 视图:
```sql
SELECT * FROM V_NUM_AVG;
```
(4) 查询选修了 1 号课程的学生:
```sql
SELECT *
FROM student
WHERE id IN (
SELECT student_id
FROM sc
WHERE course_id = 1
);
```
(5) 在 MA 系学生的视图中找出年龄小于 20 岁的学生:
```sql
SELECT *
FROM V_MAStudent
WHERE age < 20;
```
(6) 将数学系学生视图 V_MAStudent 中班级号为 1,学号为 1 的学生姓名改为“王武”:
```sql
UPDATE V_MAStudent
SET name = '王武'
WHERE class_id = 1 AND id = 1;
```
(7) 向数学系学生视图 V_MAStudent 中插入一个新的学生记录,其中班级号为 1,学号为 6,姓名为赵新,年龄为 20 岁:
```sql
INSERT INTO V_MAStudent (class_id, id, name, age, gender, department)
VALUES (1, 6, '赵新', 20, '男', 'MA');
```
(8) 删除数学系学生视图 V_MAStudent 班级号为 1,学号为 6 的记录:
```sql
DELETE FROM V_MAStudent
WHERE class_id = 1 AND id = 6;
```
(9) 用企业管理器删除视图“V_MAStudent”:
在企业管理器中找到 V_MAStudent 视图,右键点击它,选择“Delete”删除该视图。
(10) 用 SQL 语句删除视图 S_C_GRADE:
```sql
DROP VIEW S_C_GRADE;
```
有学生一课程关系数据库,各关系表描述如下: 学生(学号,姓名,性别,年龄,系)课程(课程号,课程名,先修课,学分)选课(学号,课程号,成绩) 用 SQL 语句实现下列问题 1、向学生选修课程表中插入元组"学生S6选修课程号C2"。2、查询每个学生的学号、姓名及其所选课程的课程名: 3、检索姓"李"且倒数第2个字为"华"字的学生的姓名和学号: 4、删除选课成绩在60分以下的学生记录; 5、把"大学英语"课程成绩提高5%; 6、求出男同学的每一年龄组(超过4人)有多少人? 7、定义视图 S _ age ,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩; 8、查询每个学生的选课总学分,要求列出学生学号和总学分(说明:考试成绩超过60才能获得此课程的学分) 9、查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果; 10、查询既选修了"数据库"又选修了"操作系统"的学生学号及姓名。
1、向学生选修课程表中插入元组"学生S6选修课程号C2"。
```
INSERT INTO 选课 (学号, 课程号) VALUES ('S6', 'C2');
```
2、查询每个学生的学号、姓名及其所选课程的课程名:
```
SELECT 学生.学号, 学生.姓名, 课程.课程名
FROM 学生, 选课, 课程
WHERE 学生.学号 = 选课.学号 AND 选课.课程号 = 课程.课程号;
```
3、检索姓"李"且倒数第2个字为"华"字的学生的姓名和学号:
```
SELECT 学号, 姓名
FROM 学生
WHERE 姓名 LIKE '李%华_';
```
4、删除选课成绩在60分以下的学生记录:
```
DELETE FROM 选课
WHERE 成绩 < 60;
```
5、把"大学英语"课程成绩提高5%:
```
UPDATE 选课
SET 成绩 = 成绩 * 1.05
WHERE 课程号 = 'C1';
```
6、求出男同学的每一年龄组(超过4人)有多少人?
```
SELECT FLOOR(年龄 / 10) * 10 AS 年龄段, COUNT(*) AS 人数
FROM 学生
WHERE 性别 = '男'
GROUP BY 年龄段
HAVING COUNT(*) > 4;
```
7、定义视图 S_age ,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩;
```
CREATE VIEW S_age AS
SELECT 学号, COUNT(*) AS 选课门数, AVG(成绩) AS 平均成绩
FROM 选课
WHERE 成绩 IS NOT NULL
GROUP BY 学号;
```
8、查询每个学生的选课总学分,要求列出学生学号和总学分(说明:考试成绩超过60才能获得此课程的学分)
```
SELECT 选课.学号, SUM(课程.学分) AS 总学分
FROM 选课, 课程
WHERE 选课.课程号 = 课程.课程号 AND 成绩 > 60
GROUP BY 选课.学号;
```
9、查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果;
```
SELECT 学生.姓名, 课程.课程名, 选课.成绩
FROM 学生, 选课, 课程
WHERE 学生.学号 = 选课.学号 AND 选课.课程号 = 课程.课程号 AND 学生.系 = '计算机系' AND 选课.成绩 > 80
ORDER BY 选课.成绩 DESC;
```
10、查询既选修了"数据库"又选修了"操作系统"的学生学号及姓名。
```
SELECT 学生.学号, 学生.姓名
FROM 学生, 选课 AS s1, 选课 AS s2
WHERE 学生.学号 = s1.学号 AND 学生.学号 = s2.学号 AND s1.课程号 = 'C1' AND s2.课程号 = 'C3';
```
阅读全文