打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel VBA ADO SQL入门教程011:SELECT语法结构和运算顺序

望向孤单的晚灯 是那伤感的记忆 再次泛起心里无数的思念……

1.

听说鲁迅先生说过,学习一门语言,英语也好,计算机语言也罢,重要的是掌握它的结构。对于计算机语言而言,所谓结构,当然不只是指语法结构,也包含了数据结构、思维和运算结构等……不过,对于初学者而言,紧要的是先掌握语法结构。

第3章的时候(Excel VBA ADO SQL入门教程003:字段查询)我们说过,SELECT语句超简版的语法如下

SELECT 字段名 FROM 表名

经过这一段时间的分享,我们又陆续学习了WHERE/GROUP BY/HAVING/ORDER BY等子句……

因此,我们今就来说下SELECT语句完整的语法结构。

如下:

SELECT 字段名 

FROM 表名

[WHERE] 条件筛选

[GROUP BY] 分组

[HAVING] 分组筛选

[ORDER BY] 排序

被中括号包括的,都是可选的。

2.

了解了SELECT完整的语法结构,下一个问题是:它的运算顺序是怎么样的?

我们接触到的语言,有些是按语句的先后顺序运算的,比如VBA;有些不是,比如Excel函数,多层Excel函数是由里到外的运算顺序。那么SQL呢?

一个完整的SELECT语句运算顺序如下:

(1),首先运算的是FROM子句,根据FROM子句中指定的一个或多个表创建工作表。

(2),如果存在WHERE子句,则WHERE子句对步骤1获得的工作表进行条件筛选,删除不符合条件的记录。

(3),如果存在GROUP BY子句,则对步骤2生成的结果表按指定字段进行分组,生成一份新的结果表。

(4),如果存在HAVING子句,则对步骤3的结果表按指定条件进行筛选,删除掉不满足筛选条件的记录。

(5),此时,步骤4生成的结果表,如果有字段名称不包含在SELECT 字段名 所指定的字段名中,则删除。另外,如果SELECT子句中包含关键字DISTINCT,则执行去重复行。

(6)最后,如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作。

……

你看,SQL的运算顺序,既不是语句的先后顺序,也不是由内到外的顺序;比如,尽管ORDER BY的运算顺序处于最后,但最先出现的SELECT 字段名 并非首先运算的,它的运算顺序处在HAVING子句之后和ORDER BY子句之前。

3.

举一个小栗子。

有一条SQL语句,如下:

SELECT 商品购买日期 AS 日期 ,姓名 FROM [数据表$] WHERE 日期>#2018/1/10#

语句的意思是查询数据表中“商品购买日期”的值大于2018/1/10的日期和姓名两个字段的数据。它使用了别名,将原字段名“商品购买日期”重命名为“日期”(商品购买日期 AS 日期)。

该语句运算后,系统会发出以下错误提示:

问题出在哪儿哩?——WHERE 日期>#2018/1/10#

WHERE子句里的“日期”是什么呢?数据表内并没有日期这个字段名呀?

有朋友会想,笨蛋,日期是我作的别名呀,商品购买日期 AS 日期……

别名是没错的,但问题在于,SELECT语句的运算顺序,WHERE子句是先于SELECT 字段名 部分的。也就是说当WHERE子句运算时,别名还没起呢……

4.

最后,说一个好消息,京东开学季,图书满100减30元。经典畅销VBA图书:适合新手入门的《别怕,Excel VBA其实很简单》,以及适合高手进阶的《Excel 2010 VBA实战技巧精粹》均在活动中……有需要的就buybuybuybalala~~

 

晚安,明见~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL入门第11课:SELECT语句的语法结构和运算顺序
MySQL SELECT查询
常用的SQL语句
sql学习资料
SQL查询语句 select 详解
标准SQL语法使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服