测试数据脚本

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. 简单layer 快速上手

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Windows上安装配置SSH教程(1)

    作者:feipeng8848 出处:https://www.cnblogs.com/feipeng8848/p/8559803.html 本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位 ...

  3. 算术 HDU - 6715 (莫比乌斯反演)

    大意: 给定$n,m$, 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m\mu(lcm(i,j))$ 首先有$\mu(lcm(i,j))=\mu(i)\mu(j)\m ...

  4. Effective Java 读书笔记(五):Lambda和Stream

    1 Lamdba优于匿名内部类 (1)DEMO1 匿名内部类:过时 Collections.sort(words, new Comparator<String>() { public in ...

  5. windows + Eclipse

    https://www.eclipse.org/downloads/index-packages.php 下载好后是一个压缩文件,解压并放到相要存放软件的目录,双击打开解压后的目录下eclipse.e ...

  6. iview的table组件中加入超链接组件,可编辑组件,选择组件,日期组件

    这篇文章主要介绍了iview的table组件中使用选择框,日期,可编辑表格,超链接等组件. 1.select选择组件 // tableColumn数组响应对象需要传入一个固定的option数组,如果该 ...

  7. docker第二章--数据管理

  8. vue的事件对象

    事件对象: v-on:click/mouseover 简写:     @click=""   @click="show($event)" <input t ...

  9. requests模块的基本用法

    requests 什么是requests模块 python中封装好的一个基于网络请求的模块 作用 用来模拟浏览器发送请求 环境安装 pip install requests 编码流程 指定 url 发 ...

  10. Linux文件(夹)属性

    ll  或者 ls -lh 查看文件属性: