望向孤單的晚燈 是那傷感的記憶 再次泛起心里無(wú)數(shù)的思念…… 1. 魯迅先生說(shuō)過(guò),學(xué)習(xí)一門(mén)語(yǔ)言,英語(yǔ)也好,計(jì)算機(jī)編程也罷,重要的是掌握它的結(jié)構(gòu)。對(duì)于編程而言,所謂結(jié)構(gòu),當(dāng)然不只是指語(yǔ)法結(jié)構(gòu),也包含了數(shù)據(jù)結(jié)構(gòu)等等……不過(guò),對(duì)于初學(xué)者而言,緊要的是先掌握語(yǔ)法結(jié)構(gòu)。
第3章的時(shí)候(Excel VBA ADO SQL入門(mén)教程003:字段查詢(xún))我們說(shuō)過(guò),SELECT語(yǔ)句超簡(jiǎn)版的語(yǔ)法如下: SELECT 字段名 FROM 表名 經(jīng)過(guò)這一段時(shí)間的分享,我們又陸續(xù)學(xué)習(xí)了WHERE/GROUP BY/HAVING/ORDER BY等子句…… 因此,我們今就來(lái)說(shuō)下SELECT語(yǔ)句較為完整的語(yǔ)法結(jié)構(gòu)。 如下: SELECT [DISTINCT] [TOP] 字段名 FROM 表名 [WHERE] 條件篩選 [GROUP BY] 分組 [HAVING] 分組篩選 [ORDER BY] 排序 被中括號(hào)包括的部分,都是可選的。 2. 了解了SELECT較為完整的語(yǔ)法結(jié)構(gòu),下一個(gè)問(wèn)題是:它的運(yùn)算順序是怎么樣的? 我們接觸到的語(yǔ)言,有些是按語(yǔ)句的先后順序運(yùn)算的,比如VBA;有些不是,比如Excel函數(shù),多層Excel函數(shù)是由里到外的運(yùn)算順序。 那么SQL呢? 一個(gè)完整的SELECT語(yǔ)句運(yùn)算順序如下: (1),首先運(yùn)算的是FROM子句,根據(jù)FROM子句中指定的一個(gè)或多個(gè)表創(chuàng)建工作表。 (2),如果存在WHERE子句,則WHERE子句對(duì)步驟1獲得的工作表進(jìn)行條件篩選,刪除不符合條件的記錄。 (3),如果存在GROUP BY子句,則對(duì)步驟2生成的結(jié)果表按指定字段進(jìn)行分組,生成一份新的結(jié)果表。 (4),如果存在HAVING子句,則對(duì)步驟3的結(jié)果表按指定條件進(jìn)行篩選,刪除掉不滿(mǎn)足篩選條件的記錄。 (5),執(zhí)行SELECT子句,刪除不包含在SELECT 字段名 ,所指定的字段。如果SELECT子句中包含關(guān)鍵字DISTINCT,則執(zhí)行去重復(fù)運(yùn)算…… (6),如果有ORDER BY子句,則按指定的排序規(guī)則對(duì)結(jié)果表進(jìn)行排序操作。 (7),如果有TOP謂詞,則再進(jìn)行TOP運(yùn)算…… …… 你看,SQL的運(yùn)算順序,既不是語(yǔ)句的先后順序,也不是由內(nèi)到外的順序;比如,最先出現(xiàn)的SELECT 字段名 并非首先運(yùn)算的,它的運(yùn)算順序處在HAVING子句之后和ORDER BY子句之前。DISTINCT處在TOP之前,但TOP的運(yùn)算又在DISTINCT之后。 3. 舉一個(gè)小栗子。
有一條SQL語(yǔ)句,如下: SELECT 商品購(gòu)買(mǎi)日期 AS 日期 ,姓名 FROM [數(shù)據(jù)表$] WHERE 日期>#2018/1/10# 語(yǔ)句的意思是查詢(xún)數(shù)據(jù)表中“商品購(gòu)買(mǎi)日期”的值大于2018/1/10的日期和姓名兩個(gè)字段的數(shù)據(jù)。它使用了別名,將原字段名“商品購(gòu)買(mǎi)日期”重命名為“日期”(商品購(gòu)買(mǎi)日期 AS 日期)。 該語(yǔ)句運(yùn)算后,系統(tǒng)會(huì)發(fā)出以下錯(cuò)誤提示:
問(wèn)題出在哪兒哩?——WHERE 日期>#2018/1/10# WHERE子句里的“日期”是什么呢?數(shù)據(jù)表內(nèi)并沒(méi)有日期這個(gè)字段名呀? 有朋友會(huì)想,笨蛋,日期是我做的別名呀,商品購(gòu)買(mǎi)日期 AS 日期…… 別名是沒(méi)錯(cuò)的,但問(wèn)題在于,SELECT語(yǔ)句的運(yùn)算順序,WHERE子句是先于SELECT 字段名 部分的。也就是說(shuō)當(dāng)WHERE子句運(yùn)算時(shí),別名還沒(méi)起呢……
4, 最后說(shuō)句話(huà),非常重要,嗯,晚安。 |
|
來(lái)自: L羅樂(lè) > 《跟EH看見(jiàn)星光學(xué)SQL》