内部连接、左连接、右连接和全连接有什么区别?

INNER JOINLEFT JOINRIGHT JOINFULL JOIN有什么区别?MySQL

2021180 次浏览

内连接根据提供的ON子句获取两个表之间公共的所有记录。

左加入从链接的LEFT中获取所有记录,从右表中获取相关记录,但如果您从右表中选择了一些列,如果没有相关记录,这些列将包含NULL。

右加入类似于上述,但获取右表中的所有记录。

全面加入从两个表中获取所有记录,并将NULL放在相对表中不存在相关记录的列中。

阅读这篇关于代码项目的原创文章会对你有很大帮助:SQL连接的可视化表示

alt text

看看这篇文章:SQL服务器-更好的性能-左加入或不加入?

找到原始的:MySQL中JOIN和OUTER JOIN的区别

SQLJOIN子句用于合并来自两个或多个表的行,基于它们之间的公共字段。

SQL中有不同类型的连接可用:

内连接:当两个表中都有匹配项时返回行。

左加入:返回左表中的所有行,即使右表中没有匹配项。

右加入:返回右表中的所有行,即使左表中没有匹配项。

全面加入:合并左外连接和右外连接的结果。

联接的表将包含两个表中的所有记录,并为任何一侧缺少的匹配项填写NULL。

自我加入:将表连接到自身,就好像表是两个表一样,暂时重命名SQL语句中的至少一个表。

加泰罗尼亚加入:返回来自两个或多个连接表的记录集的笛卡尔乘积。

我们可以在详细信息中获取每个前四个连接:

我们有两个具有以下值的表。

表A

id  firstName                  lastName.......................................1   arun                        prasanth2   ann                         antony3   sruthy                      abc6   new                         abc

表B

id2 age Place................1   24  kerala2   24  usa3   25  ekm5   24  chennai

..................................................................。

内连接

说明:给出两个表的交集,即TableA和TableB共有的行。

语法

SELECT table1.column1, table2.column2...FROM table1INNER JOIN table2ON table1.common_field = table2.common_field;

在我们的示例表中应用它:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableAINNER JOIN TableBON TableA.id = TableB.id2;

结果

firstName       lastName       age  Place..............................................arun            prasanth        24  keralaann             antony          24  usasruthy          abc             25  ekm

左加入

说明:给出TableA中的所有选定行,以及TableB中的任何常见选定行。

语法

SELECT table1.column1, table2.column2...FROM table1LEFT JOIN table2ON table1.common_field = table2.common_field;

在我们的示例表中应用它:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableALEFT JOIN TableBON TableA.id = TableB.id2;

结果

firstName                   lastName                    age   Place...............................................................................arun                        prasanth                    24    keralaann                         antony                      24    usasruthy                      abc                         25    ekmnew                         abc                         NULL  NULL

右加入

说明:给出TableB中的所有选定行,以及TableA中的任何常见选定行。

语法

SELECT table1.column1, table2.column2...FROM table1RIGHT JOIN table2ON table1.common_field = table2.common_field;

在我们的示例表中应用它:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableARIGHT JOIN TableBON TableA.id = TableB.id2;

结果

firstName                   lastName                    age     Place...............................................................................arun                        prasanth                    24     keralaann                         antony                      24     usasruthy                      abc                         25     ekmNULL                        NULL                        24     chennai

全面加入

说明:返回两个表中的所有选定值。

语法

SELECT table1.column1, table2.column2...FROM table1FULL JOIN table2ON table1.common_field = table2.common_field;

在我们的示例表中应用它:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableAFULL JOIN TableBON TableA.id = TableB.id2;

结果

firstName                   lastName                    age    Place...............................................................................arun                        prasanth                    24    keralaann                         antony                      24    usasruthy                      abc                         25    ekmnew                         abc                         NULL  NULLNULL                        NULL                        24    chennai

有趣的事实

  • 对于INNER加入顺序并不重要。
  • 对于(左、右或全)OUTER联接,顺序很重要。

最好去检查这个链接,它会给你关于加入顺序的有趣细节。