查看内容

SQL技术内幕三

  • 2020-02-09 12:35
  • 数据库知识
  • Views

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(priceState of Qatar,而不可能一碗水端平出口

聚合函数都会忽视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

  1. case