SQL技術內幕三

Selectsql

分析一個查詢實例數據庫

Select empid,year(orderdate) as orderYear,count(*) as orderCount架構

From dbo.orderInfo函數

where custid=71server

group by empid,Year(orderdate)對象

having count(*) >1索引

order by empidit

以上語句在sql server內的執行順序是 from--where--group by--having --select--order byio

1.Fromdate

dbo爲數據的架構,最好能顯示的代表,由於若是不寫數據庫仍舊會自動解析,會額外有一些開支,寫完能明確的表示用的哪一個架構的哪一個對象。

2.Where

指定一個謂詞或邏輯表達式

注意sql 是三值邏輯,所以true跟非false並非徹底同樣的,還有一種處於unknown的狀態。

3.Group by

分組後會影響後面的having select等,之後的操做均以組爲對象

由於聚合函數只爲每一個組返回一個值,因此一個元素再也不group by中出現時,那麼它只能做爲聚合函數的輸入如count(price),而不能做爲輸出

聚合函數都會忽略null可是count不會。

4.having

5.select 子句

在本例子中有兩個函數year重複調用,可是sql內部會識別重複的函數,只會去調用一次

select 查詢不會保證返回的數據爲一個集合,不嫩保證惟一性,這個時候能夠用distinct

使用星號*的幾個壞處,a。只能按照表的默認列順序返回,若是在客戶端按照列索引取值,表修改時會形成問題。b. 內部須要解析列名,形成開銷。

列名計算是不能使用別名,可使用重複函數調用的方式。

6.order by

7.Top

能夠select top(1) percent 選取前百分之一

8.Over子句,分組但能返回全部值

Select orderid,custid,val,sum(val) over() as totalvalue,sum(val) ove(partitionby custid) as custtotalvalue

from sales.ordervalues

9.row_number()  rank  dense_rank

10.謂詞

In like between

11. case

相關文章
相關標籤/搜索