创建一个显示学生姓名、学号、选课表的课程编号、课程表的课程名、学分的视图,名称为v_SelectView。
时间: 2024-09-28 22:05:59 浏览: 41
创建视图(view)在数据库设计中是一个常用的操作,它允许我们从现有表中组合数据形成新的虚拟表,以便于查询。为了创建名为 `v_SelectView` 的视图,展示学生的姓名、学号、所选课程的编号(course_id)、课程名称(course_name)以及学分(credit),可以使用 SQL 查询语句。假设我们有两个相关的表,一个是 `Students` 表,包含 `student_id`, `name` 等字段;另一个是 `Courses` 表,包含 `course_id`, `course_name`, `credit` 等字段,以及一个关联表 `Enrollments` 描述学生选课情况,包含 `student_id`, `course_id` 字段。
下面是一个基本的 SQL 示例:
```sql
CREATE VIEW v_SelectView AS
SELECT s.name AS student_name, s.student_id, e.course_id, c.course_name, c.credit
FROM Students s
JOIN Enrollments e ON s.student_id = e.student_id
JOIN Courses c ON e.course_id = c.course_id;
```
这个视图将根据学生的学号连接 `Students` 和 `Enrollments` 表,然后进一步连接 `Courses` 表,以便获取所需的详细信息。
相关问题
创建一个合并选修表、课程表、学生表的试图,然后根据此视图查询每个学生的所得的总学分,列出学生姓名、学号与总学分。
假设有以下三个表:
选修表(enrollment):
| student_id | course_id |
|------------|-----------|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
| 3 | 103 |
| 3 | 104 |
课程表(course):
| course_id | course_name | credits |
|-----------|-------------|---------|
| 101 | Math | 3 |
| 102 | English | 4 |
| 103 | Science | 2 |
| 104 | History | 3 |
学生表(student):
| student_id | student_name |
|------------|--------------|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
可以创建以下合并视图:
```sql
CREATE VIEW student_enrollment AS
SELECT e.student_id, c.course_name, c.credits
FROM enrollment e
JOIN course c ON e.course_id = c.course_id;
```
然后可以使用以下查询来获取每个学生的总学分:
```sql
SELECT student_name, student_id, SUM(credits) as total_credits
FROM student_enrollment se
JOIN student s ON se.student_id = s.student_id
GROUP BY student_name, student_id;
```
结果如下:
| student_name | student_id | total_credits |
|--------------|------------|---------------|
| Alice | 1 | 7 |
| Bob | 2 | 3 |
| Charlie | 3 | 5 |
1. 在学生表上创建姓名列的前4个字符的降序索引sno_4_in 2. 在学生表上创建班级列的索引 3. 对课程表进行修改,增加学分列上的升序索引credit_in 4. 创建一个表t1,包含f1,f2,f3列,数据类型分别为int,char,varchar,在创建表时创建f1列的索引。 5. 删除我们4题的索引 6. 用自己的语言描述分区的功能。 7. 创建一张RANGE分区表,包含3个字段,表名及字段名自定义,第一个字段为整数类型,第二个字段为日期类型。以第一个字段为分区依据,分为4个分区。 8. 对tb_hash_blog表分区情况进行描述,分区类型是什么,分区依据是什么,分为几个区等等。 9. 创建一个学号,姓名,性别,年龄的视图view_s,按性别统计人数 10. 在学生成绩管理数据库中创建每门课程的平均成绩视图view_c_avg,查询成绩60以下的信息 11. 在学生成绩管理数据库中创建一个每个学生的平均成绩视图view_s_avg,从该视图中查询,平均成绩在85分以上的信息 12. 创建一个学号,姓名,性别,课程号,课程名称,成绩的视图view_sc1,统计每个学生修了多少们课程。 13. 通过视图view_s插入一名学生('2020001','gigi','m',22). 14. 创建课程表的视图view_c,利用该视图给每门课程加一个学分。 15. 利用视图view_c删除学分在5分以上的课程
1. 在学生表上创建姓名列的前4个字符的降序索引sno_4_in:
```
CREATE INDEX sno_4_in ON student (SUBSTRING(name, 1, 4)) DESC;
```
2. 在学生表上创建班级列的索引:
```
CREATE INDEX class_idx ON student (class);
```
3. 对课程表进行修改,增加学分列上的升序索引credit_in:
```
ALTER TABLE course ADD INDEX credit_in (credit ASC);
```
4. 创建一个表t1,包含f1,f2,f3列,数据类型分别为int,char,varchar,在创建表时创建f1列的索引:
```
CREATE TABLE t1 (
f1 INT,
f2 CHAR(10),
f3 VARCHAR(50),
INDEX f1_idx (f1)
);
```
5. 删除我们4题的索引:
```
DROP INDEX sno_4_in ON student;
DROP INDEX class_idx ON student;
ALTER TABLE course DROP INDEX credit_in;
DROP INDEX f1_idx ON t1;
```
6. 分区的功能可以将一个大表拆分成多个较小的表,以便更高效地管理数据,提高查询性能和可用性。分区将表按照某个规则分成多个子表,每个子表可以独立管理,查询时可以只查询特定的子表,从而提高查询效率。
7. 创建一张RANGE分区表,包含3个字段,表名及字段名自定义,第一个字段为整数类型,第二个字段为日期类型。以第一个字段为分区依据,分为4个分区:
```
CREATE TABLE partition_table (
id INT,
date_col DATE,
value VARCHAR(50),
PRIMARY KEY (id, date_col)
)
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (1000),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (3000),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
```
8. 对tb_hash_blog表分区情况进行描述,分区类型是什么,分区依据是什么,分为几个区等等:
分区类型为HASH分区,分区依据是文章ID(article_id),分为4个分区。
9. 创建一个学号,姓名,性别,年龄的视图view_s,按性别统计人数:
```
CREATE VIEW view_s AS
SELECT sno, name, gender, age
FROM student;
SELECT gender, COUNT(*) AS count
FROM view_s
GROUP BY gender;
```
10. 在学生成绩管理数据库中创建每门课程的平均成绩视图view_c_avg,查询成绩60以下的信息:
```
CREATE VIEW view_c_avg AS
SELECT course_id, AVG(score) AS avg_score
FROM score
GROUP BY course_id;
SELECT *
FROM score
WHERE score < 60;
```
11. 在学生成绩管理数据库中创建一个每个学生的平均成绩视图view_s_avg,从该视图中查询,平均成绩在85分以上的信息:
```
CREATE VIEW view_s_avg AS
SELECT sno, AVG(score) AS avg_score
FROM score
GROUP BY sno;
SELECT *
FROM view_s_avg
WHERE avg_score > 85;
```
12. 创建一个学号,姓名,性别,课程号,课程名称,成绩的视图view_sc1,统计每个学生修了多少们课程:
```
CREATE VIEW view_sc1 AS
SELECT student.sno, student.name, student.gender, score.course_id, course.name AS course_name, score.score
FROM student
JOIN score ON student.sno = score.sno
JOIN course ON score.course_id = course.course_id;
SELECT sno, COUNT(DISTINCT course_id) AS course_count
FROM view_sc1
GROUP BY sno;
```
13. 通过视图view_s插入一名学生('2020001','gigi','m',22):
```
INSERT INTO view_s (sno, name, gender, age)
VALUES ('2020001', 'gigi', 'm', 22);
```
14. 创建课程表的视图view_c,利用该视图给每门课程加一个学分:
```
CREATE VIEW view_c AS
SELECT course_id, name, credit
FROM course;
UPDATE view_c
SET credit = credit + 1;
```
15. 利用视图view_c删除学分在5分以上的课程:
```
DELETE FROM view_c
WHERE credit > 5;
```
阅读全文