INNER JOIN,LEFT JOIN,RIGHT JOIN 和 FULL JOIN 有什么区别?

MySQL 中的 INNER JOINLEFT JOINRIGHT JOINFULL JOIN什么区别?

答案

阅读有关代码项目的原始文章将对您有很大帮助: SQL Joins 的可视表示

替代文字

还请检查此帖子: SQL SERVER –更好的性能–左联接还是不联接?

在以下位置找到原始版本: MySQL 中的 JOIN 和 OUTER JOIN 之间的区别

INNER JOIN根据提供的 ON 子句获取两个表之间共有的所有记录。

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

RIGHT JOIN与上面类似,但是获取 RIGHT 表中的所有记录。

FULL JOIN从两个表中获取所有记录,并将 NULL 放入相反表中不存在相关记录的列中。

SQL JOIN 子句用于根据两个或多个表之间的公共字段合并行。

SQL 中有不同类型的联接:

INNER JOIN :两个表中都匹配时返回行。

LEFT JOIN :即使左侧表中没有匹配项,也返回左侧表中的所有行。

RIGHT JOIN :即使左侧表中没有匹配项,也返回右侧表中的所有行。

FULL JOIN :它合并了左右外部联接的结果。

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

SELF JOIN :用于将一个表连接到自身,就像该表是两个表一样,在 SQL 语句中临时重命名至少一个表。

CARTESIAN JOIN :从两个或多个联接表中返回记录集的笛卡尔积。

我们可以在 “详细信息” 中进行前四个联接:

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

表 A

id  firstName                  lastName
.......................................
1   arun                        prasanth                 
2   ann                         antony                   
3   sruthy                      abc                      
6   new                         abc

表 B

id2 age Place
................
1   24  kerala
2   24  usa
3   25  ekm
5   24  chennai

................................................... .....................

内部联接

注意 :它给出了两个表的交集,即它们在 TableA 和 TableB 中共有的行

句法

SELECT table1.column1, table2.column2...
  FROM table1
 INNER JOIN table2
    ON table1.common_field = table2.common_field;

将其应用到我们的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
 INNER JOIN TableB
    ON TableA.id = TableB.id2;

结果将是

firstName       lastName       age  Place
..............................................
arun            prasanth        24  kerala
ann             antony          24  usa
sruthy          abc             25  ekm

左联接

注意 :将提供 TableA 中所有选定的行,以及 TableB 中所有常见的选定行。

句法

SELECT table1.column1, table2.column2...
  FROM table1
  LEFT JOIN table2
    ON table1.common_field = table2.common_field;

将其应用到我们的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
  LEFT JOIN TableB
    ON TableA.id = TableB.id2;

结果

firstName                   lastName                    age   Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL

正确加入

注意 :将提供 TableB 中的所有选定行,以及 TableA 中的所有常见选定行。

句法

SELECT table1.column1, table2.column2...
  FROM table1
 RIGHT JOIN table2
    ON table1.common_field = table2.common_field;

将其应用到我们的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
 RIGHT JOIN TableB
    ON TableA.id = TableB.id2;

结果

firstName                   lastName                    age     Place
...............................................................................
arun                        prasanth                    24     kerala
ann                         antony                      24     usa
sruthy                      abc                         25     ekm
NULL                        NULL                        24     chennai

完全加入

注意 :它将返回两个表中的所有选定值。

句法

SELECT table1.column1, table2.column2...
  FROM table1
  FULL JOIN table2
    ON table1.common_field = table2.common_field;

将其应用到我们的示例表中:

SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
  FROM TableA
  FULL JOIN TableB
    ON TableA.id = TableB.id2;

结果

firstName                   lastName                    age    Place
...............................................................................
arun                        prasanth                    24    kerala
ann                         antony                      24    usa
sruthy                      abc                         25    ekm
new                         abc                         NULL  NULL
NULL                        NULL                        24    chennai

有趣的事实

对于 INNER 加入,顺序无关紧要

对于(LEFT,RIGHT 或 FULL)OUTER 加入,顺序很重要

最好去检查此链接 ,它将为您提供有关加入顺序的有趣详细信息