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

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

阅读这篇关于代码项目的原始文章将会帮助你很多: SQL连接的可视化表示 。

替代文字

另外检查这个职位: SQL服务器 – 更好的性能 – 左join或不在? 。

查找原始的一个: 在MySQL的JOIN和OUTER JOIN之间的区别 。

INNER JOIN根据外键获取两个表之间通用的所有logging

LEFT JOIN从LEFT链接表中获取所有logging,但是如果从RIGHT表中select了一些列,如果没有相关logging,这些列将包含NULL

RIGHT JOIN就像上面的那样,但是在RIGHT表中获取所有的logging

FULL JOIN从两个表中获取所有logging,并将NULL置于相对表中不存在相关logging的列中

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

SQL中有不同types的连接:

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

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

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

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

连接的表格将包含来自两个表格的所有logging,并在任一侧填充缺失匹配的NULL。

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

CARTESIAN连接 :从两个或多个连接的表中返回logging集的笛卡尔乘积。

我们可以采取每个前四个连接细节:

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

表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 

左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 

正确的join

注意 :将为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 

完全join

注意 :与联合操作相同,它将从两个表中返回所有选定的值。

句法

 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 

有趣的事实

INNERjoin顺序并不重要

对于(左,右或全)OUTERjoin,订单事宜

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