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