INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN有什么区别?MySQL?
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
内连接根据提供的ON子句获取两个表之间公共的所有记录。
左加入从链接的LEFT中获取所有记录,从右表中获取相关记录,但如果您从右表中选择了一些列,如果没有相关记录,这些列将包含NULL。
右加入类似于上述,但获取右表中的所有记录。
全面加入从两个表中获取所有记录,并将NULL放在相对表中不存在相关记录的列中。
阅读这篇关于代码项目的原创文章会对你有很大帮助:SQL连接的可视化表示。
看看这篇文章:SQL服务器-更好的性能-左加入或不加入?。
找到原始的:MySQL中JOIN和OUTER JOIN的区别。
SQLJOIN子句用于合并来自两个或多个表的行,基于它们之间的公共字段。
SQL中有不同类型的连接可用:
内连接:当两个表中都有匹配项时返回行。
左加入:返回左表中的所有行,即使右表中没有匹配项。
右加入:返回右表中的所有行,即使左表中没有匹配项。
全面加入:合并左外连接和右外连接的结果。
联接的表将包含两个表中的所有记录,并为任何一侧缺少的匹配项填写NULL。
自我加入:将表连接到自身,就好像表是两个表一样,暂时重命名SQL语句中的至少一个表。
加泰罗尼亚加入:返回来自两个或多个连接表的记录集的笛卡尔乘积。
我们可以在详细信息中获取每个前四个连接:
我们有两个具有以下值的表。
表A
id firstName lastName.......................................1 arun prasanth2 ann antony3 sruthy abc6 new abc
表B
id2 age Place................1 24 kerala2 24 usa3 25 ekm5 24 chennai
..................................................................。
内连接
说明:给出两个表的交集,即TableA和TableB共有的行。
语法
SELECT table1.column1, table2.column2...FROM table1INNER JOIN table2ON table1.common_field = table2.common_field;
在我们的示例表中应用它:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableAINNER JOIN TableBON TableA.id = TableB.id2;
结果
firstName lastName age Place..............................................arun prasanth 24 keralaann antony 24 usasruthy abc 25 ekm
左加入
说明:给出TableA中的所有选定行,以及TableB中的任何常见选定行。
SELECT table1.column1, table2.column2...FROM table1LEFT JOIN table2ON table1.common_field = table2.common_field;
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableALEFT JOIN TableBON TableA.id = TableB.id2;
firstName lastName age Place...............................................................................arun prasanth 24 keralaann antony 24 usasruthy abc 25 ekmnew abc NULL NULL
右加入
说明:给出TableB中的所有选定行,以及TableA中的任何常见选定行。
SELECT table1.column1, table2.column2...FROM table1RIGHT JOIN table2ON table1.common_field = table2.common_field;
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableARIGHT JOIN TableBON TableA.id = TableB.id2;
firstName lastName age Place...............................................................................arun prasanth 24 keralaann antony 24 usasruthy abc 25 ekmNULL NULL 24 chennai
全面加入
说明:返回两个表中的所有选定值。
SELECT table1.column1, table2.column2...FROM table1FULL JOIN table2ON table1.common_field = table2.common_field;
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.PlaceFROM TableAFULL JOIN TableBON TableA.id = TableB.id2;
firstName lastName age Place...............................................................................arun prasanth 24 keralaann antony 24 usasruthy abc 25 ekmnew abc NULL NULLNULL NULL 24 chennai
有趣的事实
最好去检查这个链接,它会给你关于加入顺序的有趣细节。