mysql - INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别?

标签 mysql sql join inner-join outer-join

<分区>

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

最佳答案

An SQL JOIN clause is used to combine rows from two or more tables, based on a common field between them.

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 联接,顺序很重要。

最好去检查这个 Link 它将为您提供有关加入订单的有趣详细信息。

关于mysql - INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804663/

相关文章:

SQL TOP 1 在子查询中使用时返回 null

mysql - 如何在 MySQL 中返回未找到值的列表

字段名相同时的SQL连接

mysql - 使用 WSL 设置 Headless WordPress 入门套件时出现问题

c# - 如何从表适配器获取正在执行的 SQL 查询?

mysql - 连接 3 个表,但有限制

SQL Server 加入临时表需要很长时间

mysql - 玩!框架 - 将 MySQL 和 MongoDB 用于同一应用程序

mysql - 错误查询 : DELETE and LEFT JOIN

mysql - 存储过程 OUT 返回空值