Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择语句访问查询_Sql - Fatal编程技术网

SQL选择语句访问查询

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的结

今天在一次采访中,我遇到了以下问题:

给定这两行,下面的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中的每一行,从而在输出中产生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条记录。