创建成绩表结构如下:学号sid和课程号cid为主码,学号按照学生表的主码学号,课程号参照课程表的主码课程号cid,当从学生表中删除一条学生记录时,级联删除该生的所有选课信息,当修改学生表中学号sid时,级联更新成绩表中 所有学号约定成绩取值范围为[0,100]
时间: 2023-05-29 22:05:47 浏览: 160
CREATE TABLE score (
sid INT NOT NULL,
cid INT NOT NULL,
score INT,
PRIMARY KEY (sid, cid),
FOREIGN KEY (sid) REFERENCES student(sid) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cid) REFERENCES course(cid) ON UPDATE CASCADE
) ENGINE=InnoDB;
其中,ON DELETE CASCADE意味着当从学生表中删除一条学生记录时,级联删除该生的所有选课信息;ON UPDATE CASCADE意味着当修改学生表中学号sid时,级联更新成绩表中所有学号。
相关问题
Student(Sid,Sname,Sage,Ssex)学生表 Sid:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(Cid,Cname,Tid)课程表 Cid:课程编号 Cname:课程名称 Tid:教师编号 SC(Sid,Cid,score)成绩表 Sid:学号 Cid:课程编号 score:成绩 10.1 查询所有同学的学号、姓名、选课数、总成绩?
可以使用以下 SQL 语句查询所有同学的学号、姓名、选课数、总成绩:
```
SELECT Student.Sid, Sname, COUNT(SC.Cid) AS course_num, SUM(SC.score) AS total_score
FROM Student
LEFT JOIN SC ON Student.Sid = SC.Sid
GROUP BY Student.Sid, Sname;
```
这个查询语句使用了学生表 Student 和成绩表 SC 的连接查询,计算了每个学生的选课数和总成绩,最后使用 GROUP BY 和聚合函数对结果进行了分组和统计。LEFT JOIN 是为了包括那些没有选课的学生在内。
学生表 student(sid,sname,sage,ssex),其中,si d:学号,sname:学生姓名,sage:学生年龄,sse x:学生性别, 成绩表 sc(sid,sid,score),其中,sid:学号,sid: 课程编号,score:成绩。 查询选修了两门及以上课程的全部学生的学号和姓 名。显示sid、sname和课程数
可以使用如下 SQL 语句查询选修了两门及以上课程的全部学生的学号和姓名,并显示选修课程数:
```
SELECT student.sid, student.sname, COUNT(DISTINCT sc.cid) AS course_count
FROM student
INNER JOIN sc ON student.sid = sc.sid
GROUP BY student.sid, student.sname
HAVING COUNT(DISTINCT sc.cid) >= 2;
```
其中,`SELECT` 语句用于选择需要查询的字段,这里包括学生学号、学生姓名和选修课程数,使用 `COUNT(DISTINCT sc.cid)` 统计每个学生选修的不同课程数量。`FROM` 语句用于指定需要查询的表,这里包括学生表 `student` 和成绩表 `sc`,使用 `INNER JOIN` 连接两个表,连接条件为学生的学号和成绩表中的学号相等。`GROUP BY` 语句将结果按照学生学号和姓名分组,以便对每个学生的选修课程数进行统计。`HAVING` 语句用于筛选选修课程数大于等于2门的学生。
阅读全文