2014-04-15 27 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

相關問題