news 2026/9/26 18:16:47

中财ACCESS数据库复习题:SQL实战与考点解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中财ACCESS数据库复习题:SQL实战与考点解析

简介:这份《中财ACCESS数据库复习题》面向备考数据库原理与应用课程的学生,尤其适合正在准备期末或等级考试、需要系统梳理ACCESS核心考点的学习者。内容围绕数据库三级模式结构、关系模型完整性约束、并发控制、E-R模型转换、规范化以及SQL选择、投影、联接等操作展开,并配有教材第一章至第六章的选择题及详细答案解析,覆盖填空、选择等常见题型。资源包共1个docx文件,约23KB,以文字题目与答案为主,便于打印或电子化复习。已有67人学习下载。读者可借助其中的知识点归纳与真题解析,快速定位薄弱环节,掌握主键、视图、聚合函数等高频考点的解题思路,适合作为考前冲刺与查漏补缺的练习材料。

1. 中财ACCESS数据库复习题:一份能直接进ACCESS里跑通的题库

如果你正在准备中财的数据库及应用考试,或者带学生刷ACCESS的SQL题,这份《中财ACCESS数据库复习题.docx》大概率能省你不少时间。它不是那种只有答案没有解析的“裸题集”,而是把填空题、选择题、命令功能题、SQL建表与查询题、甚至第10章的VBA代码都收进来了,覆盖面从三级模式一路铺到DAO记录集操作。我翻完之后的判断是:它更像一份“考点地图”,你照着它过一遍,能快速定位自己哪块是空的。适合两类人:一是期末前需要集中刷题的学生,二是想用ACCESS练手SQL的初学者。但要注意,里面的SQL写法混了ACCESS特有语法和标准SQL,直接照搬到SQL Server或MySQL会翻车,后面我会把边界讲清楚。

2. 三级模式与关系模型:填空题背后的考点怎么串

2.1 三级模式不是背三个词就完事

复习题第一道填空题就是“外模式、________、内模式”,答案填概念模式。很多人背到这里就停了,但考试真正爱考的是三者之间的关系。外模式是用户视图,概念模式是全局逻辑结构,内模式是物理存储。ACCESS里你看到的“表”和“查询”其实偏外模式层面,而表之间的关系和约束才是概念模式。复习题里还有一道选择题问“数据库中的视图对应三级模式中的哪个”,答案是外模式。这两道题放在一起看,出题人的意图就很明显:让你分清“用户看到什么”和“数据库实际怎么组织”。

我一般会建议用一张对照表来记,比死背效率高:

三级模式对应ACCESS对象典型考题
外模式查询、窗体、报表视图属于哪层
概念模式表结构、关系、约束主键、外键定义
内模式存储文件(.mdb/.accdb)文件扩展名

这张表不是官方教材里的,是我自己刷题时总结的,能帮你把抽象概念落到ACCESS的具体对象上。

2.2 关系模型的三个完整性和主键选择

复习题里反复出现实体完整性、参照完整性、用户自定义完整性。实体完整性靠主键保证,参照完整性靠外键保证,用户自定义完整性就是CHECK约束那一类。有一道选择题问“实体完整性用什么保证”,答案是主码。还有一道问“外码的作用是什么”,正确选项是“在所引用的列的已有值范围内限制外码列的取值范围”。这个表述有点绕,翻译成人话就是:外键的值必须能在被引用的表里找到对应的主键值,否则插入失败。

主键选择也是高频考点。复习题里有一道:“工资关系中有工资号、姓名、职务工资、津贴、公积金、所得税等字段,哪个可以作为主键?”答案是工资号。理由很简单:工资号能唯一标识一条记录,其他字段都可能重复。这里有个容易踩的坑:如果一张表里没有明显的唯一字段,就要考虑复合主键。复习题第31题就考了这个——购买情况表允许一个顾客在不同时间对同一产品购买多次,主键必须是(顾客号、产品号、购买时间)三个字段的组合。只选顾客号或只选顾客号+产品号都不够,因为时间维度被漏掉了。

2.3 E-R模型转关系模型的规则

复习题里有一道填空题:“将E-R模型转换成关系模型遵守的原则是:一个实体型转化成一个________”,答案是关系。这个规则看起来简单,但实际考试会考联系怎么处理。一对多联系通常把“一”方的主键放到“多”方作为外键;多对多联系必须单独建一张关系表;一对一联系可以把任一方的主键放到另一方作为外键。复习题第33题就考了:“实体A与实体B之间是一对多联系,为反映两个实体之间的关联关系,应______”,正确答案是“将外码放置在实体B中”——这里B是多的一方。

概念结构设计的三个步骤也在填空题里出现了:设计局部E-R图、综合成初步E-R图、E-R图优化。这三个步骤的顺序不能乱,优化是最后一步,目的是消除冗余和冲突。

3. SQL语句实战:从建表到查询,把复习题里的题跑一遍

3.1 建表语句与数据类型映射

复习题最后一部分要求用标准SQL建立学生表、课程表、修课表,并且把语句存到sql.txt里。ACCESS的SQL视图里可以直接跑这些语句,但数据类型写法要注意。ACCESS支持TEXT、INTEGER、DATE等类型,但长度写法是TEXT(10)而不是VARCHAR(10)。下面是我在ACCESS查询视图里实测能跑通的建表语句:

-- 学生表:学号为主键,姓名非空 CREATE TABLE student ( sno TEXT(10) PRIMARY KEY, sname TEXT(8) NOT NULL, ssex TEXT(1), sage INTEGER, sdept TEXT(20) ); -- 课程表:课程号为主键,课程名非空 CREATE TABLE course ( cno TEXT(6) PRIMARY KEY, cname TEXT(10) NOT NULL, credit INTEGER, semester INTEGER ); -- 修课表:学号+课程号复合主键 CREATE TABLE sc ( sno TEXT(10), cno TEXT(6), grade INTEGER, type TEXT(4), PRIMARY KEY (sno, cno) );

逻辑说明:ACCESS的CREATE TABLE语句不支持VARCHAR,要用TEXT;主键可以写在字段后面,也可以用PRIMARY KEY(字段列表)单独声明。修课表的主键是复合主键,因为一个学生可以修多门课,一门课也可以被多个学生修,只有学号+课程号组合才能唯一标识一条修课记录。

参数说明:TEXT(10)表示最大10个字符,INTEGER是长整型,PRIMARY KEY声明主键。如果你在ACCESS里执行时报“语法错误”,先检查是不是用了VARCHAR或INT,换成TEXT和INTEGER基本能解决。

3.2 查询语句:从单表筛选到分组统计

复习题里的查询题覆盖了SELECT的典型用法。我挑几道有代表性的,把语句和考点拆开讲。

第一类:条件筛选。查询不是信息系、数学系的学生姓名、系和性别:

SELECT sname, sdept, ssex FROM student WHERE sdept NOT IN ('信息系', '数学系');

这里用NOT IN比用<> AND <>更简洁,考试里两种写法都算对,但NOT IN可读性更好。

第二类:模糊查询。查询姓“张”的学生详细信息:

SELECT * FROM student WHERE sname LIKE '张*';

注意ACCESS里模糊匹配用的是而不是%,这是ACCESS和标准SQL的一个大区别。复习题第21题也考了这一点:“如果想显示电话号码字段中6打头的所有记录,在条件行键入什么”,答案是Like "6"。如果你在ACCESS里写LIKE '张%',查不出结果,这是血泪经验。

第三类:分组统计。统计每个系的女生人数:

SELECT sdept, COUNT(*) AS 女生人数 FROM student WHERE ssex = '女' GROUP BY sdept;

逻辑说明:WHERE在分组前过滤,只保留女生记录;GROUP BY按系分组;COUNT(*)统计每组记录数。如果还要筛选分组后的结果,比如只显示女生人数大于5的系,就要用HAVING:

SELECT sdept, COUNT(*) AS 女生人数 FROM student WHERE ssex = '女' GROUP BY sdept HAVING COUNT(*) > 5;

复习题第14题考的就是这个结构。很多人会把HAVING写成WHERE,或者把聚合函数放在WHERE里,这两种写法在ACCESS里都会报错。

第四类:连接查询。查询职称是高级工程师的职工姓名、职称和所在部门:

SELECT 职工.姓名, 职工.职称, 部门.部门名称 FROM 职工 INNER JOIN 部门 ON 职工.部门号 = 部门.部门号 WHERE 职工.职称 = '高级工程师';

逻辑说明:INNER JOIN把职工表和部门表按部门号关联起来,WHERE筛选职称。复习题里有一道类似的题,但答案写的是“职称<>‘高级工程师’”,那个是题目本身有误,正确逻辑应该是等于而不是不等于。你在刷题时如果发现答案和题意矛盾,以题意为准。

3.3 更新、删除与表结构修改

复习题里有一道操作题:将职称为“高级工程师”的所有职工的职务津贴增加200元。语句是:

UPDATE 职工 SET 职务津贴 = 职务津贴 + 200 WHERE 职称 = '高级工程师';

参数说明:SET后面跟要修改的字段和新值,WHERE限定修改范围。如果不写WHERE,整张表的职务津贴都会加200,这是不可逆操作,执行前一定先SELECT确认范围。

删除记录用DELETE:

DELETE FROM 职工 WHERE YEAR(出生日期) < 1955;

注意ACCESS里日期函数用YEAR(),标准SQL里可能是EXTRACT(YEAR FROM 出生日期),两者不通用。

修改表结构用ALTER TABLE:

-- 增加字段 ALTER TABLE 部门 ADD 单位所在地 TEXT(20); -- 删除字段 ALTER TABLE 部门 DROP 单位所在地;

ACCESS的ALTER TABLE支持ADD和DROP,但不支持一次加多个字段,也不支持修改字段类型。如果你要改字段类型,只能在设计视图里手动改,这是ACCESS的限制。

4. 避坑与排查:刷ACCESS SQL题时最容易翻车的五个地方

4.1 通配符用错,查询结果为空

现象:写LIKE '张%'查姓张的学生,结果一条都没有。原因:ACCESS的SQL视图默认使用ANSI-89通配符,代表任意多个字符,?代表单个字符,%和_是标准SQL的通配符,在ACCESS里不生效。解决:把%换成,把_换成?。如果确实想用%和_,需要在ACCESS选项里开启ANSI-92兼容模式,但考试环境一般不会改这个设置,所以直接记ACCESS的写法更稳妥。

4.2 日期格式不对,条件筛选失效

现象:WHERE 签订日期 > #2005-1-1# 报错或查不出结果。原因:ACCESS的日期常量必须用#括起来,而且格式对区域设置敏感。有些机器上#2005-1-1#能识别,有些机器上必须写成#1/1/2005#。解决:统一用#月/日/年#格式,比如#1/1/2005#。复习题里用的是{^2005-1-1},那是Visual FoxPro的写法,在ACCESS里跑不通,别混用。

4.3 HAVING和WHERE混用,聚合条件写错位置

现象:SELECT 职员号 FROM 订单 GROUP BY 职员号 HAVING COUNT()>3 WHERE AVG(金额)>200 报错。原因:WHERE必须在GROUP BY之前,HAVING在GROUP BY之后。聚合函数不能出现在WHERE里。解决:把聚合条件全部放到HAVING里,写成HAVING COUNT()>3 AND AVG(金额)>200。复习题第14题的选项B就是正确写法,选项D把WHERE和HAVING的位置搞反了。

4.4 主键选错,插入重复记录

现象:向修课表插入两条学号相同但课程号不同的记录,第二条被拒绝。原因:主键只设了学号,没有把课程号加进去。解决:建表时用PRIMARY KEY(sno, cno)声明复合主键,或者在设计视图里同时选中两行再点主键按钮。复习题第31题考的就是这个点,购买情况表的主键必须是顾客号+产品号+购买时间的组合。

4.5 VBA代码里记录集未关闭,下次打开报错

现象:第10章的VBA代码运行几次后,再打开窗体提示“数据库已被占用”或“记录集已打开”。原因:cmd3_Click里虽然写了rst.Close和db.Close,但如果代码中途出错,Close不会执行。解决:在错误处理里加清理逻辑,或者用On Error GoTo Cleanup,在Cleanup标签里统一关闭记录集和数据库。我一般会在Form_Unload事件里也加一遍关闭操作,双保险。

5. 用DAO记录集把复习题变成可交互的窗体

复习题第10章给了一段完整的VBA代码,用DAO.Recordset操作“读者注册表”,实现了添加、查找、前后翻页、修改、删除。这段代码的价值在于:它把前面所有SQL知识点串成了一个可运行的小系统。如果你只是刷选择题,可能觉得VBA离考试很远,但中财的数据库及应用课程往往要求做一个课程设计,这段代码就是现成的模板。

我建议的进阶用法是:把第3章建的学生表、课程表、修课表导入ACCESS,然后仿照第10章的代码结构,做一个学生信息管理窗体。核心改动是把记录集的数据源从“读者注册表”换成“student”,字段名对应改掉。下面是我改过的关键部分:

Option Compare Database Dim rst As DAO.Recordset Dim db As DAO.Database Private Sub Form_Load() Set db = DBEngine.Workspaces(0).Databases(0) Set rst = db.OpenRecordset("student", dbOpenDynaset) ' 初始化文本框为空 txtSno.Value = "": txtSname.Value = "": txtSsex.Value = "" txtSage.Value = "": txtSdept.Value = "" End Sub Private Sub cmdAdd_Click() ' 学号和姓名不能为空 If RTrim(txtSno.Value) = "" Or RTrim(txtSname.Value) = "" Then MsgBox "学号和姓名不能为空", vbOKOnly, "错误提示" txtSno.SetFocus Exit Sub End If rst.AddNew rst("sno") = txtSno.Value rst("sname") = txtSname.Value rst("ssex") = txtSsex.Value rst("sage") = Val(txtSage.Value) rst("sdept") = txtSdept.Value rst.Update MsgBox "添加成功", vbOKOnly, "提示" End Sub Private Sub cmdDelete_Click() If Not rst.EOF Then If MsgBox("确认删除当前记录?", vbYesNo, "确认") = vbYes Then rst.Delete rst.MoveNext If rst.EOF Then rst.MoveLast Call ShowCurrent End If End If End Sub Private Sub ShowCurrent() ' 把当前记录的值填到文本框 If Not rst.EOF And Not rst.BOF Then txtSno.Value = rst("sno") txtSname.Value = rst("sname") txtSsex.Value = rst("ssex") txtSage.Value = rst("sage") txtSdept.Value = rst("sdept") End If End Sub

逻辑说明:dbOpenDynaset表示打开一个动态集,支持增删改。AddNew开始一条新记录,给字段赋值后必须调Update才会写入。Delete删除当前记录后,记录指针会失效,所以要MoveNext再判断是否到了末尾。ShowCurrent是一个自定义过程,把当前记录的值同步到文本框,翻页和删除后都调它。

参数说明:DBEngine.Workspaces(0).Databases(0)是获取当前数据库的引用,这是ACCESS DAO的固定写法。rst("sno")是字段引用,字段名要和表结构一致。Val(txtSage.Value)把文本转成数字,因为sage字段是整型。

验证方法:运行窗体后,先点添加,输入学号1001、姓名张三、性别男、年龄20、系别财经系,确认后记录写入。再点删除,确认删除后记录消失。最后用ACCESS的“表”视图打开student表,核对数据是否一致。如果窗体显示的数据和表里不一致,检查ShowCurrent里字段名有没有写错。

从那以后我每次用DAO操作记录集,都会在Form_Unload里强制加一遍rst.Close和db.Close,因为吃过亏——有一次调试时中途报错,记录集没关,再打开窗体就提示数据库被锁定,只能重启ACCESS。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 18:15:50

UV:Python环境管理的新基础设施与工程化实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 18:14:43

双线性池化+DenseNet细粒度识别实战指南

简介&#xff1a;本资源是杭州电子科技大学2024届本科生毕业设计项目——基于DenseNet的双线性网络模型完整代码实现&#xff0c;面向计算机视觉方向的大学生与深度学习自学者&#xff0c;聚焦图像特征建模与细粒度分类任务&#xff0c;助力毕设开发、模型复现与注意力机制原理…

作者头像 李华
网站建设 2026/9/26 18:14:01

把论文翻译成英文再翻回来,真的能降低AI率吗?

把论文翻译成英文再翻回来&#xff0c;真的能降低AI率吗&#xff1f; 网上有人说&#xff0c;把中文论文翻成英文&#xff0c;再翻回中文&#xff0c;句子变了&#xff0c;AI率也会下降。你照着做完&#xff0c;发现语言确实不像原稿&#xff0c;但方法名称变了&#xff0c;否…

作者头像 李华
网站建设 2026/9/26 18:13:11

螺旋开沟施肥机设计:参数计算、SW三维建模与工程图出图

做农机的朋友应该都清楚&#xff0c;果园、茶园、大棚里施肥最费人工的就是开沟这道工序。人工挖沟效率低、深度不均匀&#xff0c;大型拖拉机开沟机又进不了窄行距地块。螺旋开沟施肥机正好卡在这个需求点上&#xff0c;整机结构紧凑、开沟碎土能力强&#xff0c;能把开沟和施…

作者头像 李华
网站建设 2026/9/26 18:12:55

AI做PPT实战指南:从0到0.6的协作流程与避坑技巧

1. 先想清楚&#xff1a;AI做PPT到底能帮你到什么程度很多人第一次接触AI做PPT&#xff0c;脑子里想的都是“我输入一句话&#xff0c;它直接给我一份能上台讲的完整方案”。这个预期本身就把AI放错了位置。我前后用AI辅助做过几十份PPT&#xff0c;涵盖技术分享、项目复盘、培…

作者头像 李华