学生表 tblStudent (编号Stuld、姓名 StuName) -课程表 tblCourse (课程编号 Courseld、课程名称 CourseName) -成绩表 tblScore (学生编号 Stuld、课程编号 Courseld、成绩 Score)
时间: 2024-05-30 14:16:36 浏览: 144
这三个表可以用以下 SQL 语句创建:
-- 创建学生表
CREATE TABLE tblStudent (
StuId INT PRIMARY KEY,
StuName VARCHAR(50)
);
-- 创建课程表
CREATE TABLE tblCourse (
CourseId INT PRIMARY KEY,
CourseName VARCHAR(50)
);
-- 创建成绩表
CREATE TABLE tblScore (
StuId INT,
CourseId INT,
Score INT,
PRIMARY KEY (StuId, CourseId),
FOREIGN KEY (StuId) REFERENCES tblStudent(StuId),
FOREIGN KEY (CourseId) REFERENCES tblCourse(CourseId)
);
其中,tblScore 表的主键包含学生编号和课程编号,而这两个字段分别作为外键引用了 tblStudent 和 tblCourse 表的主键。这样设计的好处是可以方便地查询某个学生的某门课程的成绩,而且保证了数据的一致性。
相关问题
TB_Dept(DeptID,DeptName,DeptSetDate) TB_Teacher(TeacherID,TeacherName,DeptID,Sex,Birthday) TB_Class(ClassID,ClassName,DeptID,TeacherID) TB_Student(StuID,StuName,DeptID,ClassID,Sex,Birthday) TB_Course(CourseID,CourseName,DeptID,CourseGrade,LessonTime, CourseOutline) TB_CourseClass(CourseClassID,CourseID,TeacherID,CommonPart,MiddlePart,LastPart) TB_SelectCourse(StuID,CourseClassID,SelectDate) TB_Grade(StuID,ClassID,CourseClassID,CourseID,CommonScore,MiddleScore,LastScore,TotalScore,RetestScore) 根据上面的表,1、创建一个AFTER型语句级触发器,当对学生表执行插入操作时,统计插入操作后学生的最小年龄并输出;当对学生表执行更新操作时,统计更新后学生的平均年龄并输出;当对学生表执行删除操作时,统计删除后学生的总人数并输出(参考后面例题)。要验证 2、用AFTER触发器实现选课人数自减功能,实现当在表TB_SelectCourse上删除选课记录时,自动将对应课程班TB_CourseClass表中的已选学生人数(SelectedNumber)减1。要验证 3、在TB_Class表中加一字段ClassNumber以记录班级人数,设计一触发器,要求在TB_Student中加入学生时,自动将对应班级表中的ClassNumber加1。 4、在TB_Student中加一字段TotalGrade,创建一个触发器,当向TB_Grade表插入记录后,如果成绩非空则在该学生的TotalGrade中自动加上该门课程的得分。
1、触发器代码如下:
CREATE TRIGGER tr_stu_insert_update_delete
AFTER INSERT OR UPDATE OR DELETE ON TB_Student
BEGIN
IF (SELECT COUNT(*) FROM TB_Student) > 0 THEN -- 防止除零错误
CASE
WHEN INSERTING THEN -- 插入操作
SELECT MIN(strftime('%Y', 'now') - strftime('%Y', Birthday)) AS "插入后最小年龄" FROM TB_Student;
WHEN UPDATING THEN -- 更新操作
SELECT AVG(strftime('%Y', 'now') - strftime('%Y', Birthday)) AS "更新后平均年龄" FROM TB_Student;
WHEN DELETING THEN -- 删除操作
SELECT COUNT(*) AS "删除后学生总人数" FROM TB_Student;
END CASE;
END IF;
END;
2、触发器代码如下:
CREATE TRIGGER tr_select_course_delete
AFTER DELETE ON TB_SelectCourse
BEGIN
UPDATE TB_CourseClass SET SelectedNumber = SelectedNumber - 1 WHERE CourseClassID = OLD.CourseClassID;
END;
3、触发器代码如下:
CREATE TRIGGER tr_stu_insert_classnumber
AFTER INSERT ON TB_Student
BEGIN
UPDATE TB_Class SET ClassNumber = ClassNumber + 1 WHERE ClassID = NEW.ClassID;
END;
4、触发器代码如下:
CREATE TRIGGER tr_grade_insert_totalgrade
AFTER INSERT ON TB_Grade
BEGIN
UPDATE TB_Student SET TotalGrade = TotalGrade + NEW.TotalScore WHERE StuID = NEW.StuID;
END;
oracle建立男学生的视图,属性包括学号、姓名、选修课程名和成绩。
假设我们有以下三个表:
- 学生表(Student),包含学号(StuNo)和姓名(StuName)两个属性。
- 选课表(Course),包含课程号(CourseNo)、课程名(CourseName)和任课教师(Teacher)三个属性。
- 成绩表(Score),包含学号(StuNo)、课程号(CourseNo)和成绩(Score)三个属性。
我们可以使用以下SQL语句创建一个以男学生为基础的视图:
```sql
CREATE VIEW Male_Student_View AS
SELECT s.StuNo, s.StuName, c.CourseName, sc.Score
FROM Student s, Course c, Score sc
WHERE s.StuNo = sc.StuNo
AND c.CourseNo = sc.CourseNo
AND s.Gender = '男';
```
这将返回一个以男学生为基础的视图,其中包含学号、姓名、选修课程名和成绩。请注意,我们在查询中使用了多表连接,并通过WHERE子句将三个表连接在一起。
阅读全文