數據庫中的SELECT語句邏輯履行次序剖析。本站提示廣大學習愛好者:(數據庫中的SELECT語句邏輯履行次序剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是數據庫中的SELECT語句邏輯履行次序剖析正文
引言
這不是一個甚麼多深的技巧成績,何等牛叉的編程才能。這跟一小我的開辟才能也沒有異常必定的直接關系,然則曉得這些會對你的SQL編寫,排憂及優化上會有很年夜的贊助。它不是一個龐雜的常識點,然則一個異常基本的SQL基礎。不懂得這些,你一向用通俗水泥蓋房子;控制這些,你是在用高級水泥蓋房子。
但是,就是這麼一個小小的常識點,年夜家可以去查詢拜訪一下四周的同事同伙,沒准你會獲得一個“欣喜”。
因為這篇文章是忽然有感而寫,上面順手編寫的SQL語句沒有經由測試。
看上面的幾段SQL語句:
#1
SELECT ID,COUNT(ID) AS TOTAL
FROM STUDENT
GROUP BY ID
HAVING TOTAL>2
#2
SELECT ID,COUNT(ID) AS TOTAL
FROM STUDENT
GROUP BY ID
ORDER BY TOTAL
#3
SELECT FIRSTNAME+' '+LASTNAME AS NAME, COUNT(*) AS COUNT
FROM STUDENT
GROUP BY NAME
你認為哪個不克不及夠勝利履行?
上面是SELECT語句的邏輯履行次序:
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語句的現實物理履行次序能夠會因為查詢處置器的分歧而與這個次序有所收支。
幾個示例
示例一:
SELECT ID,COUNT(ID) AS TOTAL
FROM STUDENT
GROUP BY ID
HAVING TOTAL>2
認為這個SQL語句眼生嗎?對,異常基本的分組查詢。但它不克不及履行勝利,由於HAVING的履行次序在SELECT之上。
現實履行次序以下:
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的。
示例二
SELECT ID,COUNT(ID) AS TOTAL
FROM STUDENT
GROUP BY ID
ORDER BY TOTAL
這個的現實履行次序是:
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)呢?
SELECT ID,COUNT(ID) AS TOTAL
FROM STUDENT
GROUP BY ID
ORDER BY COUNT(ID)
現實履行次序:
1.FROM STUDENT
2.GROUP BY ID
3.SELECT ID,COUNT(ID) AS TOTAL
4.ORDER BY COUNT(ID)
沒錯,它是可以或許勝利履行的,看SQL履行籌劃,它與下面ORDER BY TOTAL是一樣的。ORDER BY 是在SELECT後履行,是以可以用別號TOTAL。
示例三
SELECT FIRSTNAME+' '+LASTNAME AS NAME, COUNT(*) AS COUNT
FROM STUDENT
GROUP BY NAME
現實履行次序:
FROM STUDENT
GROUP BY NAME
SELECT FIRSTNAME+' '+LASTNAME AS NAME,COUNT(*) AS COUNT
很顯著,履行GROUP BY NAME時別號NAME還沒有創立,是以它是不克不及履行勝利的。
總結
回想起已經隨便問過一些人這個成績,不論誰說不曉得時我們都邑有意譏笑一翻,固然此譏笑非彼譏笑。但現實證實照樣有一些人不會留意到這個常識點,在此貼出來只是做為一個友愛的提示。