Select
分析一個查詢實例
Select empid,year(orderdate) as orderYear,count(*) as orderCount
From dbo.orderInfo
where custid=71
group by empid,Year(orderdate)
having count(*) >1
order by empid
以上語句在sql server內的執行順序是 from--where--group by--having --select--order by
1.From
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
新聞熱點
疑難解答