新浪博客

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

2018-02-11 00:27阅读:
主要内容:
单条件查询
多条件查询
模糊匹配查询
1.Where?Where!
我们上期聊了SQL排序,这期来聊筛选,或者说条件查询……
在第一期的时候,我们说SQL是声明式语言,当时还举了个小例子,不知道您是否还有印象:

那个栗子中的SQL代码我们使用了where子句。它定义了筛选条件,成绩>=80,从而对FROM子句返回的结果集进行筛选,将不符合条件的剔除,只保留符合条件的记录。
事实上,where子句的筛选条件可以是简单的单条件(如上述示例),也可以是复杂的多条件,可以精确匹配筛选,也可以搭配通配符等进行模糊匹配筛选。
SELECT 字段名 FROM 表名 WHERE 筛选条件
这是它的语法。
下面我们就通过几个栗子来了解下where子句的常用套路。

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

3.单条件查询
倘若需要查询上述示例中班级为“插班生”的学生名单,SQL代码如下:
SELECT 班级,姓名 FROM [学生表$] WHERE 班级='插班生'
查询结果如下:

班级='插班生'就是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子句的筛选条件。
查询结果如下:

再说一下“或”关系的多条件筛选,也就是只要符合指定筛选条件中的任一条即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

而反过来,如果我们需要查询年龄不在13-16岁之间的学员名单,可以使用NOT运算符搭配between。代码如下:
SELECT 班级,姓名,年龄 FROM [学生表$] WHERE 年龄 NOT BETWEEN 13 AND 16

5.模糊匹配查询
……我们下期再聊吧……
……嗯,官方术语是:欲知后事如何,且听下回分解……

爱你们,一直。
安。
……
……
附往期目录:
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之排序的应用

我的更多文章

下载客户端阅读体验更佳

APP专享