INNER JOIN、 LEFT JOIN、 RIGHT JOIN 和 FULL JOIN 有什么区别?
INNER JOIN、 LEFT JOIN、 RIGHT JOIN 和 FULL JOIN 有什么区别?
这个问题已经有了答案:
在MySQL中,INNER JOIN
、LEFT JOIN
、RIGHT JOIN
和FULL JOIN
有什么区别?
admin 更改状态以发布 2023年5月21日
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
注意:给出两个表的交集,即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
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
右连接
注意:会返回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
有趣的事实
- 对于INNER连接,顺序并不重要。
- 对于(LEFT,RIGHT或FULL) OUTER连接,顺序很重要。
最好查看这个链接,它将为您提供有关连接顺序的有趣细节。