简介这份《中财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的系就要用HAVINGSELECT 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确认范围。删除记录用DELETEDELETE 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。希望帮到你。本文还有配套的精品资源点击获取
