小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Excel VBA ADO SQL入門教程011:SELECT語法結構和運算順序

 L羅樂 2019-08-29

望向孤單的晚燈 是那傷感的記憶 再次泛起心里無數的思念……

1.

魯迅先生說過,學習一門語言,英語也好,計算機編程也罷,重要的是掌握它的結構。對于編程而言,所謂結構,當然不只是指語法結構,也包含了數據結構等等……不過,對于初學者而言,緊要的是先掌握語法結構。

         

第3章的時候(Excel VBA ADO SQL入門教程003:字段查詢)我們說過,SELECT語句超簡版的語法如下:

SELECT 字段名 FROM 表名

經過這一段時間的分享,我們又陸續(xù)學習了WHERE/GROUP BY/HAVING/ORDER BY等子句……

因此,我們今就來說下SELECT語句較為完整的語法結構。

如下:

SELECT [DISTINCT] [TOP] 字段名 

FROM 表名

[WHERE] 條件篩選

[GROUP BY] 分組

[HAVING] 分組篩選

[ORDER BY] 排序

被中括號包括的部分,都是可選的。

2.

了解了SELECT較為完整的語法結構,下一個問題是:它的運算順序是怎么樣的?

我們接觸到的語言,有些是按語句的先后順序運算的,比如VBA;有些不是,比如Excel函數,多層Excel函數是由里到外的運算順序。

那么SQL呢?

一個完整的SELECT語句運算順序如下:

(1),首先運算的是FROM子句,根據FROM子句中指定的一個或多個表創(chuàng)建工作表。

(2),如果存在WHERE子句,則WHERE子句對步驟1獲得的工作表進行條件篩選,刪除不符合條件的記錄。

(3),如果存在GROUP BY子句,則對步驟2生成的結果表按指定字段進行分組,生成一份新的結果表。

(4),如果存在HAVING子句,則對步驟3的結果表按指定條件進行篩選,刪除掉不滿足篩選條件的記錄。

(5),執(zhí)行SELECT子句,刪除不包含在SELECT 字段名 ,所指定的字段。如果SELECT子句中包含關鍵字DISTINCT,則執(zhí)行去重復運算……

(6),如果有ORDER BY子句,則按指定的排序規(guī)則對結果表進行排序操作。

(7),如果有TOP謂詞,則再進行TOP運算……

……

你看,SQL的運算順序,既不是語句的先后順序,也不是由內到外的順序;比如,最先出現的SELECT 字段名 并非首先運算的,它的運算順序處在HAVING子句之后和ORDER BY子句之前。DISTINCT處在TOP之前,但TOP的運算又在DISTINCT之后。

3.

舉一個小栗子。

         

有一條SQL語句,如下:

SELECT 商品購買日期 AS 日期 ,姓名 FROM [數據表$] WHERE 日期>#2018/1/10#

語句的意思是查詢數據表中“商品購買日期”的值大于2018/1/10的日期和姓名兩個字段的數據。它使用了別名,將原字段名“商品購買日期”重命名為“日期”(商品購買日期 AS 日期)。

該語句運算后,系統(tǒng)會發(fā)出以下錯誤提示:

         

問題出在哪兒哩?——WHERE 日期>#2018/1/10#

WHERE子句里的“日期”是什么呢?數據表內并沒有日期這個字段名呀?

有朋友會想,笨蛋,日期是我做的別名呀,商品購買日期 AS 日期……

別名是沒錯的,但問題在于,SELECT語句的運算順序,WHERE子句是先于SELECT 字段名 部分的。也就是說當WHERE子句運算時,別名還沒起呢……

         

4,

最后說句話,非常重要,嗯,晚安。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多