SQL选择语句访问查询
今天在一次采访中,我遇到了以下问题: 给定这两行,下面的SQL语句将返回多少行 表A和B,其中A和B各有10行SQL选择语句访问查询,sql,Sql,今天在一次采访中,我遇到了以下问题: 给定这两行,下面的SQL语句将返回多少行 表A和B,其中A和B各有10行 从A、B中选择* 我的答案显而易见:20。然而,我的面试官告诉我,据称是100英镑,尽管他说他自己并不买。有人能解释一下吗?该查询返回表a和B的笛卡尔乘积。表A中的每一行将与表B中的每一行匹配。10行*10行=100行 您可能将其解释为一个联合,其中表B中的所有行都附加到表a中行的底部 SELECT * FROM A UNION SELECT * FROM B 注意,只有当A和B的结
从A、B中选择*代码>
我的答案显而易见:20。然而,我的面试官告诉我,据称是100英镑,尽管他说他自己并不买。有人能解释一下吗?该查询返回表a
和B
的笛卡尔乘积。表A中的每一行将与表B中的每一行匹配。10行*10行=100行
您可能将其解释为一个联合
,其中表B中的所有行都附加到表a中行的底部
SELECT * FROM A
UNION
SELECT * FROM B
注意,只有当A
和B
的结构相同时,这才有效。这是笛卡尔连接。A中的所有行将连接到B中的每一行,从而在输出中产生100行:
A1, B1
A1, B2
A1, B3
. . .
A2, B1
A2, B2
A2, B3,
. . .
A10, B8
A10, B9
A10, B10
如果您选择两个表而不应用任何连接,那么数据库将自动将笛卡尔积作为默认连接。因此,您将有100行作为结果集。
< P>这相当于在T-SQL中使用交叉连接,因此您将得到笛卡尔积,因为没有ON子句来关联表,也没有WHERE子句来过滤结果。请参阅。当您不使用任何连接条件时,SQL将执行一个笛卡尔乘积,第一个表的每一行都映射到第二个表的每一行
您将获得以下记录:
table1row1 table2row1
table1row1 table2row2
table1row1 table2row3
........
........
table1row2 table2row1
.....
and so on
.....
表1箭头10表2箭头10
这样您将获得100条记录。