SQL与关系代数实战:从3个经典学生选课表到5类查询的完整转换练习
📅 2026/7/9 21:32:40
👁️ 次浏览
SQL与关系代数实战从3个经典学生选课表到5类查询的完整转换练习在数据库系统学习中掌握SQL与关系代数的相互转换是理解查询本质的关键技能。本文将以学生(S)、课程(C)、选课(SC)三个经典表为基础通过5类典型查询场景系统讲解两种查询语言的对应关系帮助读者建立从理论到实践的完整知识框架。1. 基础表结构与关系代数运算回顾1.1 表结构定义我们使用以下三个表作为练习基础学生表Student(S)S(Sno, Sname, Age, Sex, Dept) 主键SnoSno-学号Sname-姓名Age-年龄Sex-性别Dept-所在系课程表Course(C)C(Cno, Cname, Credit, Teacher) 主键CnoCno-课程号Cname-课程名Credit-学分Teacher-授课教师选课表SCSC(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计算机 ∧ Age20)(Student)SQL实现SELECT * FROM Student WHERE Dept 计算机 AND Age 20;2.2 复杂条件选择例题2查询选修了课程号为C001且成绩在80-90之间的学生学号关系代数π(Sno)(σ(CnoC001 ∧ 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 ⋈ σ(CnoC001)(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 ⟕ SCSQL实现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)(σ(CnoC001)(SC)) ⋈ Student)SQL实现使用NOT EXISTSSELECT 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 EXISTSSELECT 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 查询优化原则选择下推尽早执行选择运算减少中间结果投影下推尽早去除不需要的列连接顺序小表优先连接避免笛卡尔积确保连接条件正确注意实际优化还需考虑索引、统计信息等因素通过这5类查询的完整练习我们系统建立了SQL与关系代数的对应关系。在实际数据库开发中理解这种对应关系有助于准确分析复杂查询语义优化查询执行效率设计更合理的数据库模式
Windows网络性能测试神器:iperf3完全指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds
你是否曾经怀疑过自己的网络速度是否达标&…
📅 2026/7/9 21:32:40
1. 项目概述:当2D艺术遇上3D引擎的性能博弈如果你正在用虚幻引擎5(UE5)的Paper2D插件制作一款俯视角游戏,比如Roguelike、策略战棋或者像素风ARPG,那你大概率正处在一个“甜蜜的烦恼”之中。一方面,UE5强大…
📅 2026/7/9 21:32:40
本文还有配套的精品资源,点击获取
简介:直接上手就能跑的海洋流场三维可视化项目,用OSGEarth在球面地球上实时渲染带时间变化的海流矢量动画。核心功能包括HYCOM格式海洋模型数据自动读取、时空双线性插值、流线几何体动态生成、地理坐标精…
📅 2026/7/9 21:31:40
1. 项目概述:为什么我们需要一个对话插件? 如果你正在用 Godot 做一款包含剧情的游戏,无论是 RPG、视觉小说还是带对话的冒险解谜,你迟早会碰到一个核心问题:怎么高效地管理那些分支复杂、带条件判断、还要能触发游戏事…
📅 2026/7/9 22:37:11
1. 项目概述:Unity水体Shader的挑战与价值 在Unity项目中,水体效果往往是决定场景氛围和视觉沉浸感的关键一环。无论是宁静的湖泊、汹涌的海洋,还是潺潺的小溪,一个高质量的水体Shader能瞬间提升项目的整体质感。然而,…
📅 2026/7/9 22:37:11
1. 这不是“又一个CLI工具”,而是把OpenAI代码能力塞进终端的实操手册你有没有过这种时刻:写一段Python脚本处理日志,卡在正则表达式上反复调试;给同事发SQL语句截图,对方却说“你这WHERE条件漏了索引字段”࿱…
📅 2026/7/9 22:37:11
1. 项目概述:为什么我们需要解包Godot资源? 如果你是一名Godot开发者,或者对游戏逆向工程、资源提取感兴趣,那你肯定遇到过这样的情况:看到一个用Godot引擎制作的游戏,里面有一些精美的角色立绘、独特的音…
📅 2026/7/9 22:37:11
OSAPIChecker最佳实践:提高操作系统API合规性的10个技巧 【免费下载链接】OSAPIChecker Operating system API compliance check tool. 项目地址: https://gitcode.com/openeuler/OSAPIChecker
前往项目官网免费下载:https://ar.openeuler.org/ar…
📅 2026/7/9 22:37:11
1. 项目概述:为什么你的游戏需要一个强大的制作系统?如果你正在开发一款包含资源采集、物品合成、装备打造或者城镇建设的游戏,无论是开放世界RPG、生存建造,还是模拟经营,一个核心的痛点很快就会浮现:如何…
📅 2026/7/9 22:36:11
掌握Docker多阶段构建镜像优化技巧在容器化技术日益普及的今天,Docker已成为开发与运维领域的基石工具。然而,随着应用复杂度提升,构建出的Docker镜像体积庞大、层数繁多、安全性欠佳等问题逐渐凸显,直接影响着部署效率、传输速度…
📅 2026/7/9 0:00:13
在当今快速迭代的IT运维与开发领域,自动化已成为提升效率、保障一致性的核心支柱。Ansible作为一款强大的IT自动化工具,以其无代理、简单易用的特点广受欢迎。而AWX,作为Ansible上游项目提供的企业级Web界面、API及任务引擎,则将A…
📅 2026/7/9 0:00:13
1. 项目概述:当动画成为性能瓶颈在Unity项目开发的中后期,尤其是涉及大规模场景、海量角色或复杂特效时,动画系统往往会成为性能的“阿喀琉斯之踵”。传统的骨骼动画(Skinned Mesh Renderer)虽然功能强大,但…
📅 2026/7/9 0:00:13
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/9 15:10:35
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/9 14:14:01
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/9 15:10:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/9 15:10:36
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/9 15:10:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/9 15:10:36