如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引

如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引

如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引,更別提遊標和提交叉表查詢了

如何創建臨時表

臨時表與永久表相似,但臨時表存儲在 tempdb 中(如下圖)。臨時表有兩種類型:本地臨時表和全局臨時表。它們在名稱、可見性以及可用性上有區別。本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的用戶連接是可見的;當用戶從 SQL Server 實例斷開連接時被刪除。全局臨時表的名稱以兩個數字符號 (##) 打頭,創建後對任何用戶都是可見的,當所有引用該表的用戶從 SQL Server 斷開連接時被刪除。

如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引

Having

“Where” 是一個約束聲明,使用Where來約束來之數據庫的數據,Where是在結果返回之前起作用的,且Where中不能使用聚合函數。

“Having”是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作,在Having中可以使用聚合函數。

HAVING子句可以讓我們篩選成組後的各組數據,WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合後對組記錄進行篩選。

如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引

讓我們還是通過具體的實例來理解GROUP BY 和 HAVING 子句:

SQL實例:

一、顯示每個地區的總人口數和總面積:

SELECT region, SUM(population), SUM(area)

FROM bbc

GROUP BY region

先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組後,然後用聚合函數對每組中的不同字段(一或多條記錄)作運算。

二、顯示每個地區的總人口數和總面積.僅顯示那些人口數量超過1000000的地區。

SELECT region, SUM(population), SUM(area)

FROM bbc

GROUP BY region

HAVING SUM(population)>1000000

[注] 在這裡,我們不能用where來篩選超過1000000的地區,因為表中不存在這樣一條記錄。

相反,HAVING子句可以讓我們篩選成組後的各組數據.

如何創建全局臨時表、不知道having、不知道聚集索引和非聚集索引


分享到:


相關文章: