婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQLServer中SELECT語句的執行順序

SQLServer中SELECT語句的執行順序

熱門標簽:小e電話機器人 貴州房產智能外呼系統供應商 鎮江網路外呼系統供應商 臨沂智能電銷機器人加盟哪家好 申請400電話在哪辦理流程 一個導航軟件能用幾個地圖標注點 外呼運營商線路收費 電銷外呼有錄音系統有哪些 百度地圖標注改顏色
今天在寫一條語句的時候,在查詢分析器里邊執行
要用10s,換用另外一種寫法只用少于1s的時間,同事說是因為Sql句語執行順序的原因。之前看過一點相
關的書,有一點印象,到網上找了資料,學習下。
邏輯查詢處理步驟
復制代碼 代碼如下:

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

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

標簽:日照 澳門 晉城 延邊 嘉興 三明 保定 合肥

巨人網絡通訊聲明:本文標題《SQLServer中SELECT語句的執行順序》,本文關鍵詞  SQLServer,中,SELECT,語句,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLServer中SELECT語句的執行順序》相關的同類信息!
  • 本頁收集關于SQLServer中SELECT語句的執行順序的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 八宿县| 康保县| 吉隆县| 辉南县| 铁岭市| 浙江省| 盐边县| 许昌县| 衡南县| 贺兰县| 松原市| 湘潭市| 潜山县| 府谷县| 满城县| 昭苏县| 北川| 容城县| 龙山县| 嘉义市| 灵台县| 和平区| 岳西县| 望江县| 瑞安市| 尼勒克县| 思南县| 若羌县| 天柱县| 花莲县| 蛟河市| 达孜县| 南川市| 闽清县| 临清市| 庆云县| 安龙县| 北京市| 长寿区| 新源县| 兰州市|