gpt4 book ai didi

mysql - 如果我选择两个没有 WHERE 子句的表会怎样?

转载 作者:可可西里 更新时间:2023-11-01 07:46:55 27 4
gpt4 key购买 nike

上周我参加了一次技术面试,面试官问我如果运行以下查询会发生什么情况:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com