MySQL中,INNER JOIN
、LEFT JOIN
、RIGHT JOIN
和FULL JOIN
有什么区别?
MySQL中,INNER JOIN
、LEFT JOIN
、RIGHT JOIN
和FULL JOIN
有什么区别?
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
表格B
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
内连接(INNER JOIN)
注:返回两个表中共同存在的行。
语法
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
右连接(RIGHT 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
FULL JOIN
Note:返回两个表格中所有选择的值。
Syntax(语法)
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
有趣的事实
最好去查看这个链接,它会为您提供有关连接顺序的有趣细节。
full join
不等同于 union
。请参考以下链接:https://dev59.com/yHNA5IYBdhLWcg3wk-6A 和 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cb8fed73-c134-46ef-aff8-7d4ea57a1033/difference-between-union-all-and-full-outer-join?forum=transactsql。 - John Smith内连接(INNER JOIN)基于提供的ON子句获取两个表之间的共同记录。
左连接(LEFT JOIN)获取左侧表中的所有记录以及来自右侧表的相关记录,但是如果你选择了右侧表中的某些列,如果没有相关记录,则这些列将包含NULL。
右连接(RIGHT JOIN)与上述类似,但获取右侧表中的所有记录。
全连接(FULL JOIN)获取两个表中的所有记录,并在不存在相对应的记录时将在列中放置NULL。