### 数据库经典练习题知识点解析
#### 一、数据库表结构设计
在本题中,设计了四个数据库表:`STUDENT`(学生)、`COURSE`(课程)、`SCORE`(成绩)以及`TEACHER`(教师)。通过这些表的设计,我们可以观察到数据库表结构的构建方式。
1. **学生表** (`STUDENT`)
- `SNO`: 学号(主键),长度为3位的字符串。
- `SNAME`: 姓名,长度为4位的字符串。
- `SSEX`: 性别,长度为2位的字符串。
- `SBIRTHDAY`: 出生日期,类型为`DATETIME`。
- `CLASS`: 所属班级,长度为5位的字符串。
2. **课程表** (`COURSE`)
- `CNO`: 课程号(主键),长度为5位的字符串。
- `CNAME`: 课程名称,长度为10位的字符串。
- `TNO`: 教师工号,长度为10位的字符串。
3. **成绩表** (`SCORE`)
- `SNO`: 学号,与学生表中的`SNO`形成外键关系。
- `CNO`: 课程号,与课程表中的`CNO`形成外键关系。
- `DEGREE`: 成绩,数值类型,保留一位小数。
4. **教师表** (`TEACHER`)
- `TNO`: 教师工号(主键),长度为3位的字符串。
- `TNAME`: 教师姓名,长度为4位的字符串。
- `TSEX`: 性别,长度为2位的字符串。
- `TBIRTHDAY`: 出生日期,类型为`DATETIME`。
- `PROF`: 职称,长度为6位的字符串。
- `DEPART`: 所属部门,长度为10位的字符串。
#### 二、SQL语句详解
1. **创建表**
- **语法**: `CREATE TABLE 表名 (列名 数据类型 约束, ...)`
- **示例**: 创建学生表
```sql
CREATE TABLE STUDENT (
SNO VARCHAR(3) NOT NULL,
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL,
SBIRTHDAY DATETIME,
CLASS VARCHAR(5)
)
```
- **解释**: 上述SQL语句创建了一个名为`STUDENT`的表,包含5个字段:学号、姓名、性别、出生日期和班级。其中学号、姓名和性别字段不可为空。
2. **插入数据**
- **语法**: `INSERT INTO 表名 (列名, ...) VALUES (值, ...);`
- **示例**: 向学生表中插入数据
```sql
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS)
VALUES (108, '曾华', '男', '1977-09-01', 95033);
```
- **解释**: 使用`INSERT INTO`语句向`STUDENT`表中添加了一条记录,包括学号、姓名、性别等信息。
3. **数据类型**
- **VARCHAR**: 变长字符串类型,适用于存储可变长度的文本数据。
- **DATETIME**: 用于存储日期和时间的数据类型。
- **NUMERIC**: 数值类型,可以指定精度和小数位数。
4. **数据完整性约束**
- **NOT NULL**: 确保某列不为空。
- **PRIMARY KEY**: 主键约束,确保某列或某几列的组合具有唯一性,并且不能为NULL。
- **FOREIGN KEY**: 外键约束,用于关联两个表之间的数据。
#### 三、实际应用场景分析
1. **学生选课管理**
- 通过成绩表(`SCORE`)可以查询某个学生所选的所有课程及成绩,便于学生管理自己的学习情况。
2. **教师课程分配**
- 教师表(`TEACHER`)和课程表(`COURSE`)之间的关联,可以实现对教师的课程分配管理,如查看某位教师所教授的所有课程。
3. **数据分析**
- 利用这些表中的数据,可以进行各种统计分析,如计算不同课程的平均成绩、最高分等,帮助学校了解教学质量。
通过这些SQL例题的学习,不仅可以加深对SQL语言的理解,还能掌握如何设计合理的数据库表结构,并能够利用SQL语句进行有效的数据管理和分析。这对于IT行业的从业者来说是非常重要的基础技能之一。