select语法结构

ads



每天一篇Excel技术图文
:Excel星球

NO.660-SELECT语句运算顺序


作者:看见星光
 微博:EXCELers / 知识星球:Excel



HI,大家好,我是星光。


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


          


第3章的时候我们说过,SELECT语句超简版的语法如下:


SELECT 字段名 FROM 表名


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


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


如下▼


SELECT [DISTINCT] [TOP] 字段名 

FROM 表名

[WHERE] 条件筛选

[GROUP BY] 分组

[HAVING] 分组筛选

[ORDER BY] 排序


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


……


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


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


那么SQL呢?


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


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


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


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


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


5),执行SELECT子句,删除不包含在SELECT子句所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重复运算……


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


7),如果有TOP谓词,则再进行TOP运算……


……


你看,SQL的运算顺序,既不是语句的先后顺序,也不是由内到外的顺序;比如,最先出现的SELECT 子句 并非首先运算的,它的运算顺序处在HAVING之后和ORDER BY之前。DISTINCT的位置处在TOP之前,但TOP的运算顺序又在DISTINCT之后。


我举一个小栗子。


          


有一条SQL语句,如下:


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


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


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


          


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


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


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


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


          


……


今天给大家分享的内容就这样,挥挥手,下期再见。


示例文件下载,百度网盘▼
https://pan.baidu.com/s/1I8WZGk4k61XkB2J_Wpz9Vg
提取码: nvem


需要系统学习Excel,却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?加入我的付费社群,这一切都不是问题……



从0到1、从入门到实战...
兼具图文/视频系统教程+微信群答疑...
技巧、函数、透视表、VBA、PQ、SQL
教程全覆盖,想学什么你就学什么……
推荐下方识别二维码加入我的知识星球▼


最后编辑于:2024/1/18 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com