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

24 浏览
0 Comments

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

这个问题已经有了答案:

INNER JOIN和OUTER JOIN之间有什么区别?

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

admin 更改状态以发布 2023年5月21日
0
0 Comments

INNER JOIN根据提供的ON条件获取两个表之间相同的所有记录。

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

RIGHT JOIN与上述情况相似,但获取右表中的所有记录。

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

0
0 Comments

SQL JOIN子句用于根据它们之间的公共字段组合来自两个或多个表的行。

SQL中有不同类型的连接:

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

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

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

FULL JOIN:合并左外连接和右外连接的结果。

连接的表将包含来自两个表的全部记录,并为任一侧的缺失匹配填充NULL值。

SELF JOIN:将表自身作为两个表进行连接,就好像在SQL语句中暂时重命名了至少一个表。

CARTESIAN JOIN:返回来自两个或多个连接表的记录集的笛卡尔积。

我们可以查看详情中的前四个连接:

我们有两个表,以下是它们的值。

TableA

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

TableB

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

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

INNER JOIN

注意:给出两个表的交集,即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

LEFT JOIN

注意:会返回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连接,顺序很重要。

最好查看这个链接,它将为您提供有关连接顺序的有趣细节。

0