由于ACCESS数据库与SQL稍有差异,查询语句也有一定差异。本文综述ACCESS的查询语句的编写,并结合提出优化设想 。文中的方法在ASP+ACCESS 2015条件下测试通过

为说明下面的实例,先创建一个表,并录入以下数据

Android 多条件查询数据库 access多条件查询语句_字段

 

  

数据库的一般查询语句是:select * from [tab1] where c_name='周伟'

where 跟的就是查询条件。常用的查询条件有:

1、“=” 等值查询

2、like 模糊查询

3、between  区间查询

4、in  多条件查询

5、函数查询

以上几项查询仅代表本文观点,主要用于分类描述。

等值查询  =

因为查询字段的属性不同,代码编写也有特定要求

字符型查询:

查询示例:select * from [tab1] where c_name='周伟' order by c_id asc,结果得到姓名为“周伟”的记录

重点:查询值用''包围

日期型查询:

查询示例:select * from [tab1] where c_date=#2012-12-15# order by c_id asc,结果得到2012年-12-15入职人员的记录

重点:查询值用##包围

逻辑型查询:查询示例:select * from [tab1] where c_marriage=false order by c_id asc,结果得到未婚人员

重点:逻辑为真时表达为c_marriage=false,可省略为 c_marriage

数字型查询:

查询示例:select * from [tab1] where c_age>25 order by c_id asc,结果得到25岁以上人员

Android 多条件查询数据库 access多条件查询语句_查询语句_02

  重点:连接式可以为=,>,<,>=,<=

 

 模糊查询 likelike适用于查询字段中的文本。一般配合通配符 % 使用。需要查询的文本用 ‘’包围。

查询示例:select * from [tab1] where c_department like '%大%' order by c_id asc,查询结果为含有“大”的部门

Android 多条件查询数据库 access多条件查询语句_区间查询_03

 %是通配符号,代表1-n个字符、数字

查询示例:select * from [tab1] where c_department like '亚%' order by c_id asc,去掉前面的%,查询结果为开头为“亚”的部门

Android 多条件查询数据库 access多条件查询语句_字段_04

同理,如果去年后面的%,如%亚。查询结果就是最后为“亚”的部门。

如果前后通配符全部取消, like  '亚' 等同于等值查询中的  =‘亚’


like还可以结合[  ]使用。[    ]中的字符会逐个查询,如like '%[亚非]%' ,不是查询"[亚非]"关键词,而是分别查询 “亚”、“非”。查询结果如下:

Android 多条件查询数据库 access多条件查询语句_区间查询_05

 也可以like '[亚非]%' 或like '%[亚非]' ,分别指定开头或结尾的关键词。

[   ]中关键词可结合“!”使用,表达为逻辑非。

查询语句:select * from [tab1] where c_department like '[!亚非]%' order by c_id asc,将得到不是“亚”和“非”开头的部门

Android 多条件查询数据库 access多条件查询语句_查询语句_06

 

   需要注意的是,采用“!"定义关键词只能在开头或者结尾查询, like '[!亚非]%'  或  like '%[!亚非]'  都是有效的查询,而  like '%[!亚非]%',逻辑定义是,在任何位置只要不是”亚“或者”非“,条件成立。将得到全部记录。 

在like语句中使用[  ]标识关键词在单独字母字段中更为实用,还可以简写为[a-d]=[abcd],查询字段 like '[a-d]' 等同于 查询字段 in('a','b','c','d'),也等同于 ( 查询字段=’a')or ( 查询字段='b') or ( 查询字段='b')  or  ( 查询字段='b')
网上介绍,like语句可以使用通配符 ”#“”?""*""-"在本环境下并未得到验证,应该中sql专用格式,并不适用于access。

区间查询 between

     区间查询的基本格式为 between aa  and bb,aa和bb必须为同一类型变量,并且与字段属性相符合。通常仅针对数字的日期进行查询

   查询示例:select * from [tab1] where c_age between 25 and 40 order by c_id asc,查询的结果是

工号

姓名

部门

职位

入职日期

性别

年龄

婚否

2012002

刘胡静

欧洲区

B

2012/12/15


25

False

2013001

宗玉明

亚洲区

B

2013/5/1


33

True

2013002

杨杨

非洲区

C

2013/6/10


28

True

2014002

王琴

美洲区

B

2014/6/15


28

True

2015001

李明月

美洲区

B

2015/1/1


26

False

2015002

李承中

非洲区

a

2015/5/6


32

True

2016002

anna

美洲区

c

2016/3/15


30

True

2017001

ai5zhou

欧洲大区

b

2016/3/15


34

False

多条件查询 in

实际是等值查询的一种。同一查询条件具有多个参数时,可用in(参数1,参数2,.......)的格式实现。

因为查询字段属性的不同,查询参数也需要不同的格式。格式要求等同于等值查询。文本型参数用''包围,日期型参数用##包围。

查询示例:select * from [tab1] where year(c_date) in(2012,2013) order by c_id asc,查询的结果是入职时间为2012-2013年的人员。

Android 多条件查询数据库 access多条件查询语句_字段_07

 

 函数查询

有时,我们过滤字段可能比限制查询参数更高效。这就需要用到函数。

上例中,我们需要查询入职时间为2012-2013年的人员,可以这样写:c_date>=#2012-1-1 and c_date<=#2013-12-31 。实际上, 我们用了一个函数year(),代码简化为year(c_date) in(2012,2013)就更容易理解。

需要注意的是,只能用内置函数,而不能使用自定义函数。

常用的函数有:

1、year()  month()   day()

可以分别从查询字段中提取年月日,将日期比较转化为数字比较

2、len()

查询示例:select * from [tab1] where len(c_name)=2 order by c_id asc,查询的结果是名字为两个字符的人员

Android 多条件查询数据库 access多条件查询语句_区间查询_08

3、left() right() mid()

可以限制查询条件的定位。

查询示例:select * from [tab1] where mid(c_department,3,1)='大' order by c_id asc,查询的结果是查询字段中第三个字符为“大”的部门。

Android 多条件查询数据库 access多条件查询语句_查询语句_09

 

 

 其它的查询函数还有max()、min()、count()等,可以分别获得记录集最大值、最小值、记录数。由于主要涉及分组查询,不在本文讨论。

 总结

1、不同类型的查询参数需要不同的定义。文本型参数用''包围,日期型参数用##包围。

2、查询参数为单一值的查询一般用等值查询,效率更高。

3、查询参数不是单一值的。

(1)连续性、区间性数值或日期型参数值,可以使用 between 进行查询
 (2)文本型查询

  等值查询的,可以用 like '[abc]',对应  a、b、c,也可以用 in('a','b','c')

 包含式查询的,可以用 like'%[abc]%' ,对应 ade,kas,目录a,hhvc,jcd,b目录等

 4、特定条件下,可以通过函数对查询字段进行转化过滤,最常用的就是将日期型字段转化为数字