当使用多个表时,MySQL中会发生什么

时间:2014-03-19 14:26:01

标签: mysql sql

当我编写像

这样的查询时会发生什么

Select * from table1,table2,table3

我执行自然连接,内连接还是外连接,是否需要在表之间建立主键 - 外键关系

2 个答案:

答案 0 :(得分:3)

正如其他人在评论中提到的那样,结果输出是三个表的笛卡尔积。这意味着,您可以获得表中记录的所有可能组合。这也称为CROSS JOIN,因为您没有匹配任何表上的任何列。

例如,如果你的table1包含5条记录(“A”,“B”,“C”,“D”和“E”),你的table2包含3条记录(“1”,“2”,“ 3“)和你的table3包含3条记录(”x“,”y“,”z“),你的结果表将包含5 * 3 * 3 = 45条记录:

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

......等等。

答案 1 :(得分:1)

没有必要将主键和外键相互绑定。

但是您的查询从table1中选择 all 数据,然后选择多次来自table2 的数据,因为table1具有行,并且等等。

举个例子:

  • 你有table1 200行
  • 您的table2有300行

你做SELECT * FROM table1,table2。结果将是(200 * 300 =) 60000 行。如果你偶然这样做,它可能会阻止你的软件几分钟,因为它正在忙着选择所有这些行。