SQL中inner join、outer join和cross join的区别

摘自:http://blog.csdn.net/scythe666/article/details/51881235

缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。

现有两张表,Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的:

1.INNER JOIN 产生的结果是AB的交集

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name

          

2.LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

           

3.RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name

图标如left join类似。

4.FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

你可以通过is NULL将没有匹配的值找出来:

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableA.id IS null OR TableB.id IS null

           

5. CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

SELECT * FROM TableA CROSS JOIN TableB

相信大家对inner join、outer join和cross join的区别一目了然了。

时间: 2024-08-08 10:27:58

SQL中inner join、outer join和cross join的区别的相关文章

SQL 快速新增权限数据表(使用cross join)

摘要:SQL 快速新增权限数据表(使用cross join) 1.因为设计系统的时候 将角色 权限 系统都做了分开处理 偏偏交集起来相当多数据 2.决定不自己打 使用cross join 先练习一下一般的语法 --use 数据库 --select a.浏览,a.修改,a.删除,b.系统名称,c.角色名称 --from 角色权限 as a --cross join 系统 as b --cross join 角色 as c --go 像这样 3.开始改写 使用cross join --先清空表单 已

SQL中的left outer join,inner join,right outer join用法详解

这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的.在关系代数的形式化语言中:?          用表.或者数据集合表示关系或者实体.?          用行表示元组.?          用列表示属性.关系代数包含以下8个关系运算符?          选取――返回满足指定条

SQL中的左连接与右连接有什么区别,点解返回值会不同?(转)

例子,相信你一看就明白,不需要多说 A表(a1,b1,c1) B表(a2,b2) a1 b1 c1 a2 b2 01 数学 95 01 张三 02 语文 90 02 李四 03 英语 80 04 王五 select A.*,B.* from A left outer join B on(A.a1=B.a2) 结果是: a1 b1 c1 a2 b2 01 数学 95 01 张三 02 语文 90 02 李四 03 英语 80 NULL NULL select A.*,B.* from A righ

SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别

转自:http://www.cnblogs.com/dyufei/archive/2009/11/12/2573974.html 不言自明,看SQL就完全理解了,不需要过多解释,不错,分享之: ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有组合的聚合. ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合. ROLLUP 优点: (1)ROLLUP 返回单个结果集

SQL中数据类型char/varchar/nvarchar/nchar/text/ntext的区别

.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim(). 2.VARCHAR.存储变长数据,但存储效率没有CHAR高.如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的.VARCHAR类型的实际长度是它的值的实际长度+1.为什么“+1”呢?这一个字节用于保存实际

SQL中的JOIN语法详解

参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, right join的意义和用法. 第二个是 SQL中的left outer join,inner join,right outer join用法详解 讲了关系运算背后的数学原理,以及提到了更多类型的连接操作: inner join- 笛卡尔乘积再选取, left outer join, right out

SQL中的join操作总结(非常好)

1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接.外联接和交叉联接等.如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的数据,这时我们应该考虑使用Join,因为Join具体联接表或函数进行查询的特性 本文将通过具体例子介绍SQL中的各种常用Join的特性和使用场合: 目录 Inner join Outer join Cross join Cross apply Cross apply 和 Inner join的区别

Sql的各种连接用法(cross join、inner join、full join)

1.名词解释: 笛卡尔乘积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积,又称直积,表示X x Y ,第一个对象是X的成员,而第二个对象       是Y的所有可能有序列的其中的一个成员.假设集合A={a,b},集合B={0,1, 2},则两个笛卡尔积为{(a,0),(a,1),(a,2),         (b,0),(b,1),(b,2)} 2.原址参考:http://ashui.net/archives/2013/552.html 1> 交叉连接CROSS JOIN SELECT *

SQL中的join连接查询

inner join(交集 ,自然连接, 简写成join) 是最普通的连接查询,相当于早期根据where条件连接的查询 outer join(并集或部分并集,左表 + 右表) left [outer] join(左表产生完全集,右表有则匹配,没有则为null) right [outer] join(右表产生完全集,左表有则匹配,没有则为null) full [outer] join(并集) cross join(笛卡尔积,左表 * 右表) 开发中基本不用

翻译:Gregory Larsen,2016/02/19(第一版:2014年12月17日)高级T-SQL阶梯1级:使用CROSS JOIN介绍高级T-SQL

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119933/ 原文作者:Gregory Larsen,2016/02/19(第一版:2014年12月17日) 系列 本文是"Stairway Series:Stairway to Advanced T-SQL"的一部分 这个阶梯将包含一系列文章,这些文章将在前面两个T-SQL阶梯,T-SQL DML和T-SQL超越基础知识的T-SQL基础上进行扩展. 这个楼梯应