首页 > 数据库 >access的查询方法、条件以及 sql查询条件的优化

access的查询方法、条件以及 sql查询条件的优化

时间:2023-03-17 15:47:33浏览次数:55  
标签:asc like 查询方法 查询 access sql where id select

由于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

相关文章

  • sql语句
    1./查询年龄小于17岁的女学生的学号和姓名/selectsno,snamefromswhereage<17andsex="f"2./检索男学生所学课程的课程号和课程名。/方法一:selectcno,cname......
  • sql多列in的用法及逻辑
    假设表结构及数据如下:sql多列in查询涉及到的查询逻辑如下:1、一般场景我们希望查询结果是 cc=1 dd=2  或者cc=2dd=4的这两行,sql语句如下:SELECT*fromtes......
  • C# 连接SQL数据库 ,增删改查
     Default3.aspx.cs1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Data;//数据库执行方式4usingSystem.Data.SqlClient;//数据库5us......
  • MySQL(七)索引
    索引的数据结构1为什么使用索引索引概述索引(Index)是帮助MySQL高效获取数据的数据结构。是“排好序的快速查找结构”,满足特定的查找算法索引是在存储引擎中实现......
  • MySQL(六)存储引擎
    存储引擎​ 连接管理、查询缓存、解析器和执行器被归为MySQLservice,而把真实存储数据的功能划分为存储引擎的功能。所以MySQLservice经过查询优化后,只需按照生成的执行......
  • MySQL(五)配置文件、系统变量与MySQL架构
    1配置文件的使用my.cnf配置文件/etc/my.cnf:[root@hadoop103~]#cat/etc/my.cnf#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/......
  • MySQL(八)哈希索引、AVL树、B树与B+树的比较
    Hash索引简介​ 这部分略了Hash索引效率高,为什么还要设计索引结构为树形结构?Hash索引仅能满足=、<>和IN查询,如果进行范围查询,哈希的索引会退化成O(n);而树型的有序特......
  • SQLite 学习日志
    SQLite 语法SQLite是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的SQLite语法,向您提供了一个SQLite快速入门。大小写敏感性有个重要的点值得注意,S......
  • [EF Core小妙招] 重写SQL生成器
    [EFCore]EFCoreCode-First移除外键——重写SQL生成器使用EFCore时最烦的就是生成的某些SQL其实并不是你想要的结果,例如外键约束等等。一个最简单的例子就是,因......
  • mysql注入读写文件
    mysql注入读文件mysq|数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够)。下面进行读文件。 load_file()函......