2014-03-19 73 views
0

什麼,當我寫這樣當使用多個表在MySQL中會發生什麼

Select * from table1,table2,table3

查詢我是執行自然連接,內連接或外連接到底會發生,是有必要在主鍵 - 表之間的外鍵關係

+5

您正在執行交叉連接。沒有PRIMARY KEY的表格不是真正的表格。 – Strawberry

+1

就像@Strawberry - 你正在執行一個交叉連接,並且你得到了你的表的笛卡爾積。有必要了解您需要採取哪些步驟才能實現目標。所以不,你不必有任何鑰匙。但你可能想要。你可能想要有FK關係。這完全取決於你在做什麼以及什麼是最佳方法。因此 - 知識=權力。 –

回答

3

正如其他人在評論中提到的,最終的輸出結果是三張表的笛卡爾積。這意味着,您可以在表格中獲得所有可能的記錄組合。這也稱爲CROSS JOIN,因爲您沒有匹配任何表上的任何列。例如,如果您的table1包含5條記錄(「A」,「B」,「C」,「D」和「E」),則表2包含3條記錄(「1」,「2」,「 「3」)和你的表3中包含3條( 「X」, 「Y」, 「Z」),你得到的表將包含5 * 3 * 3 = 45個記錄:

"A", "1", "x" 
"A", "1", "y" 
"A", "1", "z" 
"A", "2", "x" 
... 

...等上。

1

不需要將主鍵和外鍵彼此綁定。

,您的查詢選擇所有從表1中的數據,然後選擇這麼多時間從表2 數據爲表1有行,等等。

下面的例子:

  • 你有200行
  • 你有300行

你做SELECT * FROM table1,table2表2表1。結果將是(200 * 300 =)行。如果您偶然這樣做,可能會阻塞您的軟件幾分鐘,因爲它正在忙於選擇所有這些行。

相關問題