激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - SQL Server 2008的邏輯查詢處理步驟

SQL Server 2008的邏輯查詢處理步驟

2019-11-10 16:28mssql教程網(wǎng) Sql Server

我想大家對(duì)《SQL Server 2005技術(shù)內(nèi)幕T-SQL查詢》一書可能都比較熟悉,博文組織翻譯的,作者是SQL Server方面的MVP Kalen .

最近我則剛剛收到了微軟最有價(jià)值專家項(xiàng)目組寄來的該書的SQL Server 2008英文版本-《Inside Microsoft SQL Server 2008:T-SQL Querying》(http://www.microsoft.com/learning/en/us/book.aspx?ID=12804&locale=en-us),大致翻了一下,發(fā)現(xiàn)內(nèi)容變動(dòng)不少,既有新增的章節(jié),也有基于SQL Server 2005或2008新技術(shù)重新書寫的SQL查詢示例。

我先就邏輯查詢處理步驟方面給大家介紹一下兩本書之間的差異吧,因?yàn)槲乙苍趧傞_始閱讀,以后逐步給大家介紹。

我們知道,查詢的邏輯處理過程是分階段完成的,每個(gè)階段都會(huì)產(chǎn)生一個(gè)虛擬表,該虛擬表會(huì)作為下一個(gè)階段的輸入。但是,這些過程中間階段生成的虛擬表對(duì)于查詢用戶是不可用的,只有最后階段所生成的虛擬表(即查詢結(jié)果)才返回給查詢用戶。

在該書的SQL Server 2005版本中,將一個(gè)聯(lián)接查詢的邏輯處理分為了10個(gè)步驟:

(8) SELECT  (9) DISTINCT  (11) <TOP_specification> <select_list>

(1)  FROM <left_table>

(3)    <join_type> JOIN <right_table>

(2)      ON <join_condition>

(4)  WHERE <where_condition>

(5)  GROUP BY <group_by_list>

(6)  WITH {CUBE | ROLLUP}

(7)  HAVING <having_condition>

(10) ORDER BY <order_by_list>

而在SQL Server 2008版本中,則對(duì)邏輯階段的描述擴(kuò)展到了所有的邏輯語句,而不僅僅是聯(lián)接處理,如APPLY、PIVOT等。按這種分類方式,將邏輯步驟分成了6部分,部分步驟中包含了子步驟。

(5)SELECT (5-2)DISTINCT (5-3)<TOP_specification> (5-1)<select_list>

(1)FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <join_condition>

        |(1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias>

        |(1-P) <left_table> PIVOT(<pivot_specifications>) AS <alias>

        |(1-U) <left_table> UNPIVOT(<unpivot_specifications>) AS <alias>

(2)WHERE <where_condition>

(3)GROUP BY <group_by_list> (3-CR)WITH {CUBE | ROLLUP}

(4)HAVING <having_condition>

(6)ORDER BY <order_by_list>

下圖更詳細(xì)地描述了各個(gè)處理步驟的流程。

 

SQL Server 2008的邏輯查詢處理步驟

這種步驟分類相比2005版本而言更加全面和具體。上面步驟中的3-CR是我添加上去的,我覺得這樣的描述更加全面。3-CR中的WITH ROLLUP和WITH CUBE參數(shù),在SQL Server 2008中已經(jīng)被GROUP BY子句的GROUPING SETS、ROLLUP和CUBE運(yùn)算符代替,不再推薦使用不符合ISO標(biāo)準(zhǔn)的WITH ROLLUP、WITH CUBE和ALL語法。但是,這并不影響邏輯處理的順序。

下面是對(duì)邏輯處理過程中各個(gè)步驟的說明,請(qǐng)注意虛擬表(VTn)的生成步驟:

·    步驟1(FROM):該步驟中用于驗(yàn)證查詢的源表,并處理表操作符。每個(gè)表操作符應(yīng)用于一系列子步驟。例如,在上面用于聯(lián)接的(1-J)步驟中會(huì)涉及如下的子步驟。最終這些子步驟完成后,將生成虛擬表VT1。

Ø  (1-J1):執(zhí)行l(wèi)eft_table和right_table兩個(gè)表的交叉聯(lián)接(笛卡兒乘積),生成虛擬表VT1-J1;

Ø  (1-J2):對(duì)笛卡兒乘積應(yīng)用ON篩選器,生成虛擬表VT1-J2;

Ø  (1-J3):如果是外部聯(lián)接,會(huì)在該步驟中將被ON篩選掉的外部行添加到VT1-J2中,生成VT1-J3。否則,將跳過該步驟。

·    步驟2(WHERE):對(duì)VT1應(yīng)用WHERE篩選器,將符合篩選條件的行插入到VT2中。

·    步驟3(GROUP BY):按GROUP BY子句中的列列表對(duì)VT2中的行分組,生成VT3。如果語句中包含WITH CUBE或WITH ROLLUP,則將分組統(tǒng)計(jì)結(jié)果再次加總后插入VT3,生成VT3-RC。

·    步驟4(HAVING):對(duì)VT3應(yīng)用HAVING篩選器,將符合篩選條件的行插入到VT4。

·    步驟5(SELECT):處理SELECT子句中的元素,生成VT5。

u  (5-1)計(jì)算表達(dá)式:該步驟計(jì)算SELECT列表中的表達(dá)式,生成VT5-1;

u  (5-2)DISTINCT:從VT5-1中移除重復(fù)行,生成VT5-2;

u  (5-3)TOP:該步驟根據(jù)ORDER BY子句中指定的排序規(guī)則,從VT5-2的開始處篩選出指定數(shù)量或比例的行。

·    步驟6(ORDER BY):該步驟對(duì)VT5-3中的行按ORDER BY子句中的列列表進(jìn)行排序,生成一個(gè)游標(biāo)VC6。

 

 

 SQL Server 2008的邏輯查詢處理步驟

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩在线播放一区 | 久久久久久久久成人 | 一区二区三区在线观看免费视频 | asian超清日本肉体pics | 在线91视频 | 亚洲免费网站 | 亚洲人成在线播放网站 | 中文字幕 亚洲一区 | 九一看片.| 天天色综合2 | 午夜爽爽爽男女免费观看hd | 少妇一级淫片高潮流水电影 | 欧美城网站地址 | 黄色美女免费 | 麻豆视频网| 亚洲精品久久久久久久久久久 | 欧美在线观看视频一区二区 | 法国性xxx精品hd专区 | 成人一级视频在线观看 | 国产精品一区二区免费在线观看 | 色中色激情影院 | 特级毛片免费视频 | 欧美日本免费一区二区三区 | 看片一区| 国产亚洲欧美一区久久久在 | 成人毛片100免费观看 | www.guochan| 国产精品区在线12p 午夜视频在线免费播放 | 国产a级片电影 | 毛片免费网 | 亚洲欧美一区二区三区在线观看 | 一区二区三区欧美日韩 | 色99久久 | 中文字幕一区二区三区四区 | 亚洲成人免费网站 | 国产亚洲精品久久久久久久久久 | 国产一及毛片 | 欧美一级美国一级 | 亚州欧美视频 | 大胆在线日本aⅴ免费视频 永久免费毛片 | 黄色av.com |