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

相关文章
相关标签/搜索