SQL中inner join,outer join和cross join的区别
发布网友
发布时间:2022-04-25 18:21
我来回答
共4个回答
热心网友
时间:2022-04-07 10:12
这三个join均是数据表相互连接用的。
1,inner join
属于内连接,返回两个表中都有记录的结果。
如:
select a.*, b.*
from tablea a inner join tableb b
on a.id=b.id
/*
查询结果为a的所有结果和b的所有结果
行数, id,列1,id, 列2
1 01 Li 01 Lei -- 只有id同时存在于两个表中的记录。
*/
2,outer join
属于外联结,返回主表的所有记录,若从表条件有对应,返回从表记录,若从表条件不对应,返回空。
分为左连接(left outer join),右连接(right outer join)和全连接(full outer join)。其中outer 可以省略。
即,left join , right join 和 full join.
select a.*, b.*
from tablea a left join tableb b
on a.id=b.id
/*
查询结果为如下:
行数, id,列1,id, 列2
1 01 Li 01 Lei -- 表b中存在id为01的记录
2 02 Kim null null -- 表b中不存在id为02的记录,右侧显示为null
*/
select a.*, b.*
from tablea a left join tableb b
on a.id=b.id
where b.id is null -- 返回只存在于a中,不存在与b中记录
b.id is not null -- 返回存在于a中且存在于b中的记录。等同于inner join。
以上是左连接,左侧的表是主表,右侧是从表。
若是右连接,右侧是主表,左侧是从表。
tablea a right join tableb b on a.id=b.id
即,全部显示b表的记录,a表中id存在于b表中中,显示a表记录。若a表id不存在b表中,左侧显示null。
全连接(full join)是将内连接,左连接和右连接汇总的结果显示出来。
select a.*, b.*
from tablea a full join tableb b on a.id=b.id
/*
行数, id, 列1,id, 列2
1 01 Li 01 Lei -- inner join
2 02 Kim null null -- left join
3 null null 03 Mei -- right join
*/
3,cross join
交叉连接,左侧表的每一条记录与右侧表的每一条记录进行join,返回结果为笛卡尔积。 即左侧表5条记录,右侧表4条记录,返回5×4=20条记录。当然也要看具体的条件如何
select a.*, b.*
from tablea a cross join tableb b
where a.col='*' and b.col='#'
/*
不能用on表示关联
行数, id, 列1,id, 列2
1 01 * 01 #
2 01 * 03 #
3 01 * 07 #
4 03 * 01 #
5 03 * 03 #
6 03 * 07 #
a 中col为*的两条记录,b 中col为#的三条记录,返回6条记录
*/
热心网友
时间:2022-04-07 11:30
共同点:
inner join, outer join, cross join 都是返回符合连接条件和查询条件的数据
不同点:
1. inner join: 内连接.
内连接查询到的结果: 实际上是两个表的交集.
语法: select * from A inner join B on 条件; (inner可以省略)
隐式内连接: select * from A,B where 条件;
显式内连接: select * from A inner join B on 条件;
2. outer join: 外连接
左外连接:
查询的结果: 是左边表的全部以及两个表的交集
语法: select * from A left outer join B on 条件;
右外连接:
查询结果: 是右边表的全部以及两个表的家里
语法: select * from A right outer join B on 条件;
3. cross join
交叉连接查询,也叫做笛卡尔积查询
查询结果: 得到的记录是两个表的笛卡尔积
语法: select * from A,B
热心网友
时间:2022-04-07 13:05
SQL中inner join、outer join和cross join的区别
http://blog.csdn.net/scythe666/article/details/51881235
上面有完整的图文示例,请参考
热心网友
时间:2022-04-07 14:56
这种问题还真忘了,辛苦网上有答案。但是我认为你先理解什么叫笛卡尔积,然后在去理解join,其实理解多表连接 要先理解笛卡尔积才好。我讲的不好,贴上链接吧http://www.phpddt.com/db/inner_join-outer-join.html
sql中innerjoin,outerjoin和crossjoin的区别
SQL中的连接操作主要包括三种类型:INNER JOIN、OUTER JOIN和CROSS JOIN。它们的主要区别在于处理查询结果时对待不匹配记录的方式。INNER JOIN:这是最常用的连接类型。它只返回两个表中匹配的行。如果某行在其中一个表中存在,但在另一个表中找不到匹配的行,那么该行不会被包含在查询结果中。简而言...
SQL中inner join,outer join和cross join的
SQL中的join操作是数据库查询中连接表数据的重要手段,它包括了inner join、outer join和cross join三种类型。首先,inner join只返回两个表中匹配的行,可以理解为它们的交集。例如,执行以下查询:SELECT * FROM TableA INNER JOIN TableB ON ***.name = ***.name 相比之下,outer join提供了更...
SQL中inner join,outer join和cross join的区别
1.INNER JOIN 产生的结果是AB的交集 SELECT* FROMTableA INNER JOIN TableB ONTableA.name = TableB.name 2.LEFT[OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。SELECT* FROMTableA LEFTOUTER JOIN TableB ONTableA.name = TableB.name 3.RIGHT[OUTER] JO...
SQL中inner join,outer join和cross join的区别
外连接(OUTER JOIN):外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:左外连接还返...
SQL 几种联表查询方式
三、INNER JOIN(内连接) 内连接就相当于普通的CROSS JOIN,只是格式不一样,INNER JOIN在后面有一个ON子句(相当于WHERE)的搜索条件,用于过滤返回的行。 四、OUTER JOIN (外连接) select * from ta outer join tb on (ta.c1=tb.c1) outer join告诉DBMS生成结果表,在此表中不仅带有相关(t...
SQL中的内连接外连接和交叉连接是什么意思?
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行...
MySQL中inner join 和 cross join 的区别
Inner join 和 Cross join 的区别:1、Cross join生成的是先生成笛卡尔集,然后on连接条件被视为了filter用于数据过滤,Inner join是直接基于join condition做连接,生成的join集合就是最终的输出结果,产生的中间数据更小。2、Inner join结合ON子句使用;Cross join用于其它地方。3、Cross join产生的是...
关于SQL数据库中cross join 和inner join用法上的区别?
SQL数据库中cross join 和inner join区别为:连接不同、条件筛选不同、语法不同。一、连接不同 1、cross join :cross join将A表的所有行分别与B表的所有行进行连接,返回的记录数为两个表的记录数乘积。2、inner join:inner join组合两个表中的记录,只有公共字段之中有相符的值才进行连接。二、...
MySQL中inner join 和 cross join 的区别
区别:(1)cross join生成的是先生成笛卡尔集,然后on连接条件被视为了filter用于数据过滤 (2)inner join是直接基于join condition做连接,生成的join集合就是最终的输出结果,产生的中间数据更小。实际上MySQL优化器会将这两条查询都优化成同一种join方式。inner join:多表联接建立记录集是十分有用的...
SQL多表查询的几种连接方式
多个表查询的时候,这些不同的连接类型可以写到一块。例如:SELECT T1.C1,T2.CX,T3.CYFROM TAB1 T1INNER JOIN TAB2 T2 ON (T1.C1=T2.C2)INNER JOIN TAB3 T3 ON (T1.C1=T2.C3)LEFT OUTER JOIN TAB4 ON(T2.C2=T3.C3);WHERE T1.X >T3.Y;上面这个SQL查询是多表连接的一个示范。