zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    日月
    硕人
    式微
    芣苡
    樛木
    兔罝
    绿衣
    汉广
    小星
    惠子相梁
  • 原文地址:https://www.cnblogs.com/ykwang/p/4659184.html
Copyright © 2011-2022 走看看