数据库编程应用--查询专题1

86 阅读4分钟

教学管理数据库有以下四张表

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.查询选修了课程的学生学号。(注意消除重复性)

  1. SELECT 部分:
  • DISTINCT:消除重复的行

  • StudentId:学生学号

  1. FROM 部分:
  • FROM Grades:从成绩表查询
SELECT DISTINCT StudentId
FROM Grades;

7.查询年龄为19-22岁的学生的学号和年龄

  1. SELECT 部分:
  • StudentId:学生学号

  • Age:学生年龄

  1. FROM 部分:
  • FROM Student:从学生表查询
  1. WHERE 部分:
  • Age BETWEEN 19 AND 22:筛选年龄在19到22岁之间的学生

  • BETWEEN 包含边界值,即包含19和22

SELECT StudentId,Age
FROM Student
WHERE Age BETWEEN 19 AND 22;

8.查询姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生信息

  1. SELECT 部分:
  • *:选择所有列
  1. FROM 部分:
  • FROM Student:从学生表查询
  1. WHERE 部分:
  • Name LIKE '%马__':匹配倒数第三个字是"马"的姓名
  1. 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.查询姓名中含有“志”的学生信息

  1. SELECT 部分:
  • *:选择所有列
  1. FROM 部分:
  • FROM Student:从学生表查询
  1. WHERE 部分:
  • Name LIKE '%志%':匹配姓名中包含"志"的学生

  • % 是通配符,表示任意多个字符

  • %志% 表示"志"前后可以有任意字符

SELECT *
FROM Student
WHERE Name LIKE '%志%';

10.查询课程号为001或003,成绩为80-90,学号为“2021****”的学生的学号,课程号和成绩

  1. SELECT 部分:
  • StudentId:学生学号

  • CourseId:课程号

  • Score:成绩

  1. FROM 部分:
  • FROM Grades:从成绩表查询
  1. WHERE 部分:
  • (CourseId = '001' OR CourseId = '003'):课程号为001或003

  • AND Score BETWEEN 80 AND 90:成绩在80到90之间

  • AND StudentId LIKE '2021%':学号以2021开头

  1. 条件说明
  • BETWEEN 80 AND 90:闭区间,包含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%';