由于ACCESS数据库与SQL稍有差异,查询语句也有一定差异。本文综述ACCESS的查询语句的编写,并结合提出优化设想 。文中的方法在ASP+ACCESS 2015条件下测试通过
为说明下面的实例,先创建一个表,并录入以下数据
数据库的一般查询语句是:select * from [tab1] where c_name='周伟' order by c_id asc
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岁以上人员
重点:连接式可以为=,>,<,>=,<=
模糊查询 like
like适用于查询字段中的文本。一般配合通配符 % 使用。需要查询的文本用 ‘’包围。
查询示例:select * from [tab1] where c_department like '%大%' order by c_id asc,查询结果为含有“大”的部门
查询示例:select * from [tab1] where c_department like '亚%' order by c_id asc,去年前面的%,查询结果为开头为“亚”的部门
同理,如果去年后面的%,如%亚。查询结果就是最后为“亚”的部门。
如果前后通配符全部取消, like '亚' 等同于等值查询中的 =‘亚’
like还可以结合[ ]使用。[ ]中的字符会逐个查询,如like '%[亚非]%' ,不是查询"[亚非]"关键词,而是分别查询 “亚”、“非”。查询结果如下:
也可以like '[亚非]%' 或like '%[亚非]' ,分别指定开头或结尾的关键词。
[ ]中关键词可结合“!”使用,表达为逻辑非。
查询语句:select * from [tab1] where c_department like '[!亚非]%' order by c_id asc,将得到不是“亚”和“非”开头的部门
需要注意的是,采用“!"定义关键词只能在开头或者结尾查询, 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年的人员。
函数查询
有时,我们过滤字段可能比限制查询参数更高效。这就需要用到函数。
上例中,我们需要查询入职时间为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,查询的结果是名字为两个字符的人员
3、left() right() mid()
可以限制查询条件的定位。
查询示例:select * from [tab1] where mid(c_department,3,1)='大' order by c_id asc,查询的结果是查询字段中第三个字符为“大”的部门。
其它的查询函数还有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、特定条件下,可以通过函数对查询字段进行转化过滤,最常用的就是将日期型字段转化为数字
标签:asc,like,查询方法,查询,access,sql,where,id,select From: https://www.cnblogs.com/bypwq/p/17224314.html