加载中…
个人资料
Excel星球
Excel星球 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:4,512
  • 关注人气:418
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Excel VBA ADO SQL入门教程007:条件查询(上)

(2018-02-11 00:27:03)
标签:

杂谈

主要内容:

单条件查询

多条件查询

模糊匹配查询

1.Where?Where!

我们上期聊了SQL排序,这期来聊筛选,或者说条件查询……

在第一期的时候,我们说SQL是声明式语言,当时还举了个小例子,不知道您是否还有印象:

http://upload-images.jianshu.io/upload_images/4460243-99428a6874e3eb4a?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


那个栗子中的SQL代码我们使用了where子句。它定义了筛选条件,成绩>=80,从而对FROM子句返回的结果集进行筛选,将不符合条件的剔除,只保留符合条件的记录。

事实上,where子句的筛选条件可以是简单的单条件(如上述示例),也可以是复杂的多条件,可以精确匹配筛选,也可以搭配通配符等进行模糊匹配筛选。

SELECT 字段名 FROM 表名 WHERE 筛选条件

这是它的语法。

下面我们就通过几个栗子来了解下where子句的常用套路。

http://upload-images.jianshu.io/upload_images/4460243-522ceec5196083f3?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />



2.一个栗子

如下图所示,是一份名为学生表的Excel工作表,A列是班级,B列是姓名,C-E列分别是性别、年龄、爱好。 

http://upload-images.jianshu.io/upload_images/4460243-de074a29c4f74cfe?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


3.单条件查询

倘若需要查询上述示例中班级为“插班生”的学生名单,SQL代码如下:

SELECT 班级,姓名 FROM [学生表$] WHERE 班级='插班生'

查询结果如下:

http://upload-images.jianshu.io/upload_images/4460243-630d9752fbfb630b?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


班级='插班生'就是where子句的筛选条件,它使用了等号来判断班级字段值和条件值是否相等。需要说明的是,和Excel一样,当条件值是文本时,应该使用引号包起来,数值则不用,例如:

SELECT 班级,姓名 FROM [学生表$] WHERE 年龄>=14

昨个公众号后台有朋友问了个和下面的问题类似的问题:

为什么班级='插班生'使用的是单引号,而不是双引号?

这个问题我们之前有解释过,这里再说一下。在OLE DB法使用的SQL语句里,单双引号都可以,只是在VBA中,通常SQL语句本身就是作为字符串存在的,外围已经存在了一对双引号,因此SQL语句内一般就使用单引号。

4.多条件查询

先说一下“与”关系(也就是并且关系)的多条件筛选。

和Excel一样,在SQL中,这类问题通常使用AND运算符。

比如,我们需要查找班级为插班生、同时年龄大于等于12岁的学员名单,SQL代码如下:

SELECT 班级,姓名,年龄 FROM [学生表$] WHERE 班级='插班生' AND 年龄>=12

如语句所示,不同条件之间使用AND运算符相连,只有当每一个条件都成立时,才符合WHERE子句的筛选条件。

查询结果如下:

http://upload-images.jianshu.io/upload_images/4460243-d492d144edcf1dc4?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


再说一下“或”关系的多条件筛选,也就是只要符合指定筛选条件中的任一条即OK的where筛选子句。

在SQL中,这类问题一般使用OR运算符处理。

比如,需要查找班级是插班生或者年龄大于等于12岁的学员名单,SQL代码如下:

SELECT 班级,姓名,年龄 FROM [学生表$] WHERE 班级='插班生'  OR 年龄>=12

查询结果如下:


网络异常取消重新上传

当“或”关系的查询条件较少时,我们使用OR运算符,但当查询条件较多时,OR运算符的书写便变得臃肿烦琐,此时我们可以使用其它运算符,例如BETWEEN和IN。

IN运算符可以指定一个到多个值,每个值之间使用英文逗号间隔,最后以括号“()”包括起来。当查询值和括号中的任一值匹配时,则结果即为True。其语法如下:

Text expression IN (First value,……,last value)

举个例子。

倘若我们需要查询姓名为:看见星光、老祝、美女空、大红花四个人的班级和爱好数据,SQL语句如下:

SELECT 班级,姓名,爱好 FROM [学生表$] WHERE 姓名 IN('看见星光','老祝','美女空','大红花')

查询结果如下:


网络异常取消重新上传

between……and语句可以选取介于两个值范围之间的数据,这些值可以是数值、日期和文本(……中文还是慎用吧)。

例如我们需要查询年龄在13-16岁之间的学员名单,SQL代码如下:

SELECT 班级,姓名,年龄 FROM [学生表$] WHERE 年龄 BETWEEN 13 AND 16

http://upload-images.jianshu.io/upload_images/4460243-83de191847dca92f?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


而反过来,如果我们需要查询年龄不在13-16岁之间的学员名单,可以使用NOT运算符搭配between。代码如下:

SELECT 班级,姓名,年龄 FROM [学生表$] WHERE 年龄 NOT BETWEEN 13 AND 16

http://upload-images.jianshu.io/upload_images/4460243-fc87948958d9ef1e?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


5.模糊匹配查询

……我们下期再聊吧……

……嗯,官方术语是:欲知后事如何,且听下回分解……

http://upload-images.jianshu.io/upload_images/4460243-867ba21367c33469?imageMogr2/auto-orient/stripVBA ADO SQL入门教程007:条件查询(上)" />


爱你们,一直。

安。

……

……

附往期目录:

Excel VBA ADO SQL入门教程001:认识SQL In Excel

Excel VBA ADO SQL入门教程002:如何在VBA中执行SQL语句

Excel VBA ADO SQL入门教程003:SQL之字段的查询

Excel VBA ADO SQL入门教程004:SQL中的Excel表

Excel VBA ADO SQL入门教程005:SQL之字段去重

Excel VBA ADO SQL入门教程006:SQL之排序的应用


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有