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

本章说明(To新人):

第1节:几个名词。了解而已,不用理解。

第3节:SELECT语句按字段查询数据,看起来很简单,但建议动动手。

1.

诸君好~

我们……过去……

现在……总算可以开始逐步分享SQL语句和实例了……。

不过在这之前,还是需要对一些名词做出解释;这些名词是SQL语句释义中经常使用到的,所以请先有一个大概的了解。

1.1数据库

数据库是按照数据结构来组织、储存和管理数据的仓库,例如最基础的ACCESS软件等。通常情况下,我们将一个Excel工作簿视为一个数据库。是的,如您所知,Excel并不是数据库,但这并不妨碍我们把它看成一个数据库,进而使用SQL语言的某些功能处理数据。这就好比尽管男人不是女人,但一样可以织毛衣、做月嫂……不过,得承认,生孩子之类的就确实太富有挑战性了。

1.2数据表

数据表,或称之为表,是数据库最重要的组成部分之一,一个数据库由一个或一组数据表组成。如果我们把这句话的“数据库”,替换成“Excel工作簿”,就变成这样:表是Excel工作簿最重要的组成部分之一,一个Excel工作簿由一个或一组表组成,你看,同样也是成立的——因此,可以先将Excel工作表视为数据库中的“表”,至于异同,以后再聊。

1.3记录和字段

如上图所示,和Excel表格一样,数据库的表由行和列组成,只是不存在行号和列标,相关值自然就不能使用A6、F4之类的Excel单元格地址来表述。表的每一行描述实体的一个实例,称之为记录;每一列描述实体的一个特征或属性,称之为字段,列的标题称之为字段名或列标题,例如上图中的“姓名”。

主键和外键……以后用到再说。

没了。

2.

SQL的数据查询和操纵语句包括SELECT、UPDATE、INSERT、DELETE等,也就是所谓的查改增删,其中最重要、使用最频繁的是SELECT查询语句。查询按照复杂性划分,可以从一个简单的语句返回所有表中所有的记录,到用一个语句链接多个表并定义多种搜索条件……

现在,就让我们从最简单的部分走起吧——走你,少年。

SELECT语法如下(简化版):

SELECT 字段名 FROM 表名

SELECT关键词指明了要查询的字段名称,FROM关键词指明了要获取字段信息的表的名称。

倘若数据源是Excel表格,需要在表名后增加美元符号$,并用中括号包起来,例如[Sheet1$]

另外需要说明的是,SQL语言对关键词大小写不敏感。SELECT、select、Select都可以使用,作用等同;基于书写规范化的原因,可能有些老师会要求关键词统一大写;嗯,我不是老师,我还小;我的意见是新手期怎么喜欢怎么顺眼怎么来——你好就好,宠溺脸。

3.

分享一下SQL In Excel 常用字段查询语句以及常见问题的解决方法。

如下图所示,是一份Excel表格,表名为学生表,内容是一些看见星光之类小学生的信息数据。

3.1,单个字段查询

假设我们需要查询上图所示表格的姓名列数据。语句如下:

SELECT 姓名 FROM [学生表$]

结果如下:

3.2,多个字段查询

假设我们需要查询字段为姓名/性别/爱好的记录,语句如下:

SELECT 姓名,性别,爱好 FROM [学生表$]

不同字段名之间使用英文逗号间隔,但最后一个字段名不用。另外需要格外注意的是,英文逗号千万别写成中文逗号,当然,初学阶段,别说千万,亿万万也没办法阻止咱们错输中文逗号的情况发生……反复切换输入法的中英文状态真的是很烦的一匹……。

上述语句查询结果如下:

3.3,查询所有字段的快捷方式

如果我们需要提取所有字段的数据呢?一种方法是将所有字段名写入SELECT语句中:

SELECT ID,姓名,性别,年龄,爱好,得分 FROM [学生表$]

另外一种方法是,使用星号(*)选取所有列:

SELECT * FROM [学生表$]

两者的区别在于,前者只选取指定字段的数据,后者包括了指定表的所有数据。对于Excel表格而言,如果字段名确定,出于安全考虑,通常使用前者更靠谱点儿。

3.4,别名的使用

如果我们需要更改查询结果中的字段名称,例如我不喜欢字段名“爱好”,我想把它改成“特长”,可以使用关键词as,as是英文alias 的缩写,也就是“别名”的意思。语句如下:

SELECT 姓名,爱好 AS 特长 FROM [学生表$]

3.5,特殊字段名的处理

当字段名存在某些特殊字符,例如空格,或者当字段名存在SQL语言的保留字,例如AS,该字段名需要使用中括号括起来,避免因语法识别混乱,系统产生错误信息的提示。

举个例子,如上图所示,Excel表名为调查表,该表字段名中有的存在空格(姓 名),有的使用了SQL的保留字as,如果需要查询该表格姓名和地址的信息,SQL语句如下:

select [姓 名] , [as] from [调查表$]

查询结果如下:

3.6,无字段名情况的处理

之前讲过,Excel并不是数据库,对数据结构并没有强制性要求,因为这样的缘故,在使用SQL处理数据时,难免会碰上各种有趣的现象。例如,数据表纯数据没有标题行,再或者,标题行存在合并单元格等,以至于字段名无法使用,此时,倘若需要获取字段数据,对字段名通常使用f加序列号表示,引用表的第1列字段名就是f1,第2列字段名是f2,其余依次类推。

如上图所示,该表格没有标题栏,如果我们需要查询姓名和性别,代码如下:

select f2 as 姓名,f3 as 性别 from [学生表$]

查询结果如下:

砸桌子:还记得大明湖畔使用VBA+ADO执行SQL语句时,如果引用表不存在标题栏,需要修改链接字符串的哪个参数的项吗?——出门右拐请重看第2章吧~

4.

今就聊这吧,上一章聊的太多了,以至于好多男女毅然决然的对俺表白告辞,七碗酒都挽留不回的告辞,心和蛋都碎了的凄惨……所以今就简单点,说话的方式简单点……~

嗯,篇首增加了章节说明,是希望新手能够更好的把握章节要点和目标;别被文章中细节繁多的枝桠部分哄住了,上帝作证,我的长相决定了吓人真不是我的本意,我只是习惯了把一些知识点交待清楚,嗯,星光俺是一个态度严谨气质活泼组织放心……省略一千字……的五有好少年。

点赞,安。

一码不扫,

可以扫天下?

ExcelHome

VBA编程学习与实践

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180131G1I1J900?refer=cp_1026

扫码关注云+社区