测试数据脚本

CREATE TABLE Atable
(
S# INT,
Sname nvarchar(32),
Sage INT,
Sfrom nvarchar(8)
) insert into Atable
select 1,N'李四',18,N'A' union all
select 2,N'tom',19, N'A' union all
select 3,N'刘一',17,N'A' union all
select 4,N'jack',18,N'A' CREATE TABLE Btable
(
S# INT,
Sname nvarchar(32),
Sage INT,
Sfrom nvarchar(8)
) insert into Btable
select 1,N'刘一',18,N'B' union all
select 2,N'钱二',19,N'B' union all
select 3,N'张三',17,N'B' union all
select 4,N'李四',18,N'B'

数据表

Join(麻蛋  废话不多说 有图有真相)

1.cross join

  交叉连接不需要任何连接条件。两个表的的数据直接进行笛卡尔积运算。如果一个表有m行,而另一个表有n行,将得到m*n的结果集。

1
SELECT FROM Atable as A  cross join Btable as order by A.S#

2.inner join == join

  内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。

  对两个输入表进行笛卡尔积,然后根据指定的谓词对结果行进行过滤。

怎么理解内联接:

  理解内联接最容易的方法是认为A表中每一行同C表中的所有行进行比较,如果A表中的id和C表中的id相等,则匹配成功。

  另外一种更正式的方法是在关系代数的基础上来考虑内联接,联接运算首先对两个表求笛卡尔积(4行A记录*5行C记录=20行记录),然后根据条件C.id=A.id对行进行过滤,最终返回16行。

1
SELECT FROM Atable as A  INNER JOIN Btable as ON A.Sname = B.Sname

3.left outer join == left join

  产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

1
SELECT FROM Atable as left outer join Btable as ON A.Sname = B.Sname

4.right outer join == right jion

  产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

1
SELECT FROM Atable as right outer join Btable as ON A.Sname = B.Sname

5.full outer  join  == full join  

  产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

1
SELECT FROM Atable as full join Btable as ON A.Sname = B.Sname

6.union与union all

  区别就是联合查询的时候union会去重,union all不会去重

1
通过UNION运算符来将两张表纵向联接,基本方式为:
1
2
3
4
5
6
7
SELECT 列1 , 列2 FROM 表1
UNION
SELECT 列3 , 列4 FROM 表2;
UNION ALL为保留重复行:
SELECT 列1 , 列2 FROM 表1
UNION ALL
SELECT 列3 , 列4 FROM 表2;
1
2
SELECT Sname FROM Atable  UNION  SELECT Sname FROM  Btable 
SELECT Sname FROM Atable  UNION ALL SELECT Sname FROM  Btable 

自交叉联接

  对同一个表进行联接,就是自联接。交叉联接、内联接、外联接都支持自联接。

SELECT A1.a,A2.a FROM A AS A1 CROSS JOIN A AS A2

  A表有4行,查询会生成一个包含4*4=16行的数据的结果集。

  在自联接中,必须为表起别名。如果不为表指定别名,联接结果中的列名就会有歧义。

  比如在本例中,别名为A1,A2。

小结

sql server join ,inner join ,left join ,right join 的使用的更多相关文章

  1. SQL Server的三种物理连接之Hash Join(三)

    简介 在 SQL Server 2012 在一些特殊的例子下会看到下面的图标: Hash Join分为两个阶段,分别为生成和探测阶段. 首先是生成阶段,将输入源中的每一个条目经过散列函数的计算都放到不 ...

  2. SQL Server的三种物理连接之Merge join(二)

    简介 merge join 对两个表在连接列上按照相同的规则排序,然后再做merge,匹配的输出. 下面这个动态图展示了merge join的详细过程. merge join示例 创建两个表 IF O ...

  3. SQL Server的三种物理连接之Loop Join(一)

    Sql Server有三种物理连接Loop Join,Merge Join,Hash Join, 当表之间连接的时候会选择其中之一,不同的连接产生的性能不同,理解这三种物理连接对性能调优有很大帮助. ...

  4. Sql Server 与 MySql 在使用 update inner join 时的区别

    Sql Server -- 不使用别名 UPDATE tb_User SET tb_User.pass = '' FROM tb_User usr INNER JOIN tb_Address addr ...

  5. 《SQL Server 2008从入门到精通》--20180703

    SELECT操作多表数据 关于连接的问题,在<SQL必知必会>学习笔记中已经讲到过,但是没有掌握完全,所以再学一下. JOIN连接 首先我们先来看一下最简单的连接.Products表和Ve ...

  6. SQL Server的Linked Servers

    文章搬运自:SQL Server的Linked Servers(链接) 参考引用一下,感谢作者~ 我们在使用SQL Server时,有时会有这种需求,需要从一个SQL Server服务器A中,查询另一 ...

  7. SQL Server的Linked Servers(链接)

    我们在使用SQL Server时,有时会有这种需求,需要从一个SQL Server服务器A中,查询另一个SQL Server服务器B中的表,然后将SQL Server服务器A中的表和SQL Serve ...

  8. SQL Server Join方式

    原文:SQL Server Join方式 0.参考文献 Microsoft SQL Server企业级平台管理实践 看懂SqlServer查询计划 1.测试数据准备 参考:Sql Server中的表访 ...

  9. 浅谈SQL Server中的三种物理连接操作(HASH JOIN MERGE JOIN NESTED LOOP)

    简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...

  10. SQL Server中INNER JOIN与子查询IN的性能测试

    这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...

随机推荐

  1. css特效实现透明渐变

    知乎发现栏目上的标题图一般都是以下图方式展现的,很显然它是利用渐变去实现的.思路很有意思,主要是要有两方面的认知: 这张图其实可以分成两部分,右边控制图形和渐变,左边就是一张纯色背景,和渐变无关 透明 ...

  2. php创建生成数组的相关函数

    php中和数组创建生成的函数有很多,用于定义数组的函数array(),数组合并函数array_combine(),还有array_fill(),array_fill_keys(),range()等等. ...

  3. scrapy框架4——下载中间件的使用

    一.下载中间件 下载中间件是scrapy提供用于用于在爬虫过程中可修改Request和Response,用于扩展scrapy的功能:比如: 可以在请求被Download之前,请求头部加上某些信息(例如 ...

  4. 【已解决】每次打开Excel时会同时打开一个空的Excel表格

    每次打开Excel时会同时打开一个空的Excel表格,情况如图. 官方解法如下,本人验证有效: 方法1, 请到以后路径中检查是否存在与空白文件夹同名字的Excel文件,删除它. C:\Users\\A ...

  5. win10+pyspark+pycharm+anaconda单机环境搭建

    一.工具准备 1. jdk1.8 2. scala 3. anaconda3 4. spark-2.3.1-bin-hadoop2.7 5. hadoop-2.8.3 6. winutils 7. p ...

  6. django pk 和id用法

    pk就是primary key的缩写,也就是任何model中都有的主键,那么id呢,大部分时候也是model的主键,所以在这个时候我们可以认为pk和id是完全一样的. class Student(mo ...

  7. 使用 rm -rf 删除了工程目录,然后从 pycharm 中找了回来

    一次惊险的 rm -rf 操作,以后删东西真的要小心,慢点操作 前两天周 4 周 5,写了两天的 python 代码没有提交,昨天晚上删日志目录,先跨目录查看了下日志目录的列表情况:ll ~/logs ...

  8. .net core的startup中配置读取

    public class Startup { public Startup(IHostingEnvironment env) { Configuration = new ConfigurationBu ...

  9. 【转载】Request对象的作用以及常见属性

    Request对象是Asp.Net应用程序中非常重要的一个内置对象,其作用主要用于服务器端获取客户端提交过来的相应信息,比较常用的有使用Requset对象获取用户提交的html表单信息,Request ...

  10. 【转载】C#使用FirstOrDefault方法快速查找List集合中符合条件的第一个实体

    在C#的List集合的操作中,有时候我们需要根据相关条件快速从List集合中获取到第一个符合条件的实体对象,例如有个全校班级的List集合,我们需要根据班级代码快速从List集合中查找出班级信息.可以 ...