提问人:Lion King 提问时间:4/19/2011 最后编辑:DineshDBLion King 更新时间:8/26/2021 访问量:2140740
INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 之间有什么区别?[复制]
What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN? [duplicate]
问:
MySQL中的、和有什么区别?INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
答:
INNER JOIN 根据提供的 ON 子句获取两个表之间共有的所有记录。
LEFT JOIN 从 LEFT 链接中获取所有记录,并从 RIGHT 表中获取相关记录,但如果从 RIGHT 表中选择了一些列,如果没有相关记录,则这些列将包含 NULL。
RIGHT JOIN 与上述类似,但获取 RIGHT 表中的所有记录。
FULL JOIN 从两个表中获取所有记录,并将 NULL 放在另一个表中不存在相关记录的列中。
SQL JOIN 子句用于合并两个或多个表中的行, 基于它们之间的公共字段。
SQL 中提供了不同类型的联接:
INNER JOIN:当两个表中都存在匹配项时返回行。
LEFT JOIN:返回左表中的所有行,即使右表中没有匹配项。
RIGHT JOIN:返回右表中的所有行,即使左表中没有匹配项也是如此。
FULL JOIN:合并左外连接和右外连接的结果。
联接表将包含两个表中的所有记录,并为任一端缺少的匹配项填充 NULL。
SELF JOIN:将一个表连接到自身,就好像该表是两个表一样,在 SQL 语句中临时重命名至少一个表。
笛卡尔联接:从两个或多个联接表中返回记录集的笛卡尔积。
我们可以在 Details 中获取每个前四个连接:
我们有两个表,其值如下。
表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
左加入
注意:给出 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 连接,顺序很重要。
最好去检查这个链接,它会给你关于加入顺序的有趣细节。
评论
full join
与.请参阅 stackoverflow.com/questions/905379/... 和 social.msdn.microsoft.com/Forums/sqlserver/en-US/...union
下一个:使用 pip 安装特定包版本
评论