作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
上周我参加了一次技术面试,面试官问我如果运行以下查询会发生什么情况:
SELECT * FROM tbl1, tbl2
我想我回答对了,但这不是一个深入的回答。
我说过我会选择两个表中的所有列。例如,如果 tbl1 有 3 列,而 tbl2 有 4 列。结果集将有 7 列。
然后他问我为什么是7?我说是因为我正在从每个表中选择所有内容。
这是一个糟糕的答案,但我想不出其他任何东西。
切入正题,采访结束后,我使用两个表执行了后一条语句。
A 表,有 3 只动物:狗、猫和大象。
B 表有两个名字: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,欢迎删除或关闭!
最佳答案
如果您进行这样的选择,一个结果集中的所有行都会连接到另一个结果集中的所有行(笛卡尔积)。
因此,您将获得第一个表的所有行和第二个表的第一行的列表,然后是第二行的所有条目,依此类推。该命令可以是一个实现细节。不确定第一个订单是否由第一个表定义,它可能在不同的实现中有所不同。如果您连接三个表(或更多),那么所有表的所有行都会发生同样的情况。当然,这不仅适用于表,还适用于连接的任何结果集。
关于mysql - 如果我选择两个没有 WHERE 子句的表会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16053200/
我是一名优秀的程序员,十分优秀!