连接方式

连接类型

个人总结

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

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
指定两个表的叉积,返回相同的行。

延伸学习

关于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

连接、关联、JOIN、APPLY(SQL Server)的更多相关文章

  1. INNER JOIN与LEFT JOIN在SQL Server的性能

    我创建了INNER JOIN 9桌,反正需要很长的(超过五分钟).所以,我的民歌改变INNER JOIN来LEFT JOIN LEFT JOIN的性能较好,在首次尽管我所知道的.之后我变了,查询的速度 ...

  2. 问题:sqlserver 跨服务器连接;结果:Sql Server 跨服务器连接

    Sql Server 跨服务器连接 用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset ...

  3. SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...

  4. com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性。确保 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”

    检查SQL Server Configuration Manager 确定实例名为"SKYSQLEXPRESS"下的TCP/IP已经开启了: sql2014配置(系统为Window ...

  5. 使用 cmd连接 Oracle,MySql,SQL Server 数据库

    1. Oracle cmd连接数据库 语法: sqlplus 用户/口令(密码)@服务器IP/数据库实例名(SID) 1.1 方式一 数据库服务在本机上IP可以用localhost替换 sqlplus ...

  6. FineReport9.0定义数据连接(创建与SQL Server 2016数据库的连接)

    1.下载并安装好FineReport9.0和SQL Server 2016 2.开始——>所有应用——>Microsoft SQL Server 2016——>SQL Server ...

  7. How to Delete using INNER JOIN with SQL Server?

    https://stackoverflow.com/questions/16481379/how-to-delete-using-inner-join-with-sql-server You need ...

  8. 如何远程连接非默认端口SQL Server

    SQL Server Management Studio建立远程SQL连接  连接的时候写: 127.0.0.1,49685\sqlexpress 记得使用逗号,不是冒号

  9. .net core连接Liunx上MS SQL Server

    场景 由于业务要求,需要对甲方的一个在SQL Server上的财务表进行插入操作.研究了半天,因为一个小问题折腾了很久. 过程 .net core端: 1. 利用EF,就需要的导入相关的Nuget包, ...

  10. sql连接错误(Microsoft SQL Server,错误:2)

    昨天用SQL语句建表的时候写了一段代码,对于代码的逻辑和内容我不太肯定对不正确.反正是毫不犹豫的让它运行了,过程中出现好几个错误,当时没有太在意,想着大不了出错了再重写一个.结果--玩坏了,从昨天到如 ...

随机推荐

  1. javascript获取对象宽度和高度

    标签元素的宽高值获取//绝对宽度Obj.offsetWidth//绝对高度Obj.offsetHeight 以下是获取窗口对象的宽高值.clientHeight   获取对象的高度,不计算任何边距.边 ...

  2. apache 修改端口号 修改根目录 建立多个网站

    修改apache端口号选择Apache下的httpd.conf,查找:Listen,你会看到 #Listen 12.34.56.78:80Listen 80把80改成90,保存就好了 修改WampSe ...

  3. matplotlib curve.py

    import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 100) sinX = np.sin(x) ...

  4. Memcached源码分析——hash

    以下为memcached中关于使用的hash算法的一点记录 memcached中默认使用的是Bob Jenkins的jenkins_hash算法 以下4段代码均在memcached-1.4.22/ha ...

  5. bzoj4160: [Neerc2009]Exclusive Access 2

    Description 给出 N 个点M 条边的无向图,定向得到有向无环图,使得最长路最短. N ≤ 15, M ≤ 100 Input 第一行一个数M (1≤M≤100). 接下来M行,每行两个大写 ...

  6. ShapeDrawable 资源

    ShapeDrawable 用于定义一个基本的几何图形(如矩形.圆形.线条等),定义 ShapeDrawable 的 XML 文件的根元素是<shape.../>元素,该元素可指定如下属性 ...

  7. BZOJ 1022 [SHOI2008]小约翰的游戏John

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 1036[Submit] ...

  8. HDOJ(HDU) 2083 简易版之最短距离(中位数)

    Problem Description 寒假的时候,ACBOY要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上.ACBOY可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点, ...

  9. python:unittest(测试框架)

    一,基本概念 TestCase:所有测试用例的基类 TestLoad:加载测试用例,返回TestSuite(测试套件) TestSuite:创建测试套件 TextTestRunner:运行测试用例 T ...

  10. 3D效果导航代码

    *, *:before, *:after { padding:; margin:; box-sizing: border-box; } .menu { list-style: none; width: ...