3.2.2 查询中的运算符
运算符是构成查询的基本元素。在Access查询中提供了算术运算、关系运算、逻辑运算、日期运算、连接运算、特殊运算等6种运算符。
1.算术运算
算术运算包括加法(+)、减法(-)、乘法(*)、除法(/)、整除(\)、乘方(^)、求余数或求模运算(Mod)等7种运算。其中加法(+)、减法(-)、乘法(*)和除法(/)的运算规则和数学中的算术运算规则完全相同。
(1)对于整除(\)运算。用两个数作除法,结果只保留整数部分,舍去小数部分,不做四舍五入运算。如果整除运算的被除数和除数包含小数部分,则直接舍去小数部分后再作运算。例如,7\2=3,7.7\3.4=2。
(2)对于乘方(^)运算。其运算规则与数学中的运算规则一致,需要注意的是乘方运算的写法。例如,2^2^2等价于(22)2而不是2×2×2,表达式的结果是16而不是8。
(3)对于求余运算(Mod)。用两个数作除法,结果为商的余数。如果求余运算的被除数和除数包含小数部分,则四舍五入取整数后再作运算。如果被除数是负数,结果也是负数;如果被除数是正数,结果也是正数。例如10Mod4=2,10.5Mod2.4=1,-10Mod-3=-1,12Mod-5=2,3Mod7=3,-3Mod-10=-3。
2.关系运算
关系运算用来比较两个数据的大小关系,其结果为逻辑值True或False。关系运算包括等于(=)、不等于(<>)、大于(>)、大于或等于(>=)、小于(<)和小于或等于(<=)等6种运算。需要注意的是,大于或等于(>=)中的大于或等于只要满足其中一个关系,表达式结果即为True,小于或等于(<=)运算规则和大于或等于(>=)中的运算规则类似。例如,10>=10结果为True,1=2结果为False,"ab"<>"abc"结果为True。
3.逻辑运算
逻辑运算符可以将逻辑型数据连接起来,表示更复杂的条件,其结果仍是逻辑值。常用的逻辑运算符有3个:与(And)、或(Or)和非(Not)。
(1)逻辑与运算将两个逻辑值连接起来,只有两个逻辑值同时为True时,结果才为True。只要其中有一个False,结果即为False。例如,7>=7And8<10结果为True,10>=4And7<>7结果为False。
(2)逻辑或运算将两个逻辑值连接起来,只有两个逻辑值同时为False时,结果才为False。只要其中有一个为True,结果即为True。例如,7>7 Or 8=10结果为False,10>=4 Or7<>7结果为True。
(3)逻辑非运算只作用于其后的第一个逻辑值。若该逻辑值为True,则结果为False;若该逻辑值为False,则结果为True。例如,Not(7<>6)结果为False,Not(7=6)结果为True。
逻辑运算符的运算规则如表3.1所示。
表3.1 逻辑运算规则
4.连接运算
连接运算可以将两个文本从左至右连接成一个新的文本。连接运算符有(+)和(&)两个。
(1)“+”运算要求连接的两个数据都是文本型时,才能将两个文本连接成一个新的文本。例如,"Access程序"+"设计与应用"的结果是"Access程序设计与应用"。
(2)“&”运算可以做强制连接,连接的两个数据可以是文本型也可以不是文本型。当连接数据不是文本型时,可以将其转换成文本型再进行连接。例如,123&456结果为"123456","2+3="&(2+3)结果为"2+3=5"。
当一个表达式由多种运算符组成时,需要考虑运算符之间的优先级。表3.2列出了算术运算、关系运算、逻辑运算和连接运算之间的优先级以及各类运算符中所包含运算符的优先级。
表3.2 运算符的优先级
关于表3.2中的运算符优先级作如下说明:
(1)优先级:算术运算>连接运算>关系运算>逻辑运算。
(2)所有关系运算符和所有连接运算符的优先级相同,按从左至右顺序运算。
(3)所有算术运算符和所有逻辑运算符必须按照表3.2所示优先顺序运算。
(4)括号优先级最高。
在Access查询中,还提供了两种专有运算,即日期运算以及特殊运算。
5.日期运算
日期型运算通常有加法(+)和减法(-)两种,其运算规则如下:
(1)两个日期型常量相减,得到的结果为两个日期间隔的天数,这个结果是一个整数。例如,#2017-5-8#-#2017-5-1#=7、#2017-5-7#-#2016-5-8#=365。
(2)日期型常量加或减一个整数,相当于给该日期加上或减少整数所表示的天数。例如,#2017-5-8#+10=#2017-5-18#、#2017-5-8#+30=#2017-6-7#。
(3)日期型常量大小的比较。日期型常量首先比较年的值,年的值相同比较月的值,月的值相同比较日的值。
6.特殊运算
1)Between …and…
用于指定一个到一个字段值的范围。Between A and B表示>=A且<=B的一个范围。字段值在这个范围内,结果为True,超出这个范围,结果为False。例如,Between 0 and 100表示的是[0,100]的范围,Between #2017-1-1# and #2017-12-31#表示的是2017年一整年。
2)In
用于指定一个字段值的列表。判断字段值是否等于列表中的值,如果相等,结果为True,否则结果为False。例如,In("男","女"),可判断字段值是否等于“男”或“女”中的一个,只要与其中的一个值相等,结果就为True,与列表中的值都不相等,结果为False。
3)Like
用于指定查找文本型数据的字符模式。在查询中,判断字段值是否符合Like右侧所给出的字符模型,如果符合,结果为True,否则结果为False。Like右侧的字符模式通常由通配符和字符组成。表3.3给出了通配符的使用方法。
表3.3 通配符的用法
4)Is Null/Is Not Null/ Not Is Null
Is Null用于判断一个字段是否为“空值”。Is Not Null/ Not Is Null用于判断一个字段是否“非空”。需要注意的是,空格也是字符的一种,空值指的是没有任何数据。文本型数据的空值也可以用""来表示。