單表查詢就是利用SELECT語句對目標表進行查詢,應用一定的邏輯處理,最后返回結果。這篇文章分為以下幾點進行總結。
1,示例查詢
2,SELECT語句的邏輯處理順序
3,幾個小坑
示例查詢看下面這段SQL代碼:
-- 設置數據庫上下文USE TSQLFundamentals2008;GO-- 從訂單表中找出客戶ID為71的記錄,并按職員ID和訂單年份進行分組,并且只保留具有多個訂單的分組,最后按職員ID-- 和訂單年份進行排序SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders FROM Sales.OrdersWHERE custid=71GROUP BY empid,YEAR(orderdate)HAVING COUNT(*)>1ORDER BY empid,orderyear
查詢結果:
與大多數編程語言的按代碼編寫順序來執行不同的是,SQL是按照它的邏輯順序來執行的,即使SELECT語句是在開始的位置出現的,但是它卻并不是首先執行的。那么SQL的邏輯執行順序是怎樣的呢?
1,FROM
2,WHERE
3,GROUP BY
4,HAVING
5,SELECT
5-1 OVER
5-2 DISTINCT
5-3 TOP
6,ORDER BY
幾個小坑在SELECT查詢過程中,有幾個小坑需要我們多加注意。
1,所有的聚合函數都分忽略NULL值,只有一個例外,Count(*)。例如,假設一個組有5行,其qty列的值分別為30,10,NULL,10,10。Count(*)會返回5,而Count(qty)則返回4。
2,給表達式或列定義別名最好用<表達式> AS <別名>的格式。
3,記住,SELECT子句是在FROM,WHERE,GROUP BY,以及HAVING語句之后處理的,所以對于SELECT語句之前處理的那些子句不可以引用SELECT語句中為表達式分配的別名,只有ORDER BY語句可以引用它,因為它是在SELECT之后處理的。
4,SQL查詢的結果并不保證是有序的,它是一個集合,而集合是無序的,理解SQL查詢結果是無序的這一點非常重要。
新聞熱點
疑難解答