news 2026/7/9 21:32:33

SQL与关系代数实战:从3个经典学生选课表到5类查询的完整转换练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL与关系代数实战:从3个经典学生选课表到5类查询的完整转换练习

SQL与关系代数实战:从3个经典学生选课表到5类查询的完整转换练习

在数据库系统学习中,掌握SQL与关系代数的相互转换是理解查询本质的关键技能。本文将以学生(S)、课程(C)、选课(SC)三个经典表为基础,通过5类典型查询场景,系统讲解两种查询语言的对应关系,帮助读者建立从理论到实践的完整知识框架。

1. 基础表结构与关系代数运算回顾

1.1 表结构定义

我们使用以下三个表作为练习基础:

学生表Student(S)

S(Sno, Sname, Age, Sex, Dept) 主键:Sno

Sno-学号,Sname-姓名,Age-年龄,Sex-性别,Dept-所在系

课程表Course(C)

C(Cno, Cname, Credit, Teacher) 主键:Cno

Cno-课程号,Cname-课程名,Credit-学分,Teacher-授课教师

选课表SC

SC(Sno, Cno, Grade) 主键:(Sno, Cno) 外键:Sno参照Student(Sno),Cno参照Course(Cno)

Grade-成绩

1.2 关系代数基本运算

关系代数包含以下核心运算:

运算类型符号SQL对应功能描述
选择σWHERE按条件筛选行
投影πSELECT选择特定列
连接JOIN表间关联查询
UNION结果集合并
-EXCEPT结果集差集

提示:关系代数表达式默认去除重复元组,而SQL需要使用DISTINCT显式去重

2. 选择运算:单表条件筛选

2.1 基础选择查询

例题1:查询计算机系年龄小于20的学生信息

关系代数:

σ(Dept='计算机' ∧ Age<20)(Student)

SQL实现:

SELECT * FROM Student WHERE Dept = '计算机' AND Age < 20;

2.2 复杂条件选择

例题2:查询选修了课程号为'C001'且成绩在80-90之间的学生学号

关系代数:

π(Sno)(σ(Cno='C001' ∧ Grade≥80 ∧ Grade≤90)(SC))

SQL实现:

SELECT DISTINCT Sno FROM SC WHERE Cno = 'C001' AND Grade BETWEEN 80 AND 90;

3. 投影运算:属性选择与列裁剪

3.1 基本投影操作

例题3:查询所有学生的姓名和所在系

关系代数:

π(Sname, Dept)(Student)

SQL实现:

SELECT Sname, Dept FROM Student;

3.2 投影与选择的组合

例题4:查询选修了'C001'课程的学生姓名

关系代数:

π(Sname)(Student ⋈ σ(Cno='C001')(SC))

SQL实现:

SELECT DISTINCT S.Sname FROM Student S JOIN SC ON S.Sno = SC.Sno WHERE SC.Cno = 'C001';

4. 连接运算:多表关联查询

4.1 自然连接

例题5:查询选修了'数据库原理'课程的学生学号和成绩

关系代数:

π(Sno, Grade)(SC ⋈ σ(Cname='数据库原理')(Course))

SQL实现:

SELECT SC.Sno, SC.Grade FROM SC JOIN Course C ON SC.Cno = C.Cno WHERE C.Cname = '数据库原理';

4.2 外连接应用

例题6:查询所有学生选课情况(包括未选课学生)

关系代数(左外连接):

Student ⟕ SC

SQL实现:

SELECT S.Sno, S.Sname, SC.Cno, SC.Grade FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno;

5. 分组聚合与嵌套查询

5.1 分组统计

例题7:统计每门课程的平均成绩,只显示平均分≥75的课程

关系代数:

γ(Cno; AVG(Grade)→AvgGrade)(SC) ⋈ σ(AvgGrade≥75)(γ(Cno; AVG(Grade)→AvgGrade)(SC))

SQL实现:

SELECT Cno, AVG(Grade) AS AvgGrade FROM SC GROUP BY Cno HAVING AVG(Grade) >= 75;

5.2 存在性测试

例题8:查询没有选修'C001'课程的学生姓名

关系代数:

π(Sname)(Student - π(Sno)(σ(Cno='C001')(SC)) ⋈ Student)

SQL实现(使用NOT EXISTS):

SELECT Sname FROM Student S WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Sno = S.Sno AND SC.Cno = 'C001' );

6. 综合应用与优化技巧

6.1 复杂查询分解

例题9:查询选修了全部课程的学生姓名

关系代数(除法运算):

π(Sno, Cno)(SC) ÷ π(Cno)(Course) ⋈ π(Sno, Sname)(Student)

SQL实现(使用双重NOT EXISTS):

SELECT S.Sname FROM Student S WHERE NOT EXISTS ( SELECT * FROM Course C WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Sno = S.Sno AND SC.Cno = C.Cno ) );

6.2 查询优化原则

  1. 选择下推:尽早执行选择运算减少中间结果
  2. 投影下推:尽早去除不需要的列
  3. 连接顺序:小表优先连接
  4. 避免笛卡尔积:确保连接条件正确

注意:实际优化还需考虑索引、统计信息等因素

通过这5类查询的完整练习,我们系统建立了SQL与关系代数的对应关系。在实际数据库开发中,理解这种对应关系有助于:

  • 准确分析复杂查询语义
  • 优化查询执行效率
  • 设计更合理的数据库模式
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 21:31:05

CATIA 2020安装失败原因与虚拟网卡清理全指南

1. 为什么CATIA 2020安装总卡在“虚拟网卡检测失败”&#xff1f;这不是软件问题&#xff0c;是系统环境的隐性冲突CATIA 2020不是普通工业软件&#xff0c;它是一套运行在Dassault Systmes严格授权体系下的高端三维CAD/CAE/CAM平台。它的安装逻辑和普通软件有本质区别&#xf…

作者头像 李华
网站建设 2026/7/9 21:30:36

自然语言处理

第一章:NLP基础概念 1.1 什么是自然语言处理 要讲NLP,咱们首先得搞清楚一个问题:到底什么是自然语言? 自然语言啊,就是咱们平时说话、写字用的语言,比如中文、英文、日文这些。相比之下,还有一种叫"形式语言"的东西,比如编程语言、数学符号这些,它们有严…

作者头像 李华
网站建设 2026/7/9 21:28:25

锂离子电池过压保护与BQ29200平衡技术解析

1. 锂离子电池过压保护的必要性与挑战两节串联锂离子电池组在充电过程中存在一个典型问题&#xff1a;当充电接近满电状态时&#xff0c;如果其中一节电池先达到满电电压&#xff08;通常4.2V&#xff09;&#xff0c;而另一节电池尚未充满&#xff0c;继续充电会导致先满电的电…

作者头像 李华
网站建设 2026/7/9 21:27:28

AT89S51 存储结构实战:4KB Flash + 128B RAM 如何规划中断与堆栈

AT89S51存储结构实战&#xff1a;4KB Flash与128B RAM的中断与堆栈规划策略在嵌入式系统开发中&#xff0c;如何高效利用有限的存储资源是每个工程师必须面对的挑战。以经典AT89S51为例&#xff0c;其4KB Flash程序存储器和128B RAM数据存储器的配置看似捉襟见肘&#xff0c;但…

作者头像 李华
网站建设 2026/7/9 21:24:47

从基础到应用:LingBot-VLA 2.0 在实践中改进 VLA 模型

26年7月来自蚂蚁灵波科技的论文“From Foundation to Application: Improving VLA Models in Practice”。 尽管 VLA&#xff08;视觉-语言-动作&#xff09;基础模型近期取得进展&#xff0c;但实验室环境与现实世界应用之间的差距依然阻碍了它们的实际落地。为弥合这一差距&…

作者头像 李华
网站建设 2026/7/9 21:23:26

猫抓浏览器资源嗅探扩展:轻松捕获网页媒体资源的终极方案

猫抓浏览器资源嗅探扩展&#xff1a;轻松捕获网页媒体资源的终极方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在当今数字内容爆炸的时代&am…

作者头像 李华