③设置xb字段的有效性(验证)规则,要求性别必须为“男”或“女”;(答案:
xb$”男女”)
④设置kss字段的有效性(验证)信息:
课时数范围为2~8(答案:
kss>=2andkss<=8)
字段有效性信息:
【例题】设置将kc表的xf字段有效性(验证)信息:
某一门课的学分不能大于6
【答案】”某一门课的学分不能大于6”【记得要加英文引号】
6)记录有效性(验证)规则可以校验多个字段之间的关系是否满足某种规则,该规则也是一个逻辑表达式.(看题目中出现“表”或“记录”的字,就在“表选项卡”操作。
)
【例题】①为js表设置有效性(验证)规则:
工作日期(gzrq)与出生日期(csrq)之间至少相差20年
【答案】Year(gzrq)-Year(csrq)>=20
②设置表的记录有效性规则,要求kss值比xf值大(注:
对现有数据不验证此规则)。
【答案】kss>xf
③设置GZ表的记录有效性(验证)规则:
如果jbgz小于1000元,grsds的值为0,否则grsds的值为jbgz的5%(该规则对表中已有数据不作验证):
【答案】grsds=iif(jbgz<1000,0,jbgz*0.05)
“该规则对表中已有数据不作验证”的操作:
在设置完规则和信息后,点击“确定”按钮,则出现如右图,只需将复选框的“√”去掉。
记录有效性(验证)信息:
【例题】教师参加工作时至少20岁;【答案】”教师参加工作时至少20岁”【记得要加英文引号】
5)默认值【例题】①为性别(xb)字段设置默认值为“男”【答案】‘男’【记得要加英文引号】
②设置必修课(bxk)字段的默认值为逻辑真(.T.)
③将xb的默认值设置为空值(Null)。
【答案】.NULL.
解说:
很多同学为默认值的写法犯愁,到底要不要加引号或其它符号呢?
其实默认值就是给这个字段赋值,赋值类型不同,写法当然不同,如.T.、‘男’、{^1980-11-13}等
6)格式用于指定字段显示时的格式,是整个字段的格式。
常考点:
要求去掉前后空格:
输入大写字母T,
将字母转成大写显示(仅显示的时大写,实际上数据表里面仍然是小写):
输入!
7)输入掩码用于指定字段中输入数据的格式,是每个字符的格式。
要求会计格式:
999,999.99[表示六位整数位,用逗号做千分位,两位小数]
【例题】①设置kcdh字段的InputMask属性,使该字段的值只能是数字字符。
【答案】9999(kcdh字段的宽度为4,所以是4个9)
8)显示类其作用是指定在使用“表单向导”生成表单或数据环境中将字段拖放到表单上时,与该字段相应的控件类。
注意:
要记住各个控件的英文名字。
【例题】①设置bxk字段的有关属性,使得将该字段从表单的数据环境中拖放到表单上时,生成的相应控件为文本框控件。
②设置册数(cs)字段的有关属性,使得将该字段从表单的数据环境中拖放到表单上时,生成的相应控件为微调框控件。
9)添加字段,修改字段,删除字段等(略)
10)触发器绑定在表上的逻辑表达式,是在插入、更新、删除记录时进行的检验规则。
返回值为.T.时,允许执行相应操作,.F.时不允许执行相应操作。
触发器文本框中写入“允许”执行该操作时候的条件
【判断年份】为js表设置更新触发器:
仅允许修改2001年(含)以后参加工作的教师记录
Year(gzrq)>=2001
【字符型判断】为RK表设置插入触发器:
工号为“A0001的记录允许插入,否则不允许插入
gh=’A0001’
【限制开头字母,告之不允许条件】为RK表设置插入触发器:
工号以t或s开头的记录不允许插入
NOT(left(gh,1)=’t’ORleft(gh,1)=’s’)
题干中给出的是不允许条件,因此要在总的结果前面加上NOT,注意工号小写
【不允许删除】为KC表设置删除触发器:
不允许删除
.F.(允许删除的条件永远不为真)
【数字开头】已知数字0的ASCII码为48,9为57,为xs表设置插入触发器:
学号必须以数字开头,否则不允许插入
Between(ASC(xh),1),48,57)或ASC(xh)>=48AndASC(xh)<=57(只写允许时候的条件)
【判断为空】工号为空允许删除Empty(gh)
【判断长度】学号长度为6位Len(xh)=6
【其它条件】教师表打开时候允许更新Used(“js”)
11)索引表达式注意各种不同情况下的书写方法,分清楚索引名称(标识)和索引表达式
【单个字段】按ylbx(养老保险)创建一个普通索引,标识名为ylbx,要求按ylbx降序排序
【字符+数字】为gz表创建一个候选索引ghsfgz,要求按gh字段排序,gh相同再按sfgz排序
索引标识为:
ghsfgz表达式为gh+Str(sfgz)sfgz为数值型
【字符+字符】为xs表创建普通索引xdhzydh,要求按xdh排序,xdh相同再按zydh排序
索引标识为:
xdhzydh表达式为xdh+zydh为什么不要加STR?
【字符+日期】为xs表创建普通索引xdhcsrq,要求按xdh排序,xdh相同再按csrq排序
索引标识为:
xdhcsrq表达式为xdh+Dtoc(csrq,1)为什么要用,1
【首字母+数值】为gz表创建普通索引ghsfgz,要求按gh排序,gh相同再按sfgz排序
索引标识为:
ghsfgz表达式为Left(gh,1)+STR(sfgz)
【数值+数值】已知cj表中有两门课程成绩cj1和cj2,创建索引先按cj1排序,再按cj2排序
表达式为STR(cj1)+STR(cj2)
【数值+数值型】已知cj表中有两门课程成绩cj1和cj2,创建索引按总成绩排序
表达式为cj1+cj2
【其他】创建一个普通索引recsort,按物理记录顺序的倒序排序,即记录号为1的记录排最后。
表达式为recno()排序:
降序
12)替换字段替换字段是最头疼的题,分值高(2分),每年必考
(当题目中出现“修改”、“计算”、“调整”、“替换”或“填写╳╳字段的值”等,就为该题型)
1、修改gzb表中所有记录的zfbt(住房补贴)字段的值,规则为:
1998年(含1998年)以后参加工作的教师(注:
gzrq字段为工作日期)其住房补贴为基本工资(jbgz)的19%,而其他教师没有住房补贴。
打开gzc表,并浏览,选择“表”菜单里面的“替换字段”
字段:
jbgz
替换为:
zfbt*0.19(这里只写字段的新值,千万不要写成jbgz=zfbt*0.19带等号形式)
作用范围:
All
For:
Year(gzrq)>=1998
2、修改gzc表中所有教授的记录,计算(医疗保险)ylbx,算法为:
医疗保险为基本工资的19%
答案
字段:
ylbx
替换为:
zfbt*0.19
作用范围:
All
For:
zc=‘教授’
3、根据jg字段的值来填写jiguan字段的值:
如果jg值为两个汉字,则加“市”,否则在前两个汉字后加“省”、最后加“市”。
例如jg为“上海”,则jiguan为“上海市”;jg为“江苏南京”,则jiguan为“江苏省南京市”;jg为“江苏张家港”,则jiguan为“江苏省张家港市”,等等。
答案
字段:
jiguan
替换为:
iif(len(jg)=2,jg+”市”,left(jg,2)+”省”+substr(jg,3)+”市”)
作用范围:
All
4、将GZ表中基本工资(jbgz)在1000元以上(包括1000元)记录的其他(qt字段清为零)。
5、在JS表中更改所有教师记录的简历(jl),修改方法为:
将gzrq转化为字符串,然后在字符串的前面加上“工作日期:
”,且不管原来日期是哪一种显示格式,转化后的字符串格式都为yyyymmdd。
如gzrq字段值为08/09/70,则更改以后该记录简历字段的值为“工作日期:
19700809”。
注意:
很多限制条件隐含在题干中,请仔细看题
说明:
以上操作可以用命令(UPDATE—SQL或REPLACE)实现
13)插入记录浏览表,“显示”—“追加新记录”
14)删除记录删除记录分逻辑删除(作删除标记)和物理删除(彻底删除),具体操作为:
打开要操作的表,并浏览,选择“表”菜单里面的“删除记录”
【例题】将xs表中籍贯(jg)不属于“江苏”的记录作逻辑删除
打开要xs表,并浏览,选择“表”菜单里面的“删除记录”
作用范围:
All
For:
jg!
=”江苏”
说明:
若是彻底删除,要再选择“表”菜单里面的“彻底删除”或在命令窗口中输入:
PACK。
逻辑删除也可以用命令(DELETE—SQL或DELETE—FOR)实现。
15)永久关系在数据库设计器中,拖动主表的主索引,拖到从表的普通索引上去
16)参照完整性在数据库设计器窗口打开情况下,选中连线,点右键,“编辑参照完整性”
如有错误窗口,请参考窗口中的提示,进行“数据库”菜单中的“清理数据库”
更新规则:
级联、限制、忽略(对主表而言)
更新级联:
当修改主表的关键字的值时,若子表有相应的记录,则同步修改子表的记录。
更新限制:
当修改主表的关键字的值时,若子表有相应的记录,则禁止对主表记录的修改。
更新忽略:
当修改主表的关键字的值时,不管子表有无相应的记录,只更新主表。
删除规则:
级联、限制、忽略(对主表而言)同更新规则
插入规则:
限制、忽略(对子表而言)
插入限制:
当向子表中插入一个新记录或更新一个已经存在的记录时,若主表中不存在匹配的关键字值,禁止插入。
插入忽略:
当向子表中插入一个新记录或更新一个已经存在的记录时,不管主表,允许插入。
三、保存问题
在这一大题中,保存是不需要点击常用工具栏上的“保存按钮”的,具体保存方法为:
1.对项目管理器操作的题目,只要在有“确定”按钮的窗口中点击“确定”即可,如没有“确定”按钮,例如把文件改为“排除”等,只要按指定的操作即可,并且可以查看到结果。
2.
对于修改表结构的题目,在做完题目后,点击“确定”按钮,出现如下图1所示对话框,点击“是”,就保存好了。
切记不要点击“取消”按钮或窗口右上角的“关闭”按钮,否则将会出现如下图2所示,就会放弃结构的修改,这样就没有保存做过的题目。
图1图2
3.对于修改表记录的题目,包括插入、更新、删除记录,操作完就自动保存,无须再保存了。
4.对于数据库修改的题目,永久关系的保存,自动的,参照完整性的保存,只要在出现的对话框中点击“确定”或“是”按钮就保存好了。
第二章、设计查询
1、考试时不用新建查询,软盘中项目test中“查询”下面有一个“chaxun”,双击打开查询设计器
2、数据源的添加:
添加表和视图,注意如果是多个表(或查询)的话,按给定的顺序添加表和视图,要留意联接的类型,默认的联接类型为内联接。
联接类型:
内联接、左联接、右联接和外联接。
内联接:
以两张表相同字段的交集为输出结果;
左联接:
以两张表相同字段中左边表字段的集合为输出结果;
右联接:
以两张表相同字段中右边表字段的集合为输出结果;
完全联接:
以两张表相同字段的并集为输出结果;
3、字段:
(1)对于字段列表中有的字段,直接双击即可添加到右侧,反之需要使用下列函数编辑
(2)合计函数表达式:
count()、sum()、avg()、max()、min()
Count():
学生人数,教师人数,课程门数等这些是将表中的行进行数数,用Count(*)没有条件限制;
Sum():
对某个数值型字段求和,如对cj求和得到总成绩,对xsl求和得到总销售量,对xf求和得到总学分,对jbgz求和得到工资总额;
Avg():
对某个数值型字段求平均,如对cj求和得到平均成绩;
Max()、Min():
对某个字段求最大值,最小值(一般指数值型的字段)
说明:
一般要给这些函数指定列标题,用AS短语实现,例如:
sum(cj.cj)as总分
(3)其它函数表达式:
例如:
left(xh,2)as年级,year(date())-year(csrq)as年龄等
(4)字符串常量:
在输出结果中该列将以字符串的内容为结果
说明:
AS短语可以用在上面4种情况。
4、筛选:
对表(数据源)中某个或某几个原始字段(不是计算出来的字段)进行限制,如xb=”男”,也可以是SELECT—SQL命令
5、排序:
记得同时有几个排序条件时候,每个字段可以有不同的升序/降序选择
6、分组:
指定把那些字段中相同的记录值放在一起运算(如求平均、求和,计数等)
说明:
在一般情况下,只要在前面用到了合计函数中的任何一种,就要分组。
分组的依据要看用到合计函数的字段的定语,例如:
基于XSST视图和专业(ZY)表查询每个系各专业男、女生的人数。
其中人数要用到合计函数count(),人数的定语为:
系、专业、男女生,所以分组依据就为:
xdh、zydh、xb。
满足条件:
对计算出来的字段(查询结果),如“总成绩”、“课时酬金”进行条件限制
7、杂项:
指定只显示前多少项或前多少百分比的记录显示、是否显示重复记录等
【例题1】在SJK中包含一个名为RKVIEW的视图,该视图中包含教师的任课情况,其中有教师上的每一门课的课时数(kss)。
假定教师的上课酬金为每学时20元,按如下要求修改查询:
基于RKVIEW视图和教师(JS)表,查询每个教师的上课总学时及上课酬金,要求输出字段为:
gh、xm、xb、总学时、上课酬金,查询结果按gh的升序排序。
解答:
字段:
js.gh、js.xm、js.xb、Count(rkview.kss)as总学时、Count(rkview.kss)*20as上课酬金
筛选:
无
排序:
js.gh
分组:
js.gh【为什么要用工号分组?
】
杂项:
无
【例题2】在SJK中包含一个名为XSST的视图,该视图中包含学生的性别(xb),所在的系代号(xdh)、系名称(ximing)、专业代号(zydh),另外在SJK的专业(zy)表中包含有专业名称(zymc)字段。
按如下要求修改查询:
基于XSST视图和专业(ZY)表查询每个系各专业男、女生的人数。
要求输出字段为:
xdh、ximing、zydh、zymc、xb、学生人数,查询结果按xdh的升序排序,如果xdh相同,则按zydh的升序排序。
解答:
字段:
xsst.xdh、xsst.ximing、xsst.zydh、zy.zymc、xsst.xb、Count(*)as学生人数
筛选:
无
排序:
xsst.xdh、xsst.zydh
分组:
xsst.xdh、xsst.zydh、xsst.xb【本题目是理解“分组”的最好例题】
杂项:
无
【例题3】TEST项目中已经存在查询chaxun,且在SJK中学生(XS)表包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)、系代号(xdh)和专业代号(zydh)字段,专业(ZY)表含有专业代号(zydh)和专业名称(zymc)字段。
按如下要求修改查询:
基于XS表和ZY表查询“01”年级每个专业女生所占比例。
要求输出字段包括:
zydh、zymc、年级、女生人数、总人数和女生所占比例,查询结果按女生所占比例从高到低排序(bjbh字段值的前二位表示年级)。
解答:
字段:
xs.zydh、zy.zymc、Left(bjbh,2)As年级、Sum(iif(xb=’女’,1,0))as女生人数、Count(*)as总人数
Sum(iif(xb=’女’,1,0))/Count(*)as女生所占比例
[本题是理解条件计数的最好题目,注意这里有一处用Sum来数记录条数]
由于同时要求计算全体人数和女生人数,而分组是根据zydh(分组之后每组有男有女),显然不能再一概用Count(*)计算,Count(*)计算总人数,而用Sum来进行“条件计数”来计算女生数。
筛选:
无
排序:
女生所占比例降序
分组:
xs.zydh
杂项:
无
【例题4】在TEST项目中已经存在查询chaxun,已知在SJK的学生(XS)表中含有系代号(xdh)、学号(xh)、姓名(xm)等字段;成绩(CJ)表中含有学号(xh)、课程代号(kcdh)、成绩(cj)等字段。
按如下要求修改查询:
基于XS表和CJ表查询“刘玉敏”同学所在系的每位同学的平均成绩,输出xdh、xh、xm、平均成绩,查询结果按姓名排序。
(提示:
筛选条件中使用SELECTxdhFROMxsWHERExm=’刘玉敏’;查询保存并关闭设计器后,可能无法再次在设计器中打开,只能在编辑窗口中修该查询的SELECT-SQL语句。
)
解答:
字段:
xs.xdh、xs.xh、xs,xm、avg(cj)as平均成绩
筛选:
字段:
xs.xdh,条件:
IN,实例:
SELECTxdhFROMxsWHERExm=’刘玉敏’
[本题是子查询的题目,注意筛选的设置]
排序:
xs,xm
分组:
xs.xh
杂项:
无
【例题5】按如下要求修改TEST项目中的查询的chaxun:
为了检查课程(KC)表中是否有学生没有选的课程,可以基于KC表和成绩(CJ)查询出在课程表中存在而在成绩表中不存在的那些课程记录。
要求:
输出课程表的所有字段和成绩表的课程代号(kcdh)字段。
查询结果中相同的记录(行)只需出现一次,并按KC表的kcdh字段升序排序。
(提示:
使用“左连接”联接KC和CJ表,然后在结果中选出Cj.kcdh字段为Null值的记录)。
解答:
字段:
kc.*、cj.kcdh(kc.*表示kc的所有字段)
联接:
左联接[本题是左联接的题目,注意满足条件的设置]
筛选:
无
排序:
kc.kcdh
分组:
无
满足条件:
字段:
cj.kcdh,条件:
ISNULL
杂项:
无重复记录
【例题6】已知图书(TS)表中含有分类号(flh)、入库日期(rkrq)、价格(jg)和册数(cs)等字段。
在TEST项目中已存在查询chaxun,按如下要求修改查询:
基于图书(TS)表统计各大类图书上半年和下半年入库的馆藏册数、金额。
要求输出字段为:
大类、入库时间、馆藏册数、金额,查询结果首先按大类降序排序,同一大类中再按入库日期排序。
注:
●分类号(flh)的第一个字符表示大类;
●如果入库月份在1至6月,则入库时间为“上半年”,否则入库时间为“下半年”;
●金额为jg×cs
解答:
字段:
left(flh,1)as大类、iif(month(rkrq)>=1andmonth(rkrq)<=6,“上半年”,“下半年”)as入库时间、count(*)as馆藏册数、sum(jg*cs)as金额
筛选:
无
排序:
1,2
分组:
1,2
说明:
这里的1,2代表着查询结果中输出的第1列和第2列。
当排序和分组依据是表达式时,可以用数字代替。
其他情况:
1、不显示重复,显示前多少名,前多少百分比等,在“杂项”页面中
2、提示“不能访问选定表”,表明当前的数据库没有打开,请展开数据库sjk前面的“+”号
3、查询去向:
在查询设计