繁体   English   中英

谁能告诉我,SQL 中的内连接是如何工作的?

[英]Can anyone tell me, how inner join works in SQL?

我有一个表 A 和 B,都有一列两行,如下所示,

A  B
-------
C1 C2
1  1
1  1
1  0
0  0

如果我对此应用内部连接并且它返回 8 行作为结果,

Select C1,C2 from A inner join B on A.C1=B.C2;
Result
---------
C1 C2
1 1
1 1
1 1
1 1
1 1
1 1
0 0
0 0

我猜想,C1 列的第一行正在检查所有 C2 列的数据。 如果匹配,则返回结果,否则不会。 其余列采用相同的方法。 纠正我,如果我的理解有误,请协助回答以下问题;

我有两个表 A,B 都有两列。 如果我们应用内连接会有什么结果,请用功能解释我。

  A        B
----–-----------
C1 C2     C3 C4
1   1      1  1
1   1      1  0

在 A.C1=B.C3 上从 A 内连接 B 中选择 C1,C2,C3,C4;

它返回 4 行,请解释如何?

这是对内部联接的常见误解。 内连接的概念表示表的列中的值将与另一个表中连接列的每次出现的相同值匹配。

在您的示例中,在表 A 中,C1 列的 1 的第一行将与表 B 的 C2 列的值 1 的所有 2 行匹配,第二个 1 将与所有 2 个 1 匹配,然后第 3 个 1 将与 B 的所有 2 匹配。然后 0 将在表 B 中匹配 2 次。

因此它们变成 - 2(1's) + 2(1's) + 2(1's) + 2(0's) = 8 行。

同样的概念也适用于您的第二个示例。 由于您的第二个示例中有 2 列,因此您必须在此处决定连接谓词。

If you decided to join like `A.C1 = B.C3` then 4 rows will occur in result.
If you decided to join like `A.C1 = B.C4` then 2 rows will occur in result.
If you decided to join like `A.C2 = B.C3` then 4 rows will occur in result.
If you decided to join like `A.C2 = B.C4` then 2 rows will occur in result.

在您的示例中,如果您使用谓词A.C1 = B.C3 ,结果是:

c1  c2  c3  c4 
--- --- --- -- 
1   1   1   1  
1   1   1   1  
1   1   1   0  
1   1   1   0  

请参阅DB Fiddle 上的运行示例。

现在,作为一般规则,内连接将根据您指定的任何谓词匹配来自两个表的行,不一定是简单的列值。

例如:

A           B
--------    --------
C1 C2  #    C3 C4  #
1   1  A1   1  1   B1
1   1  A2   1  0   B2
            0  1   B3

如果谓词是a.c1 * a.c2 = b.c3 + b.c4 ,如查询:

select
  a.*,
  b.*
from a
join b on a.c1 * a.c2 = b.c3 + b.c4

结果是:

c1  c2  c3  c4   matching predicate
--- --- --- --   --------------------------
1   1   1   0    1 * 1 = 1 + 0  (A1 and B2)
1   1   1   0    1 * 1 = 1 + 0  (A2 and B2)
1   1   0   1    1 * 1 = 0 + 1  (A1 and B3)
1   1   0   1    1 * 1 = 0 + 1  (A2 and B3)

你看到行是如何匹配的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM