人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

SQLServer中SELECT語(yǔ)句的執(zhí)行順序

發(fā)布日期:2022-01-29 11:46 | 文章來(lái)源:站長(zhǎng)之家

要用10s,換用另外一種寫(xiě)法只用少于1s的時(shí)間,同事說(shuō)是因?yàn)镾ql句語(yǔ)執(zhí)行順序的原因。之前看過(guò)一點(diǎn)相
關(guān)的書(shū),有一點(diǎn)印象,到網(wǎng)上找了資料,學(xué)習(xí)下。
邏輯查詢處理步驟
復(fù)制代碼 代碼如下:

(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>

每個(gè)步驟產(chǎn)生一個(gè)虛擬表,該虛擬表被用作下一個(gè)步驟的輸入。只有最后一步生成的表返回給調(diào)用者。如
果沒(méi)有某一子句,則跳過(guò)相應(yīng)的步驟。
1. FROM:對(duì)FROM子句中的前兩個(gè)表執(zhí)行笛卡爾積,生成虛擬表VT1。
2. ON:對(duì)VT1應(yīng)用ON篩選器。只有那些使<join_condition>為真的行才被插入VT2。
3. OUTER(JOIN):如果指定了OUTER JOIN,保留表中未找到匹配的行將作為外部行添加到VT2,生成VT3。
如果FROM子句包含兩個(gè)以上的表,則對(duì)上一個(gè)聯(lián)接生成的結(jié)果表和下一個(gè)表重復(fù)執(zhí)行步驟1到步驟3,直到
處理完所有的表為止。
4. 對(duì)VT3應(yīng)用WHERE篩選器。只有使<where_condition>為TRUE的行才被插入VT4。
5. GROUP BY:按GROUP BY 子句中的列列表對(duì)VT4中的行分組,生成VT5。
6. CUBE|ROLLUP:把超組插入VT5,生成VT6。
7. HAVING:對(duì)VT6應(yīng)用HAVING篩選器。只有使<having_condition>為TRUE的組才會(huì)被插入VT7。
8. SELECT:處理SELECT列表,產(chǎn)生VT8。
9. DISTINCT:將重復(fù)的行從VT8中移除,產(chǎn)生VT9。
10. ORDER BY:將VT9中的行按ORDER BY子句中的列列表排序,生成一個(gè)有表(VC10)。
11. TOP:從VC10的開(kāi)始處選擇指定數(shù)量或比例的行,生成表VT11,并返回給調(diào)用者。
以下是其它網(wǎng)友的補(bǔ)充:
好像自已在書(shū)寫(xiě) SQL 語(yǔ)句時(shí)由于不清楚各個(gè)關(guān)鍵字的執(zhí)行順序, 往往組織的 SQL 語(yǔ)句缺少很好的邏輯, 憑感覺(jué) "拼湊" ( 不好意思, 如果您的 SQL 語(yǔ)句也經(jīng)常 "拼湊", 那您是不是得好好反省一下呢?, 呵呵).
這樣做確實(shí)是爽了自己, 可苦了機(jī)器, 服務(wù)器還需要在我們的雜亂無(wú)章的 SQL 語(yǔ)句中尋找它下一句需要執(zhí)行的關(guān)鍵字在哪里.
效率嘛, 由于我們的感覺(jué)神經(jīng)對(duì)秒以下的變化實(shí)在不敏感, 暫且就認(rèn)為自已寫(xiě)的 SQL 順序無(wú)關(guān)緊要, "反正沒(méi)什么變化!", 呵呵.其實(shí)服務(wù)器對(duì)每句 SQL 解析時(shí)間都會(huì)有詳細(xì)記錄的, 大家可以看一下自已按習(xí)慣寫(xiě)的 SQL 和按標(biāo)準(zhǔn)順序?qū)懙腟QL解析時(shí)間差別有多大.
因此, 建議大家在平時(shí)工作中 SQL 語(yǔ)句按標(biāo)準(zhǔn)順序?qū)? 一是專業(yè), 二是實(shí)用, 呵呵, 不過(guò)我覺(jué)得最主要的是心里感覺(jué)舒服.
標(biāo)準(zhǔn)的 SQL 的解析順序?yàn)?
(1).FROM 子句, 組裝來(lái)自不同數(shù)據(jù)源的數(shù)據(jù)
(2).WHERE 子句, 基于指定的條件對(duì)記錄進(jìn)行篩選
(3).GROUP BY 子句, 將數(shù)據(jù)劃分為多個(gè)分組
(4).使用聚合函數(shù)進(jìn)行計(jì)算
(5).使用 HAVING 子句篩選分組
(6).計(jì)算所有的表達(dá)式
(7).使用 ORDER BY 對(duì)結(jié)果集進(jìn)行排序
舉例說(shuō)明: 在學(xué)生成績(jī)表中 (暫記為 tb_Grade), 把 "考生姓名"內(nèi)容不為空的記錄按照 "考生姓名" 分組, 并且篩選分組結(jié)果, 選出 "總成績(jī)" 大于 600 分的.
標(biāo)準(zhǔn)順序的 SQL 語(yǔ)句為:
select 考生姓名, max(總成績(jī)) as max總成績(jī)
from tb_Grade
where 考生姓名 is not null
group by 考生姓名
having max(總成績(jī)) > 600
order by max總成績(jī)
在上面的示例中 SQL 語(yǔ)句的執(zhí)行順序如下:
(1). 首先執(zhí)行 FROM 子句, 從 tb_Grade 表組裝數(shù)據(jù)源的數(shù)據(jù)
(2). 執(zhí)行 WHERE 子句, 篩選 tb_Grade 表中所有數(shù)據(jù)不為 NULL 的數(shù)據(jù)
(3). 執(zhí)行 GROUP BY 子句, 把 tb_Grade 表按 "學(xué)生姓名" 列進(jìn)行分組
(4). 計(jì)算 max() 聚集函數(shù), 按 "總成績(jī)" 求出總成績(jī)中最大的一些數(shù)值
(5). 執(zhí)行 HAVING 子句, 篩選課程的總成績(jī)大于 600 分的.
(7). 執(zhí)行 ORDER BY 子句, 把最后的結(jié)果按 "Max 成績(jī)" 進(jìn)行排序.
好了,看了這些之后,我相信大家都知道了SQL中select語(yǔ)句的執(zhí)行順序了吧!哈哈!

海外服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部