一.基本介绍

1.内连接:只返回两个表中连接字段相等的行。inner join(等值连接) 只返回两个表中联结字段相等的数据
2.左外连接(也称左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。以左表为基表,在from子句中使用关键字left outer join”或关键字“left join”来连接两张表。
3.右外连接(也称右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。以右表为基表,在from子句中使用关键字“right outer join”或关键字“right join”来连接两张表。
4.全外连接:返回左右表中所有的记录左右表中连接字段相等的记录。在from子句中使用关键字“full outer join”或关键字“full join”来连接两张表。

5.交叉连接(笛卡尔积):返回被连接的两个表所有数据行的笛卡尔积。返回结果集合中的数据行数等于第一个表中复合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

二.语法和图解

1.内连接(inner join)

内连接也称为等值连接,只返回两个表中键值匹配的行,即只有在两个表中都有匹配的数据时才会返回。内连接的语法如下:

select column
from table1
inner join table2
on table1.column = table2.column

在这里插入图片描述

2.左外连接

左连接返回左表中所有记录和右表中匹配的记录,如果右表中没有匹配的记录,则返回 NULL 值。左连接的语法如下:

select column
from table1
left join table2
on table1.column = table2.column

在这里插入图片描述

3.右外连接

右连接返回右表中所有记录和左表中匹配的记录,如果左表中没有匹配的记录,则返回 NULL 值。右连接的语法如下:

select column
from table1
right join table2
on table1.column = table2.column

在这里插入图片描述

4.满外连接(mysql不支持)

返回左右表中所有的记录和左右表中连接字段相等的记录。全外连接的语法如下:

select column
from table1
full join table2
on table1.column = table2.column

在这里插入图片描述

5.交叉连接(笛卡尔乘积)

返回结果集合中的数据行数等于第一个表中复合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

select column
from table1 , table2

三.案例

假设有两张表A和B
表A:

idname
1Alice
2Bob
3Carol

表B:

idscore
190
280
3null

1.内连接

select A.id, A.name, B.score 
from A 
inner join B 
on A.id = B.id;

结果

idnamescore
1Alice90
2Bob80
3Carolnull

2.左外连接

select A.id, A.name, B.score 
from A 
left join B 
on A.id = B.id;

结果

idnamescore
1Alice90
2Bob80
3Carolnull

3.右外连接

select A.id, A.name, B.score 
from A 
right join B 
on A.id = B.id;

结果

idnamescore
1Alice90
2Bob80
3Carolnull

四.总结

  • 左外连接 = 内连接 + 左边表中失配的元组(其中,缺少的右边表中的属性值用NULL表示)
  • 右外连接 = 内连接 + 右边表中失配的元组(其中,缺少的左边表中的属性值用NULL表示)
  • 满外连接 =内连接 + 左边表中失配的元组 + 右边表中失配的元组。

参考:https://blog.csdn.net/qq_62687015/article/details/128104836
https://www.jb51.net/article/283404.htm

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐