SQL查询语句执行的逻辑顺序
一、簡介
大家都知道SELECT語句是用來查詢數據表中的數據的,構成SELECT語句的還有各種元素(where、from、group by等),不同元素又代表了不同的處理邏輯,那么這些元素在執行查詢時處理的順序是怎么樣的?
本文就說明每個元素在執行查詢時的邏輯順序和作用。
二、邏輯查詢和物理查詢
邏輯查詢,是一個術語名詞,其意思是SQL查詢在處理的原理和概念,理解SQL語句背后的查詢邏輯是為了讓我們把查詢知識更好的融會貫通。在分析邏輯查詢的原理時,往往表面上會看似效率低下。
但是真正在執行的時候,數據庫服務器引擎實行物理查詢,數據庫服務器引擎不會按部就班的按照邏輯查詢的方式和步驟去執行,它會在遵守“邏輯查詢”的規范和要求的前提下,實行優化方案。
三、執行順序
對于大多數編程語言,代碼的執行是按照編寫時的順序處理的,在SQL中有所不同。就select來說,雖然它出現在語句的首部,但是它實際上并不是第一個處理的元素。
通過示例代碼更好的描述select查詢的邏輯。
select empid,YEAR(orderdate) as orderyear,COUNT(*) as numorder from Sales.Orders where custid=71 group by empid,YEAR(orderdate) having COUNT(*) >1 order by empid,orderyear
SQL語句解讀:
此查詢要查出客戶ID為71其下的訂單,按照員工ID和訂單年份進行分組,并且對分組后的數據進行篩選,篩選訂單數量大于1的。
查詢顯示的字段信息有:員工ID、訂單年份和訂單數量,并按照員工ID和訂單年份進行了排序。
查詢語句的執行順序:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
按照執行邏輯我們可以對比下示例中的語法,可以得出一個結論,SQL語句的邏輯執行順序不是按照我們編寫的語法格式順序去執行的。
將語法按照邏輯執行順序編寫,分析每個元素子句執行的功能:
四、SQL語句的元素不按照編寫的順序執行
SQL設計師想把編寫SQL語句的構思,就好像我們說一段話一樣,讓我們更好的編寫查詢語句。試想,一個人對另一個人下達一個指令,通常是這樣描述:“給我廚房里左上方抽屜中的車鑰匙”。
我們按照這樣的方式去編寫SQL語句就變道很直觀。但如果你對機器或者計算機程序去表達指令,你就不得不以操作的角度去表達你的指令,指令會像這樣描述:“去廚房,打開左上方的抽屜,拿車鑰匙,帶給我”。
所以我們編寫SQL語句時,就可以像人與人之間表達指令一樣,就像查詢語句先從SELECT開始(你需要什么),而邏輯查詢就像機器執行指令的概念一樣(先去找到執行地點,所以它首先處理FROM)。
總結
以上是生活随笔為你收集整理的SQL查询语句执行的逻辑顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改Jupyter的工作空间
- 下一篇: CART回归树基本原理(具体例子)