2014-04-15 23 views
1

我有两个客户和销售表。如何计数(1)与sql中的两个表一起工作

客户:

 
custid custname loc 
1001 aaa  a 
1002 bbb  b 
1003 ccc  c 

销售:

 
salesid salesname saleloc 
1001  ddd  d 
1002  eee  e 

我查询

select count(1) from customer, sales 

和我得到的计数结果为6

  1. 任何人都可以解释它背后的逻辑吗?
  2. 还有,如果使用什么样的连接?
  3. 如果销售有第三列,则计数结果变为9.那么如何发生?

在此先感谢。

+2

你正在做一个CROSS JOIN,该行的笛卡尔积,因为你没有连接标准。实质上,你在右边的每一行都得到一行 - '3 * 2 = 6' ...'3 * 3 = 9'。 count(1)中的1不重要 - 它只会计算行数(1只是表达式 - 您可能还会使用*) – Charleh

+1

您提到在销售中添加“第三列”?销售表已经有三列。你的意思是“第三排”?另外,如果您执行'SELECT * ...'而不是'SELECT COUNT(1)...',则可以帮助解释这一点。分享并享受。 –

+0

@subee。 。 。你应该避免在'from'子句中使用''''。如果你使用'cross join'(这是等价的)写这个,那么回答你的问题就显而易见了。 –

回答

3

由于表格未与键列连接,因此它变成CROSS JOIN。所以销售行数(3 * 2)的行数总共变成6行,并且计数函数返回结果

1

这只是CARTESIAN产品。

客户表的每一行都与销售表的每一行连接在一起。

例如,

1001 AAA一个1001 DDD d1002 EEEë - 获取来自客户表链接一行与在销售表中的所有行时>。

所以结果之际,3×2 = 6(3行中的客户表,2排在销售表),类似地,对于3×3 = 9(在每个表中的行3)

这是它背后的逻辑。

0

1)图6是笛卡尔乘积3×2

2)否联接是用于1)的结果:它是一个笛卡尔乘积;

3)9笛卡尔积3的结果×3

相关问题