上周我进行了一次技术面试,面试官问我如果运行以下查询会发生什么:
SELECT * FROM tbl1, tbl2
我想我回答正确,但这不是一个深入的答案。
我说我会选择两个表中的所有列。例如,如果 tbl1 有 3 列,而 tbl2 有 4 列。结果集将有 7 列。
然后他问我为什么是7?我说是因为我从每张桌子上选择了所有东西。
这是一个糟糕的答案,但我想不出别的。
切入正题,在接受采访后,我使用两张表执行了后一条语句。
表 A,有 3 种动物:狗、猫和大象。
表 B 有 2 个名字:Mat 和 Beth
这是我在执行语句后得到的结果集:
*********************************************
| id_tbl1 | name_tbl1 | id_tbl2 | name_tbl2 |
*********************************************
| 1 | dog | 1 | Mat |
| 2 | cat | 1 | Mat |
| 3 | elephant | 1 | Mat |
| 1 | dog | 2 | Beth |
| 2 | cat | 2 | Beth |
| 3 | elephant | 2 | Beth |
*********************************************
所以我的问题是,为什么声明会这样?
换句话说:
为什么表 B 的记录会重复,直到我到达表 A 的末尾,然后又重新开始?
你会如何以一种会让面试官“惊叹”的方式回答这个问题?
如果此问题不属于 SO,请随时删除或关闭它!