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,比逐条插入快很多。