INNER JOIN"、"LEFT JOIN"、"RIGHT JOIN "和 "FULL JOIN "之间有什么区别? 在MySQL中有何区别?
阅读**代码项目上的这篇原创文章会对你有很大的帮助。SQL连接的可视化表示。
也可以看看这个帖子。SQL SERVER - 更好的性能 - LEFT JOIN 或 NOT IN?。
在以下网站上找到原文。MySQL中JOIN和OUTER JOIN的区别。
INNER JOIN根据提供的ON子句,获得两个表之间共同的所有记录。
LEFT JOIN从左侧链接的表中获得所有记录,但如果你从右侧表中选择了一些列,如果没有相关记录,这些列将包含NULL。
RIGHT JOIN与上述相同,但获得右表中的所有记录。
FULL JOIN从两个表中获取所有的记录,并在相反的表中不存在相关记录的列中放入NULL。
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
注意 :它给出了两个表的交集,即它们在表A和表B中有共同的行。
语法
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
注意:将给出表A中的所有选定行,加上表B中的任何共同选定行。
语法
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
有趣的事实
对于内联的顺序并不重要
对于(左、右或全)外连接,顺序是重要的。
最好去看看这个链接,它将给你关于连接顺序的有趣细节