zoukankan      html  css  js  c++  java
  • 【SQL Server】系统学习之一:表表达式

    本节讨论的相关内容包括:视图、派生表、CTE、内联表值函数

    场景:如果要查询一组数据(例如聚合数据,也就是几个表聚合在一起的数据),这些数据并未在数据库中以表的形式存在。

    1、视图:通常用来分解大型的查询。使查询更容易,无需在临时表中复制或者存储数据。视图存于数据库,适用于所有批处理的数据库对象。不适用于单个T-SQL的批处理。

    create view myview 

    as

    select ......

    2、派生表(内联视图) 

    select ....

    from(select .....) as a

    完全虚拟,优化器不会为它生成单独的计划。经过编译,会合并外部查询和内部查询。不会是性能降低或提高。

    出现多引用时比较麻烦,需要多次重复定义、多次查询。

    不允许使用order by(除非和top一起使用)

    派生表不能使相关的(where 外部查询表.a=内部查询表.a)[除了apply]

    3、CTE

    可定义多个

    with c1 as

    ()

    c2 as

    ()

    不可嵌套,但为了实现和嵌套派生表相同的效果,可以在c2中使用c1

    多引用优势,在接下来的查询中,多次引用cte,替代派生表的重复定义,多次查询方案。 好处是写法简单,但是实质,仍然是重新组织查询,直接访问底层的对象。所以如果数据表中包含大量的行,此时应该考虑使用临时表或表变量,减少访问基础表的次数为一次。

    很重要的一个用处:递归

    with emp as

    (

    select empid,empname ,mgrid from employees where empid=5

    union all

    select empid,empname ,mgrid from employees as em

    join emp on emp.mgrid=em.empid

    )

    select * from emp

    option (maxrecursion 2) 最大递归次数

  • 相关阅读:
    如何统计一个字符串中某个字符出现的次数
    从GitHub克隆项目到本地
    nginx能做什么
    dubbo的使用实例
    zookeeper单机安装
    Http发送post(x-www-form-urlencoded)请求
    集群与分布式的区别
    cas的客户端应用是负载均衡,单点退出怎么办?
    mybatis执行DDL语句
    sql server 行列互换
  • 原文地址:https://www.cnblogs.com/xyang/p/3885577.html
Copyright © 2011-2022 走看看