zoukankan      html  css  js  c++  java
  • 连接、关联、JOIN、APPLY(SQL Server)

    连接方式

    连接类型

    个人总结

    阐述(生成两个集合的约束笛卡儿积)

    INNER    JOIN

    内连接

    关联相同的(用于查找关联的信息)

    FROM C AS c INNER JOIN D AS d ON c.xx = d.xx
    前面的查询表达式将 ON 条件为 true 的每一个左侧集合元素与其右侧集合的配对元素组合起来。
    如果未指定 ON 条件,则 INNER JOIN 退化为 CROSS JOIN。

    LEFT     JOIN

    左连接

    左面全保留(可以用来查找左面多余的,右面为NULL)

    FROM C AS c LEFT OUTER JOIN D AS d ON c.xx = d.xx
    前面的查询表达式将 ON 条件为 true 的每一个左侧集合元素与其右侧集合的配对元素组合起来。
    如果 ON 条件为 false,表达式仍处理与右侧元素(值为 null)配对的单个左侧元素实例。

    RIGHT   JOIN

    右连接

    右面全保留(可以用来查找右面多余的,左面为NULL)

    FROM C AS c RIGHT OUTER JOIN D AS d ON c.xx = d.xx
    前面的查询表达式将 ON 条件为 true 的每一个右侧集合元素与其左侧集合的配对元素组合起来。
    如果 ON 条件为 false,表达式仍处理与左侧元素(值为 null)配对的单个左侧元素实例。

    FULL     JOIN

    完全连接

    显示左右关联上和左右关联不上的,关联不上为NULL

    FROM C AS c FULL OUTER JOIN D AS d ON c.xx = d.xx
    前面的查询表达式将 ON 条件为 true 的每一个左侧集合元素与其右侧集合的配对元素组合起来。
    如果 ON 条件为 false,表达式仍处理与右侧元素(值为 null)配对的一个左侧元素实例。
    此外,它还处理与左侧元素(值为 null)配对的一个左侧元素实例。

    CROSS  JOIN

    交叉连接

    左右互相1对全部连接

    FROM C AS c CROSS JOIN D as d
    指定两个表的叉积,返回相同的行。

    Image

    延伸学习

    关于EXCEPT和INTERSECT的用法

    EXCEPT

    也是去重的, 但是它在去掉两个或多个集合中重复数据之后, 只会保留第一个结果集中的数据
    查询上面有下面没有的
    SELECT * FROM [dbo].[JOIN1]
    EXCEPT
    SELECT * FROM [dbo].[JOIN2]

    INTERSECT

    就是查询两个结果集的并集, 利用上面的数据
    查询两个结果集中相同的
    SELECT * FROM [dbo].[JOIN1]
    INTERSECT
    SELECT * FROM [dbo].[JOIN2]

    学习地址

    http://blog.csdn.net/tjvictor/article/details/5346024

    物理连接

    Nested Loops Join(嵌套循环连接)

    Merge Join(合并连接)

    Hash Join(哈希连接)

    最适合于 相对较小的两个数据集,
    inner table在做Join的字段上有一个索引
    输入数据集大小中等或较大,
    且在Join字段上有索引帮助排序,
    或者语句要求返回一个排好序的结果集
    输入数据集较大。
    尤其适合于Data warehouse 环境下的那些复杂的查询语句
    并发性 能够支持大量的并发用户同时运行 有索引支持的Many-to-one的join并发性较好,
    Many-To-Many的就差了
    最好同时只有少数用户在同时运行
    Join时要否两个字段相等 不要 要(除非是full outer join)
    要否使用内存资源 不使用 不使用(如果要为Merge Join做排序,可能要使用) 使用
    要否使用tempdb 不使用 many-to-many join要使用 使用
    输入数据集要否排序 不要 不要
    希望输入数据集排序否 希望outer input是排序的 是的 不要
    学习地址 http://www.cnblogs.com/CareySon/archive/2013/01/09/2853094.html
     
    APPLY 使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。
    学习地址 https://technet.microsoft.com/zh-cn/library/ms175156(v=sql.105).aspx
      http://blog.csdn.net/ylqmf/article/details/5316694
      http://www.cnblogs.com/yukaizhao/archive/2008/04/30/cross_apply.html
  • 相关阅读:
    获取mysql数据库中的表信息
    Django Rest Framework --- 分页器组件
    Django Rest Framework --- 频率组件
    Django Rest Framework --- 权限组件
    Django Rest Framework --- 认证组件
    Django Rest Framework --- 视图组件
    序列化组件
    restful规范,cbv源码执行流程,drf之APIView及Respons源码分析
    前后台分离式开发(文件的上传下载),cookie(存放在前台),session(存放在后台)
    ajax,分页器
  • 原文地址:https://www.cnblogs.com/felix-xu/p/4898069.html
Copyright © 2011-2022 走看看