选课(学号,课程号,成绩) 主码为(学号,课程号)怎么写MySQL语句
时间: 2024-01-24 21:01:48 浏览: 24
可以使用以下的 MySQL 语句来创建一张名为“选课”的表,包含学号(s_id)、课程号(c_id)和成绩(score)三个字段,并将(学号,课程号)作为主键:
```sql
CREATE TABLE 选课 (
s_id VARCHAR(10),
c_id VARCHAR(10),
score FLOAT,
PRIMARY KEY (s_id, c_id)
);
```
该语句创建了一个包含三个字段的表,其中 s_id 和 c_id 都是 VARCHAR 类型的,score 是 FLOAT 类型的。PRIMARY KEY 指定了主键,其中 (s_id, c_id) 表示联合主键。
接下来,你可以使用 INSERT INTO 语句向该表中插入数据:
```sql
INSERT INTO 选课 (s_id, c_id, score) VALUES
('001', '1001', 90),
('001', '1002', 85),
('002', '1001', 78),
('002', '1003', 92),
('003', '1002', 88),
('003', '1003', 87);
```
这样就向表中插入了六条数据,分别表示三个学生选修了三门课程,并且获得了不同的成绩。
相关问题
MySQL查询所有同学的学号、姓名、选课数、总成绩
可以使用以下SQL语句查询所有同学的学号、姓名、选课数、总成绩:
```
SELECT student.id, student.name, COUNT(score.course_id) AS course_num, SUM(score.score) AS total_score
FROM student LEFT JOIN score ON student.id = score.student_id
GROUP BY student.id, student.name;
```
上述SQL语句中,使用了LEFT JOIN将学生表(student)和成绩表(score)连接起来,以便查询学生的选课数和总成绩。使用COUNT和SUM函数对选课数和总成绩进行统计,并使用GROUP BY对每个学生进行分组。
MYSQL 创建触发器,当更新某个同学选课成绩时,更新其平均成绩。注:学生表中有学号、课程号、平均成绩、选课成绩
假设你有一个名为 `students` 的表,其中包含学生的成绩信息,包括学生的学号(`student_id`)、课程号(`course_id`)、成绩(`score`)和平均成绩(`avg_score`)。现在你想要创建一个触发器,当更新某个同学的成绩时,自动更新其平均成绩。
首先,你需要创建一个 `BEFORE UPDATE` 触发器,以便在更新数据之前执行更新操作。以下是一个示例 SQL 语句:
```
CREATE TRIGGER update_avg_score
BEFORE UPDATE ON students
FOR EACH ROW
BEGIN
-- 更新学生的平均成绩
UPDATE students
SET avg_score = (SELECT AVG(score) FROM students WHERE student_id = NEW.student_id)
WHERE student_id = NEW.student_id;
END;
```
这个触发器的作用是:当更新数据之前,根据该学生的学号(`NEW.student_id`)查询该学生所有课程的平均成绩,并将结果更新到该学生的平均成绩(`avg_score`)字段中。
需要注意的是,这个触发器是在每一行数据更新之前执行的,因此每次更新平均成绩时都会重新计算该学生的所有课程的平均值。如果你有大量的数据需要更新,可能会影响性能。为了避免这种情况,你可以考虑将触发器改为在 `AFTER UPDATE` 时执行,这样可以减少计算量,但需要确保在更新平均成绩之前,已经更新了成绩数据。