表1-3 sc(注:成绩表) 列名 数据类型 长度 是否为空 默认值 说明 Sno(学号) char 9 N 主键、外键 Cno(课程号) char 6 N 主键、外键 grade(成绩) tinyint 1 0-100之间 用SQL语言创建上述表
时间: 2024-10-21 19:04:04 浏览: 50
你可以使用以下SQL语句来创建名为sc的成绩表(表1-3),其中包含了学号(Sno), 课程号(Cno) 和成绩(Grade)三个字段:
```sql
CREATE TABLE sc (
Sno CHAR(9) NOT NULL,
Cno CHAR(6) NOT NULL,
Grade TINYINT(3) CHECK (Grade BETWEEN 0 AND 100), -- 确保成绩在0到100范围内
PRIMARY KEY (Sno, Cno), -- 定义复合主键,因为学号和课程号都作为外键
FOREIGN KEY (Sno) REFERENCES other_table(Sno), -- 如果有其他表引用学号,此处添加外键约束
FOREIGN KEY (Cno) REFERENCES other_course_table(Cno) -- 同样,如果其他表引用课程号,这里添加外键约束
);
```
在这个例子中,`other_table` 和 `other_course_table` 分别是你假设的包含学生信息和课程信息的表。如果没有提供具体的参照表,那么外键约束可以省略。
相关问题
使用SQL语言创建以下3个数据表:学生表(student)、课程表(course)、学生选课表(SC),分别写出SQL语句。 各表的结构分别如下: student表结构: 字段名称 数据类型 是否为空 约束 说明 SNo char(8) 否 主键 SName varchar(20) 否 唯一值 SGender char(2) 否 检查约束 为男或女 SAge int 可以 Scredits int 可以 · course表结构: 字段名称 数据类型 是否允许空值 约束 说明 CNo char(5) 否 主键 课程编号 CName varchar(30) 否 唯一值 课程名称 CPno char(5) 可以 外键course(CNO) 先修课程 CCredits int 可以 默认值4 学分 · SC表结构: 字段名称 数据类型 是否允许空值 约束 说明 SNo char(8) 否 外键 学号 CNo char(5) 否 外键 课程编号 Score decimal(3,1) 可以 0~100 成绩
创建student表的SQL语句:
```SQL
CREATE TABLE student (
SNo CHAR(8) NOT NULL,
SName VARCHAR(20) NOT NULL UNIQUE,
SGender CHAR(2) NOT NULL CHECK(SGender IN ('男', '女')),
SAge INT,
Scredits INT,
PRIMARY KEY (SNo)
);
```
创建course表的SQL语句:
```SQL
CREATE TABLE course (
CNo CHAR(5) NOT NULL,
CName VARCHAR(30) NOT NULL UNIQUE,
CPno CHAR(5),
CCredits INT DEFAULT 4,
PRIMARY KEY (CNo),
FOREIGN KEY (CPno) REFERENCES course(CNo)
);
```
创建SC表的SQL语句:
```SQL
CREATE TABLE SC (
SNo CHAR(8) NOT NULL,
CNo CHAR(5) NOT NULL,
Score DECIMAL(3, 1),
PRIMARY KEY (SNo, CNo),
FOREIGN KEY (SNo) REFERENCES student(SNo),
FOREIGN KEY (CNo) REFERENCES course(CNo),
CHECK (Score BETWEEN 0 AND 100)
);
```
创建存储过程,将指定学号和课程任务编号的成绩提升50%,如果已经超过80分,则为80分。存储过程的默认学号为:201001903057,默认课程任务编号为:(2009-2010-1)-140173-04001。(注:sc(sno,teachtaskid,grade))
创建一个存储过程(Procedure in SQL),通常用于数据库操作,可以如下面的伪代码所示。这个存储过程名为`update_score_with_bonus`,它接受三个输入参数:学生学号`sno`、课程任务编号`teachtaskid`以及初始成绩`grade`。如果满足条件(即成绩低于80分),则将其提升50%;若已达到或超过80分,则保持80分不变。考虑到默认值,我们可以使用IF...ELSE语句来处理。
```sql
CREATE PROCEDURE update_score_with_bonus (
@sno INT = 201001903057,
@teachtaskid VARCHAR(255) = '2009-2010-1)-140173-04001',
@grade DECIMAL(5,2)
)
AS
BEGIN
DECLARE @newGrade DECIMAL(5,2)
IF @grade < 80
BEGIN
SET @newGrade = @grade * 1.5;
END
ELSE
BEGIN
SET @newGrade = 80;
END
-- 更新成绩表中的记录
UPDATE sc
SET grade = @newGrade
WHERE sno = @sno AND teachtaskid = @teachtaskid;
END;
```
阅读全文