HI,大家好,我是星光。 过去的两篇教程,给大家讲述了相比于其它功能,SQL In Excel的优劣,以及什么是ADO,如果通过它在VBA中执行SQL语句,从本章开始,给大家逐步分享SQL的基本语法和应用实例。 不过在这之前,还是需要对一些名词做出解释;这些名词是SQL语句释义中经常使用到的,所以务必有一个大概的了解。 ▎ 什么是字段丨1.1 数据库 数据库是按照数据结构来组织、储存和管理数据的仓库,例如基础的ACCESS软件等。通常情况下,我们将一个Excel工作簿视为一个数据库。是的,如您所知,Excel并不是数据库,但这并不妨碍我们把它看成一个数据库,进而使用SQL语言处理其中的数据。这就好比尽管男人不是女人,但一样可以织毛衣、做月嫂……不过,得承认,生孩子之类的就确实太富有挑战性了。 丨1.2数据表 数据表,或称之为表,是数据库最重要的组成部分之一,一个数据库由一个或一组数据表组成。如果我们把这句话的“数据库”,替换成“Excel工作簿”,就变成这样:表是Excel工作簿最重要的组成部分之一,一个Excel工作簿由一个或一组表组成,你看,同样也是成立的——因此,可以先将Excel工作表视为数据库中的“表”,至于异同,以后再聊。 丨1.3记录和字段 如上图所示,和Excel表格一样,数据库的表由行和列组成,只是不存在行号和列标,不存在单元格,相关值自然就不能使用A6、F4之类的单元格地址来表述。表的每一行描述实体的一个实例,称之为记录;每一列描述实体的一个特征或属性,称之为字段,列的标题称之为字段名或列标题,例如上图中的“姓名”。 主键和外键……以后用到再说。 没了。 ▎ SELECT语句SQL的数据查询和操纵语句包括SELECT、UPDATE、INSERT、DELETE等,也就是所谓的查改增删,其中最重要、使用最频繁的是SELECT查询语句。查询按照复杂性划分,可以从一个简单的语句返回所有表中所有的记录,到用一个语句链接多个表并定义多种搜索条件…… 现在,就让我们从最简单的部分走起吧——走你,少年。 SELECT语法如下(简化版): SELECT 字段名 FROM 表名 SELECT关键字指明了要查询的字段名称,FROM关键字指明了要获取字段信息的表的名称。 倘若数据源是Excel表格,需要在表名后增加美元符号$,并用中括号包起来,例如[Sheet1$]。 另外需要说明的是,SQL语言对关键字大小写不敏感。SELECT、select、Select都可以使用,作用等同;基于书写规范化的原因,可能有些老师会要求关键字统一大写;嗯,我不是老师,我还小;我的意见是新手期怎么喜欢怎么顺眼怎么来——你好就好,宠溺脸。 ▎ 字段的应用分享一下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加序列号表示,f是英文field(字段)的缩写,引用表的第1列字段名就是f1,第2列字段名是f2,其余依次类推。 如上图所示,该表格没有标题栏,如果我们需要查询姓名和性别,代码如下: select f2 as 姓名,f3 as 性别 from [学生表$] 查询结果如下: 还记得大明湖畔使用VBA+ADO执行SQL语句时,如果引用表不存在标题栏,需要修改链接字符串的哪个参数的项吗?——出门右拐请重看第2章吧 …… 今就聊这吧,上一章聊的太多了。所以今就简单点,说话的方式简单点。看我小眼神,我是一个态度严谨气质活泼组织放心……省略一千字……的五有好少年,所以——不给个赞,你良心不会痛吗? |
|
来自: hercules028 > 《excel》