数据库原理与应用【2025-2026-2】

赵春、毛红霞、李驰、刘福刚、曾丽

目录

  • 1 两课设计
    • 1.1 教学大纲
    • 1.2 教案
      • 1.2.1 李驰老师-教案
        • 1.2.1.1 24级数媒4班-教案
      • 1.2.2 毛红霞老师-教案
        • 1.2.2.1 24级数字媒体2班教案
        • 1.2.2.2 24级数字媒体3班教案
    • 1.3 课堂反思
      • 1.3.1 李驰老师-课堂反思
        • 1.3.1.1 24数媒4班
          • 1.3.1.1.1 3月9日(第2周第1次课)
          • 1.3.1.1.2 3月16日(第4周第1次课)
      • 1.3.2 毛红霞老师-课堂反思
        • 1.3.2.1 24级数字媒体2班
          • 1.3.2.1.1 3月12号(第2周第2次课——除运算)
          • 1.3.2.1.2 3月18号(第3周第1次课——关系代数习题课)
        • 1.3.2.2 24级数字媒体3班
          • 1.3.2.2.1 3月12日(第2周第2次课——连接、除)
          • 1.3.2.2.2 3月17日(第3周第1次课——关系代数习题课)
    • 1.4 课程反思
      • 1.4.1 李驰老师-课程反思
      • 1.4.2 毛红霞老师-课程反思
    • 1.5 高阶课堂安排
    • 1.6 教材案例配套数据表
    • 1.7 实验数据库Northwind
    • 1.8 数据库软件安装
  • 2 数据库基本概念
    • 2.1 学习内容及要求
    • 2.2 课堂设计(教案)
    • 2.3 内容要点解析
    • 2.4 电子课件
    • 2.5 参考文献
  • 3 关系数据库
    • 3.1 学习内容及要求
    • 3.2 课堂设计(教案)
    • 3.3 内容要点解析
    • 3.4 电子课件
    • 3.5 参考文献
    • 3.6 微课视频
    • 3.7 翻转教学
      • 3.7.1 学习任务单
  • 4 关系代数
    • 4.1 学习内容及要求
    • 4.2 课堂设计(教案)
    • 4.3 内容要点解析
    • 4.4 电子课件
    • 4.5 参考文献
    • 4.6 微课视频
    • 4.7 翻转教学
      • 4.7.1 学习任务单
  • 5 关系代数(习题课)
    • 5.1 学习内容及要求
    • 5.2 课堂设计(教案)
    • 5.3 内容要点解析
    • 5.4 电子课件
    • 5.5 微课视频
  • 6 SQL数据类型与数据定义语句
    • 6.1 学习内容及要求
    • 6.2 课堂设计(教案)
    • 6.3 内容要点解析
    • 6.4 电子课件
    • 6.5 参考文献
    • 6.6 微课视频
    • 6.7 上机实验
    • 6.8 翻转教学1
      • 6.8.1 学习任务单
      • 6.8.2 翻转课件
      • 6.8.3 翻转视频
      • 6.8.4 讨论问题
    • 6.9 翻转教学2
      • 6.9.1 学习任务单
  • 7 SQL单表基本查询
    • 7.1 学习内容及要求
    • 7.2 课堂设计(教案)
    • 7.3 内容要点解析
    • 7.4 电子课件
    • 7.5 参考文献
    • 7.6 微课视频
      • 7.6.1 单表查询与聚合函数
      • 7.6.2 图形化单表查询
    • 7.7 上机实验
    • 7.8 翻转教学
      • 7.8.1 学习任务单
  • 8 SQL统计查询
    • 8.1 学习内容及要求
    • 8.2 课堂设计(教案)
    • 8.3 内容要点解析
    • 8.4 电子课件
    • 8.5 参考文献
    • 8.6 微课视频
    • 8.7 上机实验
    • 8.8 翻转教学
      • 8.8.1 学习任务单
  • 9 SQL多表查询
    • 9.1 学习内容及要求
    • 9.2 课堂设计(教案)
    • 9.3 内容要点解析
    • 9.4 电子课件
    • 9.5 参考文献
    • 9.6 微课视频
    • 9.7 上机实验
    • 9.8 翻转教学
      • 9.8.1 学习任务单
  • 10 SQL嵌套子查询
    • 10.1 学习内容及要求
    • 10.2 课堂设计(教案)
    • 10.3 内容要点解析
    • 10.4 电子课件
    • 10.5 参考文献
    • 10.6 微课视频
    • 10.7 上机实验
    • 10.8 翻转教学
      • 10.8.1 翻转视频
      • 10.8.2 翻转课任务分配
      • 10.8.3 翻转课流程安排
      • 10.8.4 学习任务单
      • 10.8.5 查询语句编写秘籍
  • 11 SQL数据更新
    • 11.1 学习内容及要求
    • 11.2 课堂设计(教案)
    • 11.3 内容要点解析
    • 11.4 电子课件
    • 11.5 参考文献
    • 11.6 微课视频
    • 11.7 上机实验
    • 11.8 SQL编程综合习题课(高阶翻转)
      • 11.8.1 翻转学习任务单
      • 11.8.2 翻转视频
      • 11.8.3 翻转课件
    • 11.9 备份资料
      • 11.9.1 学习任务单
  • 12 索引和视图
    • 12.1 学习内容及要求
    • 12.2 课堂设计(教案)
    • 12.3 内容要点解析
    • 12.4 电子课件
    • 12.5 参考文献
    • 12.6 微课视频
    • 12.7 上机实验
    • 12.8 翻转教学
      • 12.8.1 学习任务单
      • 12.8.2 翻转课件
  • 13 数据库设计
    • 13.1 学习内容及要求
    • 13.2 课堂设计(教案)
    • 13.3 内容要点解析
    • 13.4 电子课件
    • 13.5 参考文献
    • 13.6 微课视频
    • 13.7 上机实验
    • 13.8 数据库设计-翻转方案I(分班级实施)
      • 13.8.1 学习任务单
      • 13.8.2 翻转视频
      • 13.8.3 翻转课件
      • 13.8.4 课前作业及讨论
    • 13.9 数据库设计-翻转方案II(分班级实施)
      • 13.9.1 学习任务单
      • 13.9.2 翻转视频
      • 13.9.3 翻转课件
      • 13.9.4 问答总结
      • 13.9.5 技巧总结
      • 13.9.6 案例练习
  • 14 规范化理论-1
    • 14.1 学习内容及要求
    • 14.2 课堂设计(教案)
    • 14.3 内容要点解析
    • 14.4 电子课件
    • 14.5 参考文献
    • 14.6 翻转教学
      • 14.6.1 学习任务单
  • 15 规范化理论-2
    • 15.1 学习内容及要求
    • 15.2 课堂设计(教案)
    • 15.3 内容要点解析
    • 15.4 电子课件
    • 15.5 参考文献
    • 15.6 翻转视频
    • 15.7 上机实验
    • 15.8 翻转教学
      • 15.8.1 学习任务单
  • 16 事务、存储过程与触发器
    • 16.1 学习内容及要求
    • 16.2 课堂设计(教案)
    • 16.3 内容要点解析
    • 16.4 电子课件
    • 16.5 参考文献
    • 16.6 微课视频
    • 16.7 翻转教学
      • 16.7.1 学习任务单
  • 17 数据库高阶挑战性项目实践Ⅰ
    • 17.1 学习内容及要求
    • 17.2 实践任务
    • 17.3 课堂设计(教案)
    • 17.4 参考文献
    • 17.5 微课视频
  • 18 数据库高阶挑战性项目实践Ⅱ
    • 18.1 学习内容及要求
    • 18.2 实践任务
    • 18.3 课堂设计(教案)
    • 18.4 电子课件
    • 18.5 参考文献
    • 18.6 微课视频
    • 18.7 数据预处理总结
  • 19 课程扩展-数据备份与导入导出
    • 19.1 微课视频
    • 19.2 参考文献
  • 20 课程设计
    • 20.1 课堂设计(教案)
    • 20.2 课程设计及项目报告模板
内容要点解析
  • 1 SQL不相关嵌套子查询
  • 2 SQL相关嵌套子查询

SQL不相关嵌套子查询

大家都学习过高级编程语言,比如C语言;都知道类似if、for这样的流程控制语句是可以嵌套使用的。SQL嵌套子查询和if、for等语句的嵌套使用是一个道理,也就是说在一个查询语句中可以直接使用另一个查询语句的结果;或者说,一条查询语句可以嵌入到另一条查询语句内部使用。

那我们举个例子:

首先,上背景:

【例1】查询比张三年龄大的学生的姓名和年龄。

对于这道题,大家的思路应该都比较清楚:使用自连接查询即可完成,一张表去找张三的年龄,一张表对全体学生进行扫描,将其年龄和在上一张表中找到的张三的年龄进行比较;比如:

select s1.Sname,s1.Sage from Student s1,Student s2 

where s2.Sname='张三' and s1.Sage>s2.Sage

其实大家也会留意到:我们的解题思路分为了两个步骤:

1、在一张表中去找到张三的年龄;

2、在另一张表种对全体学生进行扫描,测试其年龄是否大于在上一步中找到的张三的年龄。

其中第2步用到了第1步的结果。所以我们可以换个思路:

首先找到张三的年龄:select s2.Sage from Student s2 where s2.Sname='张三' 

这条语句如果被执行,那么我们一定可以得到张三的年龄,而这个年龄一定是一个类似于17、18、19这样的具体数值,我们就直接假定是A(A=select s2.Sage from Student s2 where s2.Sname='张三')。

接下来,完成第2步:有了这个A以后,我们就可以再次对Student表进行全表搜索,来看看有哪些同学的年龄大于A:

select s1.Sname,s1.Sage from Student s1 where s1.Sage>A

就和数学里面的代数式一样,我们可以把A的表达式带入上述SQL语句:

select s1.Sname,s1.Sage from Student s1 where s1.Sage>(

  select s2.Sage from Student s2 where s2.Sname='张三'

)

首先说明:这条语句的执行结果和例1中那条自连接查询的效果是完全一致的,即两条语句等价。大家可以很直观的看到:一条查询语句被嵌入到了另一条查询语句之中。那么这就是嵌套子查询。

我们来下两个定义:

外层查询:嵌套查询中的外部查询语句;

内层查询:嵌套查询中的内部查询语句,也被称作子查询。

其实上面这个将自连接写成嵌套查询的例子除了更符合我们的思维习惯,简化我们的编程以外,好像并没有更多地体现出嵌套查询的价值。接下来,我们再举一个例子:

【例2】查询学生平均年龄高于计科系的其它系。

这道题很难利用连接查询来实现。但是利用嵌套查询,则显得比较清晰,也比较容易。我们可以把思路捋一捋:

1、查询计科系的学生平均年龄

select avg(Sage) from Student group by Sdept

2、查询比第1步所得到的平均年龄要高的其它系

select Sdept from Student 

group by Sdept having avg(Sage)>(

  select avg(Sage) from Student group by Sdept

这就是最终的结果。整个SQL看起来非常清晰,理解起来也容易得多。

最后我们需要指出的是内层查询和外层查询的关系:在前面的两个例子中,内层查询都是可以独立完成的,换句话说,它并不需要外部给它传递任何参数;同时内层查询会先于外层查询执行,且只执行1遍。因为大家可以很容易地分析出来,内层查询不管执行几遍,结果都是唯一的,不会变化。

像这样的情况,我们就说内层查询不依赖于外层查询。我们把内层不依赖于外层的嵌套子查询称作不相关嵌套子查询

再强调一遍:这里的不相关是指内层的执行和外层无关,但反过来讲是不成立的,即在嵌套子查询中外层是一定依赖于内层的,否则子查询的作用是什么呢?