关于left join 和 inner join

今天遇到一个逻辑很复杂的SQL,虽然写出来了,但是并没有完全体会,找了找资料,算是摸清楚了left join和inner join 的实际意义。

感谢PCJIM的文章,写的非常明白,原文地址:http://www.cnblogs.com/pcjim/articles/799302.html。

实际上,join的作用在于将2个表组合起来成为一个新表,如何组合,完全看是使用什么join。

inner join,属于等值连接,我有表A和表B,其中A.Column1和B.Column1作为连接条件,即

select

*

from A inner join B

on A.Column1 = B.Column1

那么,根据条件,SQL会将等值的表A表B组合起来得出以下格式:

A.Column1  A.Column2  A.ColumnX...  B.Column1  B.Column2  A.ColumnX...

  1      xxx      xxx        1      xxx      xxx

  2      xxx      xxx        2      xxx      xxx

而left join则仅仅以左表作为连接标准。

什么是左表?select * from A left join B on A.Column1 = B.Column1中的A即为左表(left的左边即左表咯)

最后SQL会将A和B全部信息组合为一个新表,如下所示

A.Column1  A.Column2  A.ColumnX...  B.Column1  B.Column2  A.ColumnX...

  1      xxx      xxx        1      xxx      xxx

  2      xxx      xxx        2      xxx      xxx

  3      xxx      xxx        null     null      null

从上面格式看出,当B表中的Column 1不存在A表中Column的时候,SQL会返回null 信息来和A表组合成一个记录。

以上得出的结论呢,我更想表达的是join是将2个表合成为一个新的表,

在实际应用中,我们不单单是只用一个join,有时候,需要通过A和B的join得到一个表C,之后再用表D去joinC得到一个新表,

从新表得到我们想要得到的信息去做别的操作(今天就遇到这破逻辑........关键还是的把ER图画好啊......搞不清关系SQL是无法向下写下去的)

时间: 2024-12-13 18:18:36

关于left join 和 inner join的相关文章

sql之left join、right join、inner join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下: --------------------------------------------表A记录如下:aID aNum1 a200501112 a200501123 a200501134 a200501145 a20050115 表B记录如下:bID bNa

sql语法:inner join on, left join on, right join on详细使用方法

inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 INNER JOIN 语法: INNER JOIN 连接两个数据表的用法: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号 INNER JOIN 连接三个数据表的用法: SELECT * FROM (表1 INNER J

【转】Mysql之inner join,left join,right join详解

首先借用官方的解释下: inner join(等值连接):只返回两个表中联结字段相等的行: left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录: right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录. 比如我们有xs.cj两个表 xs表 cj表 --------------- ---------------------- id name id score 1 张三 1 96 2 李四 2 80 3 86 Sql代码 1 SELECT *

图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

NESTED LOOPS & HASH JOIN & SORT MERGE JOIN

表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops.一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nstedloop.如果驱动表返回记录太多,就不适合nested loops了.如果连接字段没有索引,则适合走hash join,因为不需要索引. 可用

sql语法:inner join on, left join on, right join on具体用法

inner join(等值连接) 仅仅返回两个表中联结字段相等的行 left join(左联接) 返回包含左表中的全部记录和右表中联结字段相等的记录 right join(右联接) 返回包含右表中的全部记录和左表中联结字段相等的记录 INNER JOIN 语法: INNER JOIN 连接两个数据表的使用方法: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号 INNER JOIN 连接三个数据表的使用方法: SELECT * FROM (表1 IN

Sql server left join,right join和inner join的比较

转载于:http://www.2cto.com/database/201206/137067.html 今天来研究一下数据库left join .right join 和 inner join 这三者之间的区别 在网上看别人的写过的源代码,绝大多数的应用系统开发,数据库都会有很多的各种各样的join,那些个表table之间join的让人眼花缭乱的,其实一直都是一知半解的状态, 因为在公司上班也不用自己去写SQL代码(我这里是指稍微大一点的正规软件公司,很小小公司还是要自己写sql的),因为公司有

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

INNER JOIN与LEFT JOIN在SQL Server的性能

我创建了INNER JOIN 9桌,反正需要很长的(超过五分钟).所以,我的民歌改变INNER JOIN来LEFT JOIN LEFT JOIN的性能较好,在首次尽管我所知道的.之后我变了,查询的速度显著提高. 我想知道为什么LEFT JOIN的速度比INNER JOIN? 我的样子如下:SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D因此没有 更新: 这是我的简单架构的. FROM sidisaleshdr