Select
分析一個(gè)查詢實(shí)例
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
以上語(yǔ)句在sql server內(nèi)的執(zhí)行順序是 from--where--group by--having --select--order by
1.From
dbo為數(shù)據(jù)的架構(gòu),最好能顯示的表明,因?yàn)槿绻粚?xiě)數(shù)據(jù)庫(kù)仍舊會(huì)自動(dòng)解析,會(huì)額外有一些開(kāi)支,寫(xiě)完能明確的表示用的哪個(gè)架構(gòu)的哪個(gè)對(duì)象。
2.Where
指定一個(gè)謂詞或邏輯表達(dá)式
注意sql 是三值邏輯,因此true跟非false并不是完全一樣的,還有一種處于unknown的狀態(tài)。
3.Group by
分組后會(huì)影響后面的having select等,以后的操作均以組為對(duì)象
因?yàn)榫酆虾瘮?shù)只為每個(gè)組返回一個(gè)值,所以一個(gè)元素不再group by中出現(xiàn)時(shí),那么它只能作為聚合函數(shù)的輸入如count(PRice),而不能作為輸出
聚合函數(shù)都會(huì)忽略null但是count不會(huì)。
4.having
5.select 子句
在本例子中有兩個(gè)函數(shù)year重復(fù)調(diào)用,但是sql內(nèi)部會(huì)識(shí)別重復(fù)的函數(shù),只會(huì)去調(diào)用一次
select 查詢不會(huì)保證返回的數(shù)據(jù)為一個(gè)集合,不嫩保證唯一性,這個(gè)時(shí)候可以用distinct
使用星號(hào)*的幾個(gè)壞處,a。只能按照表的默認(rèn)列順序返回,如果在客戶端按照列索引取值,表修改時(shí)會(huì)造成問(wèn)題。b. 內(nèi)部需要解析列名,造成開(kāi)銷。
列名計(jì)算是不能使用別名,可以使用重復(fù)函數(shù)調(diào)用的方式。
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
新聞熱點(diǎn)
疑難解答
圖片精選