7. 综合实战:建教学实例库的核心表
把前面学的串起来,用一条 CREATE TABLE 造出 student 表(节选自教学实例库):
sql
USE 教学实例;
CREATE TABLE student (
Sno VARCHAR(10) PRIMARY KEY COMMENT '学号',
Sname VARCHAR(10) NOT NULL COMMENT '姓名',
Sbirth DATE COMMENT '出生日期',
IDNum CHAR(18) COMMENT '身份证号',
Ssex VARCHAR(10) COMMENT '性别',
sage TINYINT UNSIGNED COMMENT '年龄',
sbirthplace VARCHAR(20) COMMENT '籍贯',
class CHAR(2) COMMENT '班级'
) COMMENT='学生表';选课成绩表 sc 用复合主键,并可用外键关联学生与课程:
sql
CREATE TABLE sc (
Sno VARCHAR(10) NOT NULL,
Cno VARCHAR(10) NOT NULL,
score DECIMAL(5,1) DEFAULT NULL,
PRIMARY KEY (Sno, Cno)
);💡 教学实例库还包含 course(课程)、teacher(教师)、grades(等级区间)三张表。它们的建表语句都在《教学实例库.sql》里,建议同学们打开原文件通读一遍,体会"表与表之间靠主键外键联系"。
📝 本节例题
以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。
例 1
建 course 表并插入 4 门课程(计算机暂不安排教师)。
查看参考答案(可复制)
sql
CREATE TABLE course (
Cno varchar(10) NOT NULL,
Cname varchar(10),
Tno varchar(10),
PRIMARY KEY (Cno)
);
INSERT INTO course VALUES('01', '语文', '02');
INSERT INTO course VALUES('02', '数学', '01');
INSERT INTO course VALUES('03', '英语', '03');
INSERT INTO course VALUES('04', '计算机', NULL);💡 暂无值写 NULL,不要写空字符串,否则 IS NULL 查不到。
例 2
建 sc 表(学号 + 课程号做复合主键),并插入赵雷(001)三门课的成绩。
查看参考答案(可复制)
sql
CREATE TABLE sc (
Sno varchar(10) NOT NULL,
Cno varchar(10) NOT NULL,
score decimal(5,1),
PRIMARY KEY (Sno, Cno)
);
INSERT INTO sc VALUES('001', '01', 80.0);
INSERT INTO sc VALUES('001', '02', 90.0);
INSERT INTO sc VALUES('001', '03', 99.0);💡 一个学生一门课只能有一条成绩,用复合主键最合适。
例 3
建 teacher 表(含入职日期)并一次插入 4 位教师;再建 grades 表(等级区间)并插入 4 行。
查看参考答案(可复制)
sql
CREATE TABLE teacher (
Tno varchar(10) NOT NULL COMMENT '教师ID',
Tname varchar(10) COMMENT '教师姓名',
entrydate date COMMENT '教师入职时间',
PRIMARY KEY (Tno)
);
INSERT INTO teacher VALUES
('01', '张老师', '2017-08-30'),
('02', '李老师', '2023-07-25'),
('03', '王老师', '2021-06-11'),
('04', '赵老师', '2024-08-01');
CREATE TABLE grades (
grade_level varchar(3),
lowest_sc int,
highest_sc int
);
INSERT INTO grades VALUES('优秀', 90, 100), ('良好', 75, 89), ('及格', 60, 74), ('不及格', 0, 59);💡 多条数据用一条 INSERT + 多组 VALUES,比逐条插入快很多。