INNER JOIN,LEFT JOIN,RIGHT JOIN和FULL JOIN有什么区别?
INNER JOIN
, LEFT JOIN
, RIGHT JOIN
和FULL 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,订单事宜
最好去检查这个链接它会给你关于连接顺序的有趣的细节