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