教学管理数据库有以下四张表
1.学生表 (Student) 包含:学号(StudentId)、姓名(Name)、系(Department)、班级(Class)、性别(Gender)、年龄(Age)。
CREATE TABLE Student (
StudentId NUMBER(8), -- 学号
Name VARCHAR(20) NOT NULL, -- 姓名
Department VARCHAR(50), -- 系
Class VARCHAR(20), -- 班级
Gender VARCHAR(4), -- 性别
Age NUMBER(3), -- 年龄
PRIMARY KEY (StudentId) -- 主键约束
);
2.课程表 (Course) 包含:课程 ID(CourseId)、课程名称(Name)、学分(Credits)、学时数(LectureHours)。
CREATE TABLE Course (
CourseId NUMBER(8), -- 课程ID
Name VARCHAR(50) NOT NULL, -- 课程名称
Credits NUMBER(4,1), -- 学分
LectureHours NUMBER(3), -- 学时数
PRIMARY KEY (CourseId) -- 主键约束
);
3.教师表 (Teachers) 包含:教师 ID(TeacherId)、姓名(Name)、性别(Gender)、职称(Title)、所属院系(Department)、课程号(CourseId)、授课日期(TeachingDate)。
CREATE TABLE Teachers (
TeacherId NUMBER(8), -- 教师ID
Name VARCHAR(20) NOT NULL, -- 姓名
Gender VARCHAR(4), -- 性别
Title VARCHAR(20), -- 职称
Department VARCHAR(50), -- 所属院系
CourseId NUMBER(8), -- 课程号(外键)
TeachingDate DATE, -- 授课日期
PRIMARY KEY (TeacherId), -- 主键约束
FOREIGN KEY (CourseId) REFERENCES Course(CourseId) -- 外键约束
);
4.成绩表 (Grades) 包含:成绩 ID(GradeId)、学号(StudentId)、课程 ID(CourseId)、分数(Score)。
CREATE TABLE Grades (
GradeId NUMBER(8), -- 成绩ID
StudentId NUMBER(8) NOT NULL, -- 学号(外键)
CourseId NUMBER(8) NOT NULL, -- 课程ID(外键)
Score NUMBER(5,2), -- 分数
PRIMARY KEY (GradeId), -- 主键约束
FOREIGN KEY (StudentId) REFERENCES Student(StudentId), -- 外键约束
FOREIGN KEY (CourseId) REFERENCES Course(CourseId) -- 外键约束
);
5.查询模板
SELECT 字段列表
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
LIMIT 限制数量;
6.查询选修了课程的学生学号。(注意消除重复性)
SELECT部分:
-
DISTINCT:消除重复的行 -
StudentId:学生学号
FROM部分:
- FROM Grades:从成绩表查询
SELECT DISTINCT StudentId
FROM Grades;
7.查询年龄为19-22岁的学生的学号和年龄
SELECT部分:
-
StudentId:学生学号
-
Age:学生年龄
FROM部分:
- FROM Student:从学生表查询
WHERE部分:
-
Age
BETWEEN19AND22:筛选年龄在19到22岁之间的学生 -
BETWEEN包含边界值,即包含19和22
SELECT StudentId,Age
FROM Student
WHERE Age BETWEEN 19 AND 22;
8.查询姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生信息
SELECT部分:
- *:选择所有列
FROM部分:
- FROM Student:从学生表查询
WHERE部分:
- Name
LIKE'%马__':匹配倒数第三个字是"马"的姓名
LIKE运算符说明:
-
%:匹配任意多个字符(包括0个) -
_:匹配单个字符 -
%马__:表示不限定位数但是"马"后面有两个字符
1.查询姓名以"马"开头的学生
WHERE Name LIKE '马%';
--匹配:马、马超、马云、马小云、马到成功
2.查询姓名以"马"结尾的学生
WHERE Name LIKE '%马';
--匹配:马、张马、李马、张三马、青梅竹马
3. %马%:匹配任意位置包含"马"的姓名
WHERE Name LIKE '%马%';
--匹配:马、马超、张马、小马哥
4._马:限定两位数,且马前面有一个字符
WHERE Name LIKE '_马';
--匹配:王马、张马、李马
5.马_:限定两位数,且马后面有一个字符
WHERE Name LIKE '马_';
--匹配:马二、马子
6._马_:限定三位数,且马前面和后面都有一个字符
WHERE Name LIKE '_马_';
--匹配:张马三、李马四、王马五、小马儿
6.马__:限定三位数,且马后面有两个字符
WHERE Name LIKE '马__';
--匹配:马云飞、马亚奇、马张三
7.__马:限定三位数,且马前面有两个字符
WHERE Name LIKE '__马';
--匹配:上等马、中等马、下等马
8.%马_:不限定位数,但是马后面包含一位
WHERE Name LIKE '%马_';
--匹配:马云、小马哥、张三马四
9._马%:不限定位数,但是马前面包含一位
WHERE Name LIKE '_马%';
--匹配:好马、刘马飞、快马加鞭
10.查询姓名中不包含"马"的学生
WHERE Name NOT LIKE '%马%';
-- 匹配:张三、李四、王五
SELECT *
FROM Student
WHERE Name LIKE '%马__';
9.查询姓名中含有“志”的学生信息
SELECT部分:
- *:选择所有列
FROM部分:
- FROM Student:从学生表查询
WHERE部分:
-
Name LIKE '%志%':匹配姓名中包含"志"的学生 -
%是通配符,表示任意多个字符 -
%志%表示"志"前后可以有任意字符
SELECT *
FROM Student
WHERE Name LIKE '%志%';
10.查询课程号为001或003,成绩为80-90,学号为“2021****”的学生的学号,课程号和成绩
SELECT部分:
-
StudentId:学生学号
-
CourseId:课程号
-
Score:成绩
FROM部分:
- FROM Grades:从成绩表查询
WHERE部分:
-
(CourseId = '001' OR CourseId = '003'):课程号为001或003
-
AND Score
BETWEEN80AND90:成绩在80到90之间 -
AND StudentId
LIKE'2021%':学号以2021开头
条件说明:
-
BETWEEN80AND90:闭区间,包含80和90 -
LIKE'2021%':匹配以2021开头的学号 -
%:匹配任意多个字符(包括0个)
SELECT StudentId,CourseId,Score
FROM Grades
WHERE (CourseId = '001' OR CourseId = '003')
AND Score BETWEEN 80 AND 90
AND StudentId LIKE '2021%';