数据库里左连接右连接和全连接的区别

如题所述

举个简单的例子吧,从结果来理解比较具体些。
a表
name sex
张三 男
李四 女

b表
name age
李四 30
王五 23

1\全外连接
select a.name,a.sex,b.name,b.age
from a full outer join b on a.name=b.name
结果如下,
name sex name age
张三 男 NULL NULL
李四 女 李四 30
NULL NULL 王五 23
关联字段name,左表有而右表没有的,如张三,b.name,b.age都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,a.name,a.sex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。相见如下
2\左
select a.name,a.sex,b.name,b.age
from a left outer join b on a.name=b.name
结果如下
name sex name age
张三 男 NULL NULL
李四 女 李四 30
2\右
select a.name,a.sex,b.name,b.age
from a right outer join b on a.name=b.name
结果如下
name sex name age
李四 女 李四 30
NULL NULL 王五 23
3\内联
select a.name,a.sex,b.name,b.age
from a inner join b on a.name=b.name
结果如下
name sex name age
李四 女 李四 30
4\交叉
select a.name,a.sex,b.name,b.age
from a cross join b on a.name=b.name
结果如下
name sex name age
张三 男 李四 30
李四 女 王五 23
张三 男 王五 23
李四 女 李四 30 望采纳

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的区别一目了然了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-30

1、左连接, 左边的表不加限制,返回包括左表中的所有记录和右表中联结字段相等的记录
右连接),右边的表不加限制,返回包括右表中的所有记录和左表中联结字段相等的记录
全连接,左右两边的表都不加限制,只返回两个表中联结字段相等的行。

2、 左连接是已左边表中的数据为基准,若左表有数据右表没有数据,则显示左表中的数据右表中的数据显示为空。左联接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

3、 右联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

本回答被网友采纳
第2个回答  推荐于2018-02-23
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
--------------------------------------------
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115
表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
注:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.本回答被网友采纳
第3个回答  2016-06-03

    左连接

(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。

(2)sql语句

select * from table1 left join table2 on table1.id=table2.id

  2.右连接

(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

(2)sql语句

select * from table1 right join table2 on table1.id=table2.id

 3.完整外部连接

(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

(2)sql语句

select * from table1 full join table2 on table1.id=table2.id

第4个回答  2016-05-25
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

http://www.cnblogs.com/pcjim/articles/799302.html

数据库里左连接右连接和全连接的区别是什么
1、左连接, 左边的表不加限制,返回包括左表中的所有记录和右表中联结字段相等的记录 右连接),右边的表不加限制,返回包括右表中的所有记录和左表中联结字段相等的记录 全连接,左右两边的表都不加限制,只返回两个表中联结字段相等的行。2、 左连接是已左边表中的数据为基准,若左表有数据右...

数据库里左连接右连接和全连接的区别是什么?
1、左连接, 左边的表不加限制,返回包括左表中的所有记录和右表中联结字段相等的记录右连接),右边的表不加限制,返回包括右表中的所有记录和左表中联结字段相等的记录全连接,左右两边的表都不加限制,只返回两个表中联结字段相等的行。2、 左连接是已左边表中的数据为基准,若左表有数据右表没...

图解:史上最详细之数据库左连接、右连接、内连接、全连接!
右外连接(RIGHT JOIN):返回右表所有数据,左边匹配的数据或NULL值。 全连接(FULL JOIN):MySQL不支持,通常通过左连接和右连接的组合实现,返回所有数据。 3. 交叉连接(CROSS JOIN) 返回两个表的所有组合,也称笛卡尔积,用于展示所有可能的配对组合。4. 联合连接(UNION JOIN) 找出...

数据库左连接和右连接的不同点以及注意点
数据库左连接和右连接的区别主要在于连接影响的表。在左连接(left join)中,查询结果包含了左表的所有数据以及满足连接条件的数据,如果右表没有匹配的记录,则左表对应部分的值将被标记为 NULL。而在右连接(right join)中,结果包含了右表的所有数据以及满足连接条件的数据,若左表无匹配记录,则右表...

数据库左连接、右连接、内连接、全连接笔记
数据库连接类型总结在数据处理中,不同类型的连接方式对应着不同的数据展示策略。以下是左连接、右连接、内连接、全连接以及它们的不包含内连接版本的直观解析:1. INNER JOIN (内连接)内连接显示两个表中都存在的数据,如同两个集合的交集,查询结果只包含匹配的记录。代码示例:... (查询结果)2. ...

MySQL 的内连接、左连接、右连接有什么区别?
内连接关键字:inner join;左连接:left join;右连接:right join。 内连接是把匹配的关联数据显示出来;左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。

数据库左连接和右连接有什么区别
数据库中的左连接和右连接的区别可以概括为一句话来表示即左连接where只影响右表,右连接where只影响到左表【推荐课程:MySQL教程】数据库中的左连接(left join)和右连接(right join)区别左连接(Left Join)select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID左连接后的检索结果是显示...

MySQL多表查询与左连接、右连接、内连接、全连接
左连接:也叫左外连接(left [outer] join)右连接:也叫右外连接(right [outer] join)全连接:full [outer] join ,MySQL不能直接支持。下面以经典的学生查询数据集四张表为例,演示MySQL中的四种连接方式。这四张表的字段、数据和ER图如下:字段说明 1.score表:s_id,c_id,score,多表,没...

数据库七种连接方式总结
左连接 left join 表示A表和B表的公共部分,再加上A表的独有部分。右连接right join 表示A表和B表公共部分,在加上B表的独有部分。查找A表独有部分,则需查找A表和B表的共有部分并加上A表的独有部分,在将A表和B表的共有部分剔除即可(也就是挑选B的主键为空的数据)。查找B表独有部分,...

左连接和右连接有什么区别
1、左连接:左连接的关键字是left join,语法公式为select *from dave a left join bl b on a .id=b .id。2、右连接:右连接的关键字是right join,语法公式为select *from dave a right join bl b on a .id=b .id。二、基础表不同 1、左连接:左连接的基础表为left join左侧数据表...

相似回答