什麼,當我寫這樣當使用多個表在MySQL中會發生什麼
Select * from table1,table2,table3
查詢我是執行自然連接,內連接或外連接到底會發生,是有必要在主鍵 - 表之間的外鍵關係
什麼,當我寫這樣當使用多個表在MySQL中會發生什麼
Select * from table1,table2,table3
查詢我是執行自然連接,內連接或外連接到底會發生,是有必要在主鍵 - 表之間的外鍵關係
正如其他人在評論中提到的,最終的輸出結果是三張表的笛卡爾積。這意味着,您可以在表格中獲得所有可能的記錄組合。這也稱爲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中的數據,然後選擇這麼多時間從表2 數據爲表1有行,等等。
下面的例子:
你做SELECT * FROM table1,table2
表2表1。結果將是(200 * 300 =)行。如果您偶然這樣做,可能會阻塞您的軟件幾分鐘,因爲它正在忙於選擇所有這些行。
您正在執行交叉連接。沒有PRIMARY KEY的表格不是真正的表格。 – Strawberry
就像@Strawberry - 你正在執行一個交叉連接,並且你得到了你的表的笛卡爾積。有必要了解您需要採取哪些步驟才能實現目標。所以不,你不必有任何鑰匙。但你可能想要。你可能想要有FK關係。這完全取決於你在做什麼以及什麼是最佳方法。因此 - 知識=權力。 –