《Mysql實例數據庫中的SELECT語句邏輯執行順序分析》要點:
本文介紹了Mysql實例數據庫中的SELECT語句邏輯執行順序分析,希望對您有用。如果有疑問,可以聯系我們。
引言MYSQL入門
這不是一個什么多深的技術問題,多么牛叉的編程能力.這跟一個人的開發能力也沒有非常必然的直接關系,但是知道這些會對你的SQL編寫,排憂及優化上會有很大的幫助.它不是一個復雜的知識點,但是一個非常基礎的SQL根基.不了解這些,你一直用普通水泥蓋房子;掌握這些,你是在用高等水泥蓋房子.MYSQL入門
然而,就是這么一個小小的知識點,大家可以去調查一下周圍的同事朋友,沒準你會得到一個“驚喜”.MYSQL入門
由于這篇文章是突然有感而寫,下面隨手編寫的SQL語句沒有經過測試.MYSQL入門
看下面的幾段SQL語句:
MYSQL入門
下面是SELECT語句的邏輯執行順序:MYSQL入門
1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE or WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
MICROSOFT指出,SELECT語句的實際物理執行順序可能會由于查詢處理器的不同而與這個順序有所出入.MYSQL入門
幾個示例MYSQL入門
示例一:
MYSQL入門
覺得這個SQL語句眼熟嗎?對,非常基礎的分組查詢.但它不能執行成功,因為HAVING的執行順序在SELECT之上.MYSQL入門
實際執行順序如下:MYSQL入門
1.FROM STUDENT
2.GROUP BY ID
3.HAVING TOTAL>2
4.SELECT ID,COUNT(ID) AS TOTAL
很明顯,TOTAL是在最后一句SELECT ID,COUNT(ID) AS TOTAL執行過后生成的新別名.因此,在HAVING TOTAL>2執行時是不能識別TOTAL的.MYSQL入門
示例二
MYSQL入門
這個的實際執行順序是:MYSQL入門
1.FROM STUDENT
2.GROUP BY ID
3.SELECT ID,COUNT(ID) AS TOTAL
4.ORDER BY TOTAL
這一次沒有任何問題,能夠成功執行.如果把ORDER BY TOTAL換成ORDER BY COUNT(ID)呢?
MYSQL入門
1.FROM STUDENT
2.GROUP BY ID
3.SELECT ID,COUNT(ID) AS TOTAL
4.ORDER BY COUNT(ID)MYSQL入門
沒錯,它是能夠成功執行的,看SQL執行計劃,它與上面ORDER BY TOTAL是一樣的.ORDER BY 是在SELECT后執行,因此可以用別名TOTAL.MYSQL入門
示例三
MYSQL入門
實際執行順序:MYSQL入門
很明顯,執行GROUP BY NAME時別名NAME還沒有創建,因此它是不能執行成功的.MYSQL入門
總結MYSQL入門
回憶起曾經隨意問過一些人這個問題,不管誰說不知道時我們都會故意嘲笑一翻,當然此嘲笑非彼嘲笑.但事實證明還是有一些人不會注意到這個知識點,在此貼出來只是做為一個友好的提醒.MYSQL入門
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5269.html