左连接的输出是什么?
What will be the output of the left join?
我有 2 个表 A 和 B。
Table A 有 3 行和 1 列,其值分别为 1、1、1。
Table B 有 2 行和 1 列,其值为 1、1。
应用左连接后,Table A 左连接 Table B
我将收到的输出是:
1, 1, 1.
是否正确?
不,你的假设不正确。如果加入您提到的列,您将得到 6 行 (3 x 2),因为每一行都相互匹配。
Table t1
id_t1
colx
1
1
2
1
3
1
Table t2
id_t2
coly
10
1
20
1
查询
select *
from t1
left outer join t2 on t2.coly = t1.colx
order by t1.id_t1, t2.id_t2;
结果
id_t1
colx
id_t2
coly
1
1
10
1
1
1
20
1
2
1
10
1
2
1
20
1
3
1
10
1
3
1
20
1
您似乎误解了左外部联接的作用。 table t1 中的每一行在 table t2 中都有两个匹配项。您可以通过左外部连接获得它们,但您也可以通过内部连接获得它们。两种连接类型之间的区别在于没有匹配项。让我们向 table t1:
添加另一行
id_t1
colx
4
2
t2 中没有值 2 的匹配项。内部联接不会在结果中显示此行。相反,左外部联接会将以下行添加到您的结果中:
id_t1
colx
id_t2
coly
4
2
null
null
我有 2 个表 A 和 B。 Table A 有 3 行和 1 列,其值分别为 1、1、1。 Table B 有 2 行和 1 列,其值为 1、1。 应用左连接后,Table A 左连接 Table B 我将收到的输出是: 1, 1, 1.
是否正确?
不,你的假设不正确。如果加入您提到的列,您将得到 6 行 (3 x 2),因为每一行都相互匹配。
Table t1
id_t1 | colx |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
Table t2
id_t2 | coly |
---|---|
10 | 1 |
20 | 1 |
查询
select *
from t1
left outer join t2 on t2.coly = t1.colx
order by t1.id_t1, t2.id_t2;
结果
id_t1 | colx | id_t2 | coly |
---|---|---|---|
1 | 1 | 10 | 1 |
1 | 1 | 20 | 1 |
2 | 1 | 10 | 1 |
2 | 1 | 20 | 1 |
3 | 1 | 10 | 1 |
3 | 1 | 20 | 1 |
您似乎误解了左外部联接的作用。 table t1 中的每一行在 table t2 中都有两个匹配项。您可以通过左外部连接获得它们,但您也可以通过内部连接获得它们。两种连接类型之间的区别在于没有匹配项。让我们向 table t1:
添加另一行id_t1 | colx |
---|---|
4 | 2 |
t2 中没有值 2 的匹配项。内部联接不会在结果中显示此行。相反,左外部联接会将以下行添加到您的结果中:
id_t1 | colx | id_t2 | coly |
---|---|---|---|
4 | 2 | null | null |