资讯详情

数据库原理实验报告:从建表到查询的完整实践指南

📅 2026/10/27 3:28:09 | 华诺云谱 👁 阅读
数据库原理实验报告:从建表到查询的完整实践指南
简介这份资源是南华大学《数据库原理》课程的实验报告文档面向大数据技术等专业学生及数据库初学者用于完成课程实验、理解数据库设计与SQL应用。报告围绕SQL Server Management Studio展开涵盖认识DBMS、创建数据库与数据表、定义主码外码与默认值、建立表间关系以及单表查询和多表连接查询等实验内容并涉及数据插入、更新、删除等基本操作可帮助读者对照实验题目与代码梳理建库建表思路、掌握SELECT筛选排序分组与JOIN连接写法。资源包共1个doc文件约5.38MB为完整实验报告正文含实验题目、要求与代码记录。目前已有377人学习下载适合需要参考实验流程、查漏补缺或准备课程作业的读者使用。1. 数据库原理实验报告到底是什么一份“把黑匣子拆开看”的说明书很多人第一次听到“数据库原理实验报告”脑子里浮现的是一沓打印纸、一堆截图和几段看不懂的 SQL。其实它更像一份“拆机笔记”数据库平时是个黑匣子你往里存东西、从里面取东西一切都很顺滑但里面到底怎么组织、怎么保证不出错普通人看不见。这份实验报告干的事就是把这个黑匣子打开让你亲手装一遍、拆一遍、再查一遍。通俗地说它记录的是一个人从“认识数据库管理系统”到“能写出像样查询语句”的完整过程。你会先建库、建表、拉关系再练单表查询、多表连接最后碰嵌套查询和组合查询。关键词里的“数据库原理”听着抽象落到实验里就是三件事数据放哪、数据怎么连、数据怎么问。搞懂这三件事你再看任何信息系统都不会觉得它神秘。2. 为什么先建表再查询数据库的“先盖房再住人”逻辑2.1 建库建表不是走流程是在定规矩实验一开始就要求创建数据库、定义三张表学生表、课程表、选修表。很多人以为这只是“把数据装进去”的前置动作其实它是在定规矩。表结构一旦定下来后面能存什么、不能存什么基本就被框住了。打个比方建表就像盖房子之前先画户型图。你说这间是卧室那它就不会被当成厨房用你说这个字段是学号那它就不该塞进去一个日期。实验里要求为每张表定义主码、选择合适的数据类型、决定是否允许为空、给性别和学分设默认值这些动作合起来就是在给数据立规矩。主码的作用是“一行数据不能长得一模一样”。学生表用学号做主码意味着同一个学号只能出现一次选修表用学号和课程号联合做主码意味着同一个学生选同一门课只能记一条。外码则是“你不能引用一个不存在的东西”选修表里的学号必须能在学生表里找到对应的人。这套约束就是数据完整性的底子少了它数据迟早会乱成一锅粥。提示初学者最容易忽略“是否允许为空”这一项。它看着不起眼但一个字段允不允许为空直接决定了后面查询时要不要处理“查不到”的情况。2.2 图形界面和 SQL 语句两条路通向同一个结果实验里有个很值得注意的设计同一个建库建表任务要求用两种方式各做一遍。一种是在管理工具里点鼠标、填表单另一种是直接写 SQL 语句。这不是为了凑工作量而是让你体会“工具背后到底发生了什么”。图形界面像自动挡汽车踩油门就走但你不知道变速箱在干什么SQL 语句像手动挡每一步换挡都得自己来但你对车的理解会深一层。实验要求用 SQL 语句创建数据库、建三张表同时指定主码、外码、默认值这其实是在逼你把图形界面里那些勾选项翻译成一句句可执行的命令。-- 以学生表为例建表时把主码、非空、默认值一次说清 CREATE TABLE Stu200905 ( 学号 CHAR(10) PRIMARY KEY, -- 主码唯一标识一个学生 姓名 VARCHAR(20) NOT NULL, -- 姓名不允许为空 性别 CHAR(2) DEFAULT 男, -- 性别给默认值减少重复输入 出生日期 DATE, 院系名称 VARCHAR(30), 备注 VARCHAR(100) );这段代码里PRIMARY KEY定的是主码NOT NULL管的是能不能空着DEFAULT管的是没填时自动补什么。参数看着多其实就回答三个问题这行数据靠谁区分、哪些格子必须填、哪些格子可以偷懒。把这三件事想清楚建表就不再是照抄题目。2.3 表间关系不是画着好看是查询的路线图三张表建好之后实验要求定义表之间的关系。学生表和课程表本身没有直接联系是选修表在中间牵线一个学生可以选多门课一门课可以被多个学生选这种多对多关系必须靠一张中间表来落地。这个结构像什么像快递系统。学生是收件人课程是包裹选修表就是那张运单。没有运单你只知道有哪些人、有哪些包裹但不知道谁收了哪个。查询的时候多表连接本质上就是顺着运单把人和包裹对起来。后面实验二里那些“查询选修了某门课的学生”“查询学生的选课情况”全是在这张路线图上走路。理解了这一层你就明白为什么实验要先建表再查询表间关系定得对不对直接决定后面连接查询写不写得出来。关系没拉好查询就会变成一团乱麻。3. 单表查询和多表连接从“翻一个抽屉”到“对多张清单”3.1 单表查询练的是“把条件说清楚”实验二的单表查询有十道题乍看五花八门其实都在练同一件事把你要什么用数据库听得懂的话说清楚。查计算机系全体学生、查姓李的学生、查没有先行课的课程、查有不及格成绩的学号这些题分别对应筛选条件的不同写法。WHERE子句就是那个“说清楚”的地方。比较运算符管大小逻辑运算符管组合LIKE管模糊匹配ORDER BY管排序GROUP BY管分组统计。拿“查询姓李的学生中姓名按字典顺序排序的前两个”来说它同时用到了模糊匹配、排序和取前几条是一道把多个动作串起来的小综合题。-- 姓李、按姓名排序、只取前两条 SELECT 学号, 姓名 FROM Stu200905 WHERE 姓名 LIKE 李% ORDER BY 姓名 LIMIT 2; -- 不同数据库写法略有差异核心是“排序后截取”这里的关键不是背语法而是理解执行顺序先按WHERE筛出姓李的人再按姓名排序最后截取前两条。顺序搞反了结果就变了。很多查询翻车不是语句写错而是脑子里对“先做什么后做什么”没概念。3.2 多表连接的核心是“先想清楚拿哪张表当主角”到了多表连接难度上一个台阶。实验要求比较内连接和外连接的结果这个要求很实在因为它是初学者最容易混的地方。内连接只保留两边都能对上的行外连接则会保留某一侧对不上的行对不上的地方补空。通俗地说内连接像“只算互相认识的朋友”外连接像“把单方面认识的人也列出来”。查询“所有学生的信息和他们的选课课程编号”时如果有的学生一门课都没选用内连接这个人就消失了用外连接他还在只是课程编号那栏是空的。选哪种取决于你到底想不想看见“没选课的人”。连接方式保留什么典型场景内连接两边都能匹配上的行只关心真正选了课的学生左外连接左表全部 右表匹配部分要列出所有学生包括没选课的右外连接右表全部 左表匹配部分要列出所有课程包括没人选的这张表不用背用的时候问自己一句对不上的那部分人我要不要看见答案清楚了连接方式就定了。3.3 分组统计是查询里的“汇总台”实验里还有一类题比如“查询选修了两门以上课程的学生学号与课程数”“按平均成绩降序排列”。这类题考的是分组统计GROUP BY把数据按某个维度归堆HAVING再对归好的堆做筛选。这里有个经典易混点WHERE和HAVING到底谁先谁后。WHERE是在归堆之前筛行HAVING是在归堆之后筛堆。你想“先排除掉某些学生再统计”就用WHERE你想“统计完了只要满足条件的组”就用HAVING。分不清这两个统计结果就会莫名其妙多一堆或少一堆。4. 嵌套查询和组合查询把简单问题叠起来问4.1 嵌套查询是“先问一个小问题再拿答案问大问题”实验三进入嵌套查询和组合查询。嵌套查询的结构像套娃里层查询先跑出一个结果外层查询拿这个结果当条件。比如“查询没有选修数据库原理课程的学生信息”思路是先查出选了这门课的学生再在外面把这些人排除掉。这种写法符合人的直觉遇到复杂问题先拆成小问题。里层负责“找出谁选了”外层负责“把这些人去掉”。写的时候要注意括号配对和层次关系实验要求里专门提了这一点因为嵌套一多括号少一个就全乱。4.2 UNION、INTERSECT、EXCEPT 是集合运算的三板斧组合查询考的是集合运算。UNION是并集把两个查询结果合在一起去重INTERSECT是交集只留两边都有的EXCEPT是差集留前一个有、后一个没有的。实验要求同一道题用组合查询和嵌套子查询两种方法各写一遍这个设计很妙因为它让你看到同一个问题可以有不同的问法结果一样但思路不同。打个比方UNION像把两个名单合并成一张总名单INTERSECT像找出两张名单上都出现的人EXCEPT像从第一张名单里划掉第二张名单上的人。集合运算的好处是直观坏处是不同数据库对关键字的支持不完全一样写之前得确认环境认不认。注意UNION默认会去重如果要去重就用它要保留重复得用UNION ALL。这个小差别在统计人数时特别容易踩坑。4.3 两种写法为什么都要会有人会问既然嵌套子查询能解决为什么还要学组合查询反过来也一样。原因在于不同写法适合不同场景。集合运算在“两个结果做加减”时更直白嵌套查询在“依赖中间结果做判断”时更自然。实验逼你把两种都写一遍是在训练你根据问题形状选工具而不是死记一种套路。这也解释了为什么实验报告要记录这么多道题它不是让你背答案而是让你在反复写的过程中形成一种感觉——看到问题先想它属于哪一类再决定用筛选、连接、分组还是集合运算。5. 常见误区这几个概念最容易搅在一起5.1 主码和外码一个管“我是谁”一个管“我指向谁”易混点在于两者都叫“码”初学者容易以为是一回事。混淆的原因是它们都出现在建表语句里长得像。区分方法很简单主码解决的是“这一行靠什么唯一识别”外码解决的是“这一列的值必须来自另一张表的某个码”。学生表的学号是主码选修表里的学号是外码同一个字段在不同表里身份不同。5.2 内连接和外连接差别就在“对不上的要不要”易混点是写出来都带JOIN结果却不一样。混淆的原因是初学时只看语法不看语义。区分方法是问自己对不上的行我是想丢掉还是想留着补空想丢用内连接想留用外连接。实验里专门要求比较两者结果就是为了把这个差别刻进脑子里。5.3 WHERE 和 HAVING一个筛行一个筛组易混点是两个都像“条件”。混淆的原因是它们都写在查询里位置也接近。区分方法是看它作用在什么上面WHERE作用在原始行上HAVING作用在分组之后的结果上。没有GROUP BY的时候基本用不上HAVING这个信号能帮你快速判断。5.4 嵌套查询和组合查询一个套着问一个并着算易混点是两者都能解决同一道题。混淆的原因是结果可能一样过程却不同。区分方法是看问题的形状如果逻辑是“先得到一个集合再拿它当条件”用嵌套如果逻辑是“两个集合做并、交、差”用组合。实验要求一题两写就是在练这个判断。5.5 允许为空和默认值一个管“能不能不填”一个管“不填时填什么”易混点是都跟“没填”有关。混淆的原因是建表时它们挨在一起。区分方法是允许为空回答的是“这个格子能不能空着”默认值回答的是“空着的时候自动补什么”。一个字段可以允许为空但没有默认值也可以不允许为空但给默认值两者是独立的两道开关。6. 什么时候用得上这套东西边界和真实判断这套实验内容的价值不在于让你成为数据库专家而在于给你一条判断边界什么时候该自己动手建表什么时候该直接查现成的。如果你面对的是一个全新的小系统数据关系清楚、量也不大那实验里这套“先定表结构、再拉关系、最后写查询”的流程完全够用。三张表、几个主外码、一批筛选和连接就能撑起一个选课、记账、登记类的小场景。这时候自己建表比套用现成模板更可控因为你知道每个字段为什么存在。但如果你面对的是数据量很大、多人同时读写、还要保证不出错的系统那实验里这些单机操作就只能算入门认知了。建表只是起点后面还有索引、事务、并发控制、备份恢复一大堆事。实验报告里没展开这些不代表它们不重要而是这个阶段的目标是让你先看懂“数据怎么组织、怎么问出来”。还有一种情况要提醒别把实验里的写法当成唯一答案。同一道查询题嵌套能写、连接能写、集合运算也能写选哪个取决于可读性和环境支持。我自己的习惯是写完一条查询先问自己三件事结果对不对、别人看不看得懂、换个大一点的数据还跑不跑得动。这三问不过关语法再漂亮也是白搭。从那以后我每次碰数据库不管是建表还是写查询都强制走一遍“先想关系、再想条件、最后想结果形状”的顺序翻车的次数明显少了。希望这份整理帮到你让你再看到“数据库原理实验报告”这几个字时不再觉得它是一沓看不懂的纸而是一张能按图索骥的认知地图。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑