学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 1 根据上面基本表的信息定义视图显示每门课的课名、选课人数、平均成绩 2 观察基本表数据变化时,视图中数据的变化。 3 利用视图,查询平均成绩最高的学生。
时间: 2023-10-02 08:06:52 浏览: 91
1. 定义视图显示每门课的课名、选课人数、平均成绩:
```
CREATE VIEW course_view AS
SELECT c.课名, COUNT(*) AS 选课人数, AVG(s.成绩) AS 平均成绩
FROM 学生 s, 课程 c, 选课 x
WHERE s.学号 = x.学号 AND c.课号 = x.课号
GROUP BY c.课名;
```
2. 观察基本表数据变化时,视图中数据的变化:
当基本表数据发生变化时,视图中的数据也会随之变化。例如,当一门课程的成绩被修改时,这门课程的平均成绩会随之改变,从而导致视图中的平均成绩也会发生变化。
3. 利用视图,查询平均成绩最高的学生:
```
SELECT s.学号, s.年龄, s.性别, s.系名, AVG(x.成绩) AS 平均成绩
FROM 学生 s, 选课 x, course_view v
WHERE s.学号 = x.学号 AND x.课号 = v.课号 AND v.平均成绩 = (SELECT MAX(平均成绩) FROM course_view)
GROUP BY s.学号, s.年龄, s.性别, s.系名;
```
上面的查询语句中,首先利用视图 course_view 获取每门课的平均成绩,并将其与选课表和学生表联合查询。然后使用子查询获取所有课程中平均成绩最高的值,最后进行分组操作得到平均成绩最高的学生信息。
相关问题
利用SQL Server Management Studio对象资源管理器建立学生信息数据库,并定义以下基本表: 学生(学号,年龄,性别,系号) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 定义主码、外码、和年龄、学分、学分的取值范围
好的,您想了解如何利用SQL Server Management Studio对象资源管理器建立学生信息数据库,并定义以下基本表:学生(学号,年龄,性别,系号)、课程(课号,课名,学分,学时)、选课(学号,课号,成绩),同时定义主码、外码、和年龄、学分、学分的取值范围。
下面是利用SQL Server Management Studio对象资源管理器建立学生信息数据库的步骤:
1. 打开SQL Server Management Studio,并通过连接器连接到服务器。
2. 在“对象资源管理器”窗口下,右击“数据库”文件夹,并选择“新建数据库”。
3. 输入数据库名称,并选择文件夹用于存储数据库文件。
4. 点击“选项”设置数据库参数,如数据文件增长方式、日志文件增长方式等。
5. 点击“确定”创建数据库。
下面是定义基本表的步骤:
1. 在“对象资源管理器”窗口下,右击数据库名称,并选择“新建查询”。
2. 输入如下SQL语句:
CREATE TABLE 学生 (
学号 INT PRIMARY KEY,
年龄 INT CHECK (年龄 > 0 AND 年龄 < 120),
性别 CHAR(1),
系号 INT REFERENCES 系(系号)
);
CREATE TABLE 课程 (
课号 INT PRIMARY KEY,
课名 VARCHAR(50) NOT NULL,
学分 DECIMAL(4,1) CHECK (学分 > 0 AND 学分 <= 10),
学时 INT CHECK (学时 > 0 AND 学时 <= 200)
);
CREATE TABLE 选课 (
学号 INT REFERENCES 学生(学号),
课号 INT REFERENCES 课程(课号),
成绩 DECIMAL(4,1) CHECK (成绩 >= 0 AND 成绩 <= 100),
CONSTRAINT PK_选课 PRIMARY KEY (学号, 课号)
);
3. 点击“执行”运行SQL语句,完成基本表的定义。
在上述SQL语句中,主码包括学生表的学号、课程表的课号和选课表的学号和课号。外码包括学生表的系号和选课表的学号和课号。年龄和学分的取值范围通过CHECK约束进行定义。
希望以上信息能够帮助到您。
学生(学号,姓名,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 建立学生表的insert触发器,若向学生表中插入一条记录,则自动向选课表中插入一行,令该生选一门选修人数最多的课。
触发器是一种特殊的存储过程,它会在特定的数据库操作(如插入、更新或删除)发生时自动执行。因此,我们可以创建一个触发器来实现向选课表中插入一行的功能。
具体步骤如下:
1. 创建一个名为trg_insert_student的触发器,它将在向学生表中插入一行时自动触发。
```sql
CREATE TRIGGER trg_insert_student
AFTER INSERT ON 学生
FOR EACH ROW
```
2. 在触发器中查询选修人数最多的课程,并将其插入到选课表中。
```sql
INSERT INTO 选课 (学号, 课号)
SELECT NEW.学号, 课程.课号
FROM 课程
WHERE 课程.课号 = (
SELECT 选课.课号
FROM 选课
GROUP BY 选课.课号
ORDER BY COUNT(*) DESC
LIMIT 1
);
```
完整的触发器代码如下:
```sql
CREATE TRIGGER trg_insert_student
AFTER INSERT ON 学生
FOR EACH ROW
BEGIN
INSERT INTO 选课 (学号, 课号)
SELECT NEW.学号, 课程.课号
FROM 课程
WHERE 课程.课号 = (
SELECT 选课.课号
FROM 选课
GROUP BY 选课.课号
ORDER BY COUNT(*) DESC
LIMIT 1
);
END;
```
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)