首页 > 开发 > 综合 > 正文

SQL技术内幕三

2024-07-21 02:46:22
字体:
来源:转载
供稿:网友
SQL技术内幕三

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表